微信中的安卓机型支持小屏播放方法研究

微信在安卓机播放视频时,默认会自动全屏,视频部分居中显示。但是项目需要中,不能让它全屏,下面还有其他的信息。参考多种方法(具体参考文档可看文章末尾详情),现将解决方法总结如下:

先上代码:

外层的div是为了更好的控制video的大小的,大小比例为16:9,后面会讲到控制宽高比的js,我们先把这个video里面的属性整清楚,整明白~

<div class="video-area" id="lesson_player_wrap">
<video id="videoPlayer" class='video_player' type='application/x-mpegURL' src=""
  preload="auto"
  autoplay="autoplay"
  style="width: 100%;height: 100%;"
  webkit-playsinline="true"
  playsinline="true"
  x-webkit-airplay="true"
  x5-video-player-type="h5" /*启用H5播放器,是wechat安卓版特性*/
  x5-video-player-fullscreen="true" /*全屏设置,设置为 true 是防止横屏*/
> </video> </div>

preload="auto" :属性规定在页面加载后载入视频。如果设置了 autoplay 属性,则忽略该属性。
一般参数可能的值:
· auto - 当页面加载后载入整个视频
· meta - 当页面加载后只载入元数据
· none - 当页面加载后不载入视频

controls="controls" :属性规定浏览器应该为视频提供播放控件。

autoplay="autoplay": 视频自动播放设置,但是有经验的人都应该知道,autoplay标签在手机上不兼容,APP中设置问题导致无法自动播放,无论安卓或IOS。需要模拟自动播放只能通过一些事件触发。

webkit-playsinline="true":视频播放时局域播放,不脱离文档流 。但是这个属性比较特别, 需要嵌入网页的APP比如WeChat中UIwebview 的allowsInlineMediaPlayback = YES webview.allowsInlineMediaPlayback = YES,才能生效。换句话说,如果APP不设置,你页面中加了这标签也无效,这也就是为什么安卓手机WeChat 播放视频总是全屏,因为APP不支持playsinline,而ISO的WeChat却支持。
这里就要补充下,如果是想做全屏直播或者全屏H5体验的用户,ISO需要设置删除 webkit-playsinline 标签,因为你设置 false 是不支持的 ,安卓则不需要,因为默认全屏。但这时候全屏是有播放控件的,无论你有没有设置control。 做直播的可能用得着播放控件,但是全屏H5是不需要的,那么去除全屏播放时候的控件,需要以下设置:同层播放

x5-video-player-type="h5":启用同层H5播放器,就是在视频全屏的时候,div可以呈现在视频层上,也是WeChat安卓版特有的属性。同层播放别名也叫做沉浸式播放,播放的时候看似全屏,但是已经除去了control和微信的导航栏,只留下"X"和"<"两键。目前的同层播放器只在Android(包括微信)上生效,暂时不支持iOS。

x5-video-orientation:声明播放器支持的方向,可选值landscape 横屏,portraint竖屏。默认值portraint。无论是直播还是全屏H5一般都是竖屏播放,但是这个属性需要x5-video-player-type开启H5模式

x5-video-player-fullscreen="true":全屏设置。ture和false的设置会导致布局上的不一样

加了这些属性之后再在安卓机上测试,视频不会全屏播放了。实际项目中测试结果可能会有差异,我的测试环境是,微信6.6.5,安卓7.1.1。

下面是宽高比的js:

 $.resizeVideo = function () {
    var videoWidth = $('.page-content-main').width(); //.page-content-main表示相对于哪个容器16:9
    var videoHeight = (videoWidth * 9) / 16;
    $("#lesson_player_wrap").height(videoHeight);
}
$.resizeVideo();

 

参考文档:

X5同层播放器试用报告

微信中的video属性设置

video 标签在微信浏览器的问题解决方法

这是一个灵活的视频播放器。 MediaPlayer与VideoView完全分开,可以替换为其他播放器内核,如ExoPlayer和ijkPlayer。 可以完全自定义播放器视图,我们称之为控制面板。 此外,可以使用MediaPlayerManager来控制播放行为,例如全屏模式,小屏幕模式以及RecyclerView的智能匹配模式。Features全屏,小屏播放内部支持RecyclerView播放自定义UIAPP内全局播放静音循环播放手势操作(小窗:单指拖动,双指缩放;全屏:音量,亮度,快进)ijkPlayer支持ExoPlayer支持重力感应支持PreviewDownloadDemo DownloadGetting startedbuild.gradledependencies {     // required     implementation 'org.salient.artvideoplayer:artplayer-java:0.6.0'     // Default control panel: optional     implementation 'org.salient.artvideoplayer:artplayer-ui:0.6.0'      //ijkPlayer: optional      implementation 'org.salient.artvideoplayer:artplayer-ijk:0.6.0'      implementation "org.salient.artvideoplayer:artplayer-armv7a:0.6.0"       //Other ABIs: optional      implementation "org.salient.artvideoplayer:artplayer-armv5:0.6.0"      implementation "org.salient.artvideoplayer:artplayer-x86:0.6.0"      // Other ABIs: optional (minSdk version >= 21)      implementation "org.salient.artvideoplayer:artplayer-arm64:0.6.0"      implementation "org.salient.artvideoplayer:artplayer-x86_64:0.6.0"      //ExoPlayer2 : optional      implementation "org.salient.artvideoplayer:artplayer-exo:0.6.0" }Usagejavaimport org.salient.artplayer.VideoView;VideoView videoView = new VideoView(this); videoView.setUp("http://vfx.mtime.cn/Video/2018/06/27/mp4/180627094726195356.mp4"); videoView.setControlPanel(new ControlPanel(this)); videoView.start();xmlAndroidManifest.xml <!-- required -->Activity@Overridepublic void onBackPressed() {  if (MediaPlayerManager.instance().backPress(this)) {      return;   }  super.onBackPressed(); }@Overrideprotected void onPause() {  super.onPause();  MediaPlayerManager.instance().pause(); }@Overrideprotected void onDestroy() {  super.onDestroy();  MediaPlayerMa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值