alilmq / h5demo

Aliplayer的H5使用例子,包含播放、播放列表、评论、点赞、客户端长连接mqtt等功能,解决了微信Android自动弹出全屏播放的问题。
106 stars 35 forks source link

hybird app内如何使用JS禁止IOS播放即自动全屏的行为? #15

Closed DidoFitch closed 6 years ago

DidoFitch commented 6 years ago

开发的是mui框架的hybird app,项目不能使用ES6,是用的最原始的JS进行Aliplayer的创建等操作

DidoFitch commented 6 years ago

requestFullScreen事件监听不到全屏事件

alilmq commented 6 years ago
  1. 可以设置aliplayer的playsinline:true,同时 WebView 需要设置 allowsInlineMediaPlayback,这样页面在 App 里打开时视频就能以非全屏模式(即内联的方式)播放了
  2. 这个是在iOS下面的一个bug, 新版本会修复
DidoFitch commented 6 years ago

回复:问题1已解决,但是新的问题出现了,我发现在IOS下seek()方法无效了,无法跳转到指定时间开始播放。 详细情况:IOS 7.1.2, 拟实现功能:自动记录播放进度,下次进入页面时续播。 目前情况:可以正常记录进度,调试通过,但seek()后仍然从头开始播放,seek()方法写在播放器创建完成后的回调内的

DidoFitch commented 6 years ago

对于requestFullScreen的问题,在IOS下主动点击全屏按钮是可以监听的,这个是我描述不够清楚,具体是因为我没设置内联播放,所以IOS自动全屏的这个事件用requestFullScreen监听不到,这应该不算BUG...

alilmq commented 6 years ago

把seek事件写在play事件里试一下

DidoFitch commented 6 years ago

仍然无效的 player.on("play",function(e){ //开始播放时要做的 vue_obj.CurrentTime = getDB("video_"+vue_obj.section.id) || 0;//获取本地记录的本课程视频学习时间 if(vue_obj.CurrentTime > 0){ //如果记录有播放时间,则接着播放 console.log(vue_obj.CurrentTime); //这里输出时间正常 player.seek(vue_obj.CurrentTime);//跳转到记录的时间开始播放 } if(vue_obj.CurrentTime > 0 && !can_pause){ mui.toast("已为您跳转到上次记录的时间"); } getTime(); var t2 = setTimeout(function(){ can_pause = true; },1000*2) }); 而且我尝试seek一个定值,也无效

alilmq commented 6 years ago

你可以试一下原生的seek方法可不可以的, 是不是平台本身的限制, $(that.player.el()).find('video')[0].currentTime =10, 也可以在canplay事件里尝试一下, 这个事件会多次触发,需要判断一下是不是第一次触发

DidoFitch commented 6 years ago

我尝试下吧,也麻烦您有空测试下IOS下的seek 另外文档里好像没有canplay事件?

alilmq commented 6 years ago

嗯,canplay是原生播放器本身的事件,可以尝试一下, 进度条的拖动就是通过seek实现的,如果可以拖动,方法本身应该是没问题的, 其实你这种case是不是应该在new Aliplayer的回调方法里, 通过loadByUrl方法加载地址播放,这个方法的第二个参数可以传开始播放的时间

DidoFitch commented 6 years ago

项目采用的VideoID+PlayAuth的方案,而且不允许拖动。 但是IOS端全屏后像是被IOS自带视频播放器拦截了,仍然可以拖动,全屏后的UI也是IOS的

alilmq commented 6 years ago

iOS端全屏调用的是video的全屏方法, 这样全屏后可以旋转