h5中video的一些坑

  最近我们的项目做了有关短视频的功能,当然视频的合成还是在客户端来完成,涉及到前端页面的部分就是要有一个H5的落地页,这个页面上要有对视频进行播放。起初我觉得这事儿还是挺简单的,不就是在页面上放一个<video>标签,然后用js控制播放暂停就ok了嘛。但是随着测试和上线的过程中我发现还是有好多问题值得去研究的,因此就有了这篇文章。

                            

不就是一个<video>吗,有什么难的?

  这就是我最初的想法,在W3C上找一下有关<video>的文档(http://www.w3school.com.cn/html5/html_5_video.asp),在页面上放一个<video>,设置src和一些属性(比如:controls、autoplay等等),然后上层盖住一个封面和开始播放的按钮,绑定按钮事件,用js控制play()或者pause(),就像W3C上的demo一样,好像没有什么不对的,似乎也应该是这样。打开chrome模拟器,也确实是可以正常播放。

                  

iOS 全屏显示

  那么我们来看一下在iphone上的效果,这个视频自动占满全屏了(这里说的全屏指的是占满整个屏幕,不仅仅是浏览器的内容显示区),它不应该按照我的css,乖乖的在div里边吗?

                      

  上图是全屏播放的效果(占满整个屏幕),右图是ios的系统播放控件,我查了一下还真有属性控制全屏

<video
  id="videoALL"
  src="video/01.mp4"
  poster="images/1.jpg" /*视频封面*/
  preload="auto"  autoplay="autoplay"
  webkit-playsinline="true" /*这个属性是ios 10中设置可以,让视频在小窗内播放,也就是不是全屏播放*/
  playsinline="true" /*IOS微信浏览器支持小窗内播放*/
 loop="loop" /*循环播放(不写不循环)*/
  controls="controls" /*显示控制按键(不写不显示)*/style="object-fit:cover"
</video>

  其中 webkit-playsinline 和 playsinline 就是设置视频是否全屏播放,设置为true即不全屏播放,除此之外还要设置 style="object-fit:cover" (cover保持比例,fill会拉伸,更多关于object-fit,请看: https://developer.mozilla.org/zh-CN/docs/Web/CSS/object-fit)保证在不全屏的情况下视频可以充满外层的容器(如div)。当然我们的需求就是全屏播放,所以我不设置这一条,就是让他全屏,但是我并不希望它一加载就全屏展示,我想点击开始按钮后在全屏展示,换句话说如果不写webkit-playsinline 和 playsinline,视频就会在一开始就占满屏幕,我满要做的其实是手动触发播放,也就是说,在按钮的click事件中向页面动态插入<video>就好了,注意别忘了autoplay或者调用dom.play()。

安卓不能播放,尴尬,流媒体和视频格式要注意

  看到ios的效果后,我就提测了,结果出现了一个大问题,安卓手机上不能播放,主要的现象是只有声音没有图像,我调查了一下这方面的原因,第一步加上了这条属性

x5-video-player-type="h5"  /*启用H5播放器,是wechat安卓版特性*/

  即在安卓的微信中使用X5内核的播放器,可以在一定成都上提高兼容性,加上之后确实有一部分安卓机可以播放了,但是并不是所有的都得到了解决。应该是还有其他的原因。我此时想到有可能不仅仅是前端代码的问题,我们怀疑有两点:当前服务是否支持流媒体;视频格式是否具有兼容性。我在网上找来一些其他短视频平台的视频链接,作为我们的src,结果发现在安卓上没有任何问题。把文件下载后放在我们的服务上,发现也能正常播放,这说明我们的服务是支持流媒体的。那么就看文件格式了,经过文件的格式对比发现

我们生成的视频文件:

          

其他短视频app的视频文件:

            

  通过对比我们可以看到我们的格式是 MPEG-4 Visual ([email protected]) 而其他平台的是AVC(advan Video Codec)([email protected]),两者外表看都是mp4格式,又有什么区别呢?

MPEG-4 Visual ([email protected])  与 AVC(advan Video Codec)([email protected])

  两种不同的mp4文件,却一个能播放另一个不能,让我们来看看他们的区别可以看这篇文章https://blog.csdn.net/mayh554024289/article/details/53635210

  以下是我的二手信息,个人理解:    

  MPEG-4 Visual([email protected]) 是一种相对与落后的格式,仅在早期使用;

  AVC ([email protected]) 是一种H.264格式,比较适合文件传输和流媒体播放。是MPEG-4 标准所定义的最新,同时也是技术含量最高、代表最新技术水平的视频编码格式之一。

  而且同一个我们的短视频前者文件大小4.3M,后者1.3M。

  这里只是实验的结果发现AVC可用,无兼容性问题,那么我们来看看理论依据

  [安卓支持的编解码器]: MPEG -1/2 , DIVX ( 1/2/3 ) , MPEG-4 ASP , DivX的4/5/6 ,XviD格式, 3ivx的D4 , H.261,H.263 / H.263i , H.264 / MPEG – 4 AVC , EPAK ,Theora格式,狄拉克/ VC- 2 , MJPEG ( A / B ) ,半WMV ,WMV 3 / WMV – 9 / VC- 1 ,索伦森1/3 ( QuickTime的) ,DV (数字视频) , On2公司VP3/VP5/VP6是的,实时视频1/2 ,实时视频3/4

  MPEG – 4 AVC是两大系统都共同支持的格式,我们不能在H5中转码的情况下,AVC就是最好的选则。

不全屏时的播放比例

  如果你在想非全屏播放,那么除了object-fit:cover外,你还要给<video>设置height,注意是height属性,而不是CSS中的height,如果不设置object-fit,你还要设置width。

禁止横屏

  没有设置竖屏锁定的手机会在全屏模式下手机横屏是自动将视频横过来,但是我们的视频本身是竖版的,一旦横屏,反而变小了,就像这样:

              

  那么就要留意这个属性了:

x5-video-orientation="portraint" /*播放器支付的方向,
                     landscape横屏,portraint竖屏,默认值为竖屏*/

  以上就是我这次H5视频播放的踩坑记录,希望能对大家有所帮助!

原文地址:https://www.cnblogs.com/webARM/p/9280031.html

时间: 2024-11-10 22:17:49

h5中video的一些坑的相关文章

Html5之高级-4 HTML5视频处理(H5中播放视频、编程实现视频播放器)

一.在 HTML5 中播放视频 在 HTML5 中播放视频 - HTML5 中提到最多的是视频处理,视频也是互联网中的重要应用.在HTML5中,增加了一个元素,以便在HTML文档中插入和播放视频,这个元素就是video元素 - video元素提供了播放.暂停和音量控件来控制视频,也提供了width和height属性控制视频的尺寸.如设置的高度和宽度等. - 使用video元素至少要提供两种视频格式的文件: OGG和MP4 - OGG: 包含Theora 视频和 Vorbis 音频解码器 - MP

H5 的 video

上个星期,项目需求是在公司服务器上放些视屏,通过二维码或链接分享出去,让客户访问.本来是一个很简单的东西,我首先想到的是H5的video 标签.这个标签已经被大多数主流浏览器支持(PC端的Chrome,安卓端浏览器,微信浏览器,QQ浏览器(自带播放器),以及IOS的safari都支持h5的video标签),而且使用简单. 在写好了页面以后,我拿了项目中的一个格式为mp4的视屏开始测试,发现在浏览器和安卓手机上是可以播放的,只是不能快进,但在苹果手机上没有反应.于是我把视屏用格式工厂转为h264/

Android 开发中踩过的坑之十一: 团队协作的坑

工作中,android的坑很多,一部分是android源码自身的逻辑陷阱, 但跟多的是自己和同事们由于种种原因埋下的坑. 提高面向对象的能力,并恰当的实现在代码中,能够极大的减少坑人和被坑几率. 面向对象的最大特征是复用, 复用的目的是减少工作量,减少错误几率,提高工作效率. 总结几个自己的体会,以自勉: 1 在编码前明确代码的模块框架, 定义最简单的接口. 有人也许说, 书生造反,十年不成, 在工期紧张或者其他类似敏捷编程的大背景下, 先干起来才是硬道理. 事实上, 工期紧张也许正是因为之前的

iOS开发中遇到过的坑

iOS开发中遇到过的坑 前言 做iOS开发这么长时间以来,遇到过不少难题,也踩过不少坑,本来没想过要写这篇文章,但是鉴于以下三点,笔者决定对遇到过的并且还能回忆起来的问题做个记录. 每次问题解决后,满满的成就感,但是当下一次再遇到时,又是一脸懵逼.这个问题我好像见过,但就是不记得怎么解决,记录下来方便以后查阅. 每次面试的时候,面试官总会问我,你在开发中遇到过哪些问题,怎么解决的?问题嘛,挺多的,但是你要我叙述嘛,我......我......我居然一时想不起来,迷之尴尬????(面试官当时想法:

关于webRTC中video的使用实践

此次demo使用chrome49调试测试 前端在操作视频输入,音频输入,输出上一直是比较弱的,或者说很难进行相关的操作,经过我最近的一些研究发现,在PC上实际上是可以实现这一系列的功能的,其实现原理主要是得益于google的webRTC技术. 什么是webRTC WebRTC,名称源自网页即时通讯(英语:Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API.它于2011年6月1日开源并在Google.Mozilla.Opera支持

Html5之高级-5 HTML5音频处理(在H5中播放音频、编程实现音频播放器)

一.在HTML5中播放音频 audio 元素 - audio元素可以实现在HTML页面中嵌入音频内容,该元素的属性可以设置是否自动播放.预加载及循环播放等 - audio元素提供了播放.暂停和音量控件来控制音频 - 使用audio元素提供三种音频格式的文件:MP3.Ogg.Wav - MP3: 采用mpeg音频解码器 - Ogg: 采用ogg音频解码器 - Wav: 采用wav音频解码器 - 语法结构 audio 属性 - audio 元素支持以下属性 - src: 指定播放文件的URL,可通过

使用ffmpeg视频编码过程中踩的一个坑

今天说说使用ffmpeg在写视频编码程序中踩的一个坑,这个坑让我花了好多时间,回头想想,很多时候一旦思维定势真的挺难突破的.下面是不正确的编码结果: 使用ffmpeg做视频编码过程中,首先要新建数据帧,并为数据帧分配相应内存,以便于保存图像数据,为数据帧分配内存需要用到av_image_alloc()这个函数,该函数将根据传入的图像宽.高.图像格式.数据对齐基数等参数进行内存分配. 这其中有一个参数可能会让人迷惑,那就是数据对齐基数这个参数该设置多少?顺便说说为什么要数据对齐,之所以要对齐,主要

从web图片裁剪出发:了解H5中的canvas

本篇内容不针对canvas文档对每个api进行逐个的详解! 本篇内容不针对canvas文档对每个api进行逐个的详解! 本篇内容不针对canvas文档对每个api进行逐个的详解! 重说三,好了,现在进入正文.在上一回<从web图片裁剪出发:了解H5中的blob>中我解释了图片在浏览器中以怎样的形式留存,并且在最后一个example中演示了选择图片.预览最后提交的过程.然而这个预览并没有起到什么卵用,因为只能预览不能处理,原图片还是原图片,预览变得可有可无.这一篇我们就在预览这一步里做点手脚,加

swift禁用webView对H5中数字,链接,日期,地址,电话号码做解析

showWebView.dataDetectorTypes = .None //swift禁用webView对H5中数字,链接,日期,地址,电话号码做解析 其UIDataDetectorTypes属性: static var PhoneNumber: UIDataDetectorTypes { get } // Phone number detection static var Link: UIDataDetectorTypes { get } // URL detection static v