美文网首页
h5 video 视频播放开发 和 问题集合

h5 video 视频播放开发 和 问题集合

作者: cain07 | 来源:发表于2022-02-08 20:42 被阅读0次

1.h5 video支持的格式

一共支持三种格式: Ogg、MPEG4、WebM。但这三种格式对于浏览器的兼容性却各不同。

image

重点:比如MP4格式,MP4只是一个容器,里面还有一个叫编码器的东西。格式虽然都是MP4但是html中只支持H.264的编码格式。所以要用软件来转码。
MP4 = MPEG 4文件使用 H264 视频编解码器和AAC音频编解码器
WebM = WebM 文件使用 VP8 视频编解码器和 Vorbis 音频编解码器
Ogg = Ogg 文件使用 Theora 视频编解码器和 Vorbis音频编解码器

2.h5 video视频添加封面图片

<video poster="images/spbg.jpg" src="about.mp4" controls="controls">
您的浏览器不支持 video 标签。
</video>

补充:有时会出现视频封面无法铺满的情况,需要使用object-fit属性铺满整个屏幕

3.h5 video标签屏蔽下载按钮和取消右键菜单

<style type="text/css">
 video::-internal-media-controls-download-button {
  display:none;
}
video::-webkit-media-controls-enclosure {
    overflow:hidden;
 }
video::-webkit-media-controls-panel {
  width: calc(100% + 30px);
}
 </style>

如果是PC电脑上,完全可以用video标签controlsList属性,修改成如下即可!

<video controls controlsList="nodownload"></video>

//去除右键事件

$("video").live("contextmenu",function(){//取消右键事件
    return false;});

4.H5兼容性,参考代码:

<video
  id="videowrap" 
  src="video/test.mp4" 
  poster="images/1.jpg" /*视频封面*/
  preload="auto" 
  webkit-playsinline="true" /*这个属性是ios 10中设置可以
                     让视频在小窗内播放,也就是不是全屏播放*/  
  playsinline="true"  /*IOS微信浏览器支持小窗内播放*/ 
  x-webkit-airplay="allow" 
  x5-video-player-type="h5"  /*启用H5播放器,是wechat安卓版特性*/
  x5-video-player-fullscreen="true" /*全屏设置,
                     设置为 true 是防止横屏*/>
  x5-video-orientation="portraint" /*播放器支付的方向,
                     landscape横屏,portraint竖屏,默认值为竖屏*/
  style="object-fit:fill">
</video

5.video在播放m3u8拖动进度条BUG 拖动回弹

video在播放m3u8拖动进度条,进入缓冲时会卡很久,比如当前播放1:20秒,拖动进度条到1:30秒,会进行缓冲,要缓冲很久,且缓冲好之后,会跳到1:35秒-1:45秒左右继续播放,并不会在实际拖动进度条的位置播放。
此问题在小程序上不会出现,只在app端有 部分ios手机有这现象

问题已确认。

因为该m3u8是加密的hls流。每个切片大小为10s

1 卡顿问题,比如 当跳转至下一分钟时,需要连续下载6个切片且解密成功后,才能继续播放,所以会有卡顿现象。
2 seek不准确的问题, 因为切片的最小单位是10s,每次跳转后需要重新下载并且从下一个10s开始播放。

uni-app的video组件基于 ffmpeg。
上述两个问题在 ffplay 和 vlc播放器上同样存在。

微信小程序不存在此问题,从现象上看,因为他从第一秒播放的时候就预加载了尽可能多的切片到本地,后续的播放都是本地操作。
稍后video组件会支持类似的功能。

6.video 点击全屏 如何横屏播放

h5 video 横屏播放

https://www.jianshu.com/p/23f9dbfab563

7.video 视频图像 变形 拉伸 压缩

video{

  height:auto;
  width:100%
}
方法一 css 写法 video视频自适应缩放显示 根据宽高比16:9

https://blog.csdn.net/weixin_45266779/article/details/120990591

方法二 通过 js 计算的方法 设置 object-fit 属性

https://www.cnblogs.com/congxueda/p/15091316.html

方法三 调整rotateX即可实现高度变小,也就是宽高比变大了

https://www.cnblogs.com/liuxianan/p/html5-video-resize.html

方法四

8.video ios 打开页面 禁止 全屏 播放

video 标签中添加playsinline属性 webkit-playsinline='true' playsinline='true'
<video controls="controls" 
webkit-playsinline='true'
 playsinline='true' 
preload="auto">  
</video>
native层

Obj-C中,需要添加配置webview.allowsInlineMediaPlayback = YES;
Swift请查找相关API进行配置。

开发5+App,需要在manifest.json的plus节点下新增allowsInlineMediaPlayback节点为true。

"plus":{  
    "allowsInlineMediaPlayback": true  
}

9.video ios 禁止 画中画 不显示 画中画按钮 disablePictureInPicture

            <video id="video"
                   width="320" height="240"  webkit-playsinline  playsinline="true" 
                    x5-video-player-type="h5" x5-video-player-fullscreen="false" 
                    src="@/assets/images/content-service/1637212363598590.mp4" 
                    x5-video-orientation="landscape" controls="controls" 
                    controlslist="nodownload" 
                    disablePictureInPicture
                    :poster="joinCmsServer(articleDetail.thumbnail)" >
                    your browser does not support the video tag
                  </video>

10. 监听 全屏 和 非全屏事件

document.addEventListener('webkitfullscreenchange', function() {  
        var el = document.webkitFullscreenElement; //获取全屏元素  
        console.log('--webkitfullscreenchange--' + el)
        if(el) {  
             console.log('--全屏--')
        } else {  
            console.log('--非全屏--')
        }  
      });  
<script>
    //jQuery监听事件(窗口状态改变)
    $(window).resize(function () {
        if (checkIsFullScreen()) {
            console.log("进入全屏");
        } else {
            console.log("退出全屏");
        }
    });
    //js监听事件(全屏状态改变)
    /*document.addEventListener('fullscreenchange', () => {
        if (checkIsFullScreen()) {
            console.log("进入全屏");
        } else {
            console.log("退出全屏");
        }
    });*/
    //上面2个监听事件可根据项目需求2选1,然后调用此检测全屏方法
    function checkIsFullScreen(){
        var isFullScreen = document.fullscreen || document.mozFullScreen || document.webkitIsFullScreen;
        return isFullScreen == undefined ? false : isFullScreen;
    }
</script>    

安卓监听进入全屏的事件:

jsvideo.addEventListener("x5videoenterfullscreen", () => {
  console.log("进入全屏通知");
})
jsvideo.addEventListener("x5videoexitfullscreen", () => {
  console.log("退出全屏通知");
})

IOS监听进入全屏的事件:

jsvideo.addEventListener("webkitbeginfullscreen", () => {
  console.log("进入全屏通知");
})

jsvideo.addEventListener("webkitendfullscreen", () => {
  console.log("退出全屏通知");
})

相关文章

网友评论

      本文标题:h5 video 视频播放开发 和 问题集合

      本文链接:https://www.haomeiwen.com/subject/uekohrtx.html