web duper

code{web} :|: life{me} :|: tencent&xiaomi{work}
来源:http://materliu.github.io/all/web/mobile/2014/03/11/%E5%9F%BA%E4%BA%8Eweb%E7%BD%91%E9%A1%B5%E8%A7%86%E9%A2%91%E6%92%AD%E6%94%BE%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98.html

  1. 什么情况下可以使用HTML5播放? 要支持HTML5播放,浏览器必须同时满足两个条件:
  2. 浏览器能解析HTML5标准的Video标签。
  3. 浏览器能对H.264编码的视频做解码。

我们再来细细的说一说这个问题,我们先来解释下什么是HTML5。HTML5是用于取代1999年所制定的 HTML 4.01 和 XHTML 1.0 标准的 HTML(标准通用标记语言下的一个应用)标准版本;现在仍处于发展阶段,但大部分浏览器已经支持某些 HTML5 技术。HTML5播放视频,使用的是HTML5标准里的 video 标签,基本用法查看这里,更高级的接口定义请参阅W3C规范文档。 由于Video是HTML5规范里新增的标签,那么一定要浏览器能解析Video标签,否则肯定无法使用HTML5。

那么单单能解析HTML5的Video标签是否就能这个正常播放呢?视频是经过编码的,编码格式是H.264视频格式。所谓编码,其实就是一种压缩算法,要压缩,那么一定要解压缩,视频格式的解压缩就是解码,如果浏览器本身无法对视频文件进行解码,那么同样播放不出来。

所以综上,视频播放必须要满足上述两个条件,缺一不可。

  1. 为什么有些安卓手机无法播放视频? 首先,要解答这个问题,请先看问题1。

看过问题1,我们知道安卓播放跟厂商支持情况有关,其实前端JS这边对VIDEO标签的解析和H264的解码做不了什么实质的事情,我们只能尽量使用html5的API接口找到hack各种设备的方案,但关键还是看厂商支持情况,所以要在前端实现适配难度很大。

安卓由于严重的系统碎片化问题,导致不同的厂商、不同的浏览器对上述两种条件的支持各不相同,所以安卓没法简单的说到底是否支持HTML5播放,甚至同一个厂商的不同机型,其特点都不一样,我们遇到过单独支持flash的,单独支持html5的,或者二者都支持的,甚至还有都不支持的,另外还有明明实际上能使用HTML5播放但API又返回说不支持播放的。对此我们针对不同的Android设备和浏览器做了些矫正和强制判断,许多问题需要Case by Case去解决。

  1. 对于HTML5和flash都不支持的安卓,我们怎么办? 问题1里我们说过,安卓设备上我们遇到过单独支持flash的,单独支持html5的,或者二者都支持的。但基于web的视频播放无非就这两种功能方案,如果都不支持怎么办?

其实还有个方案,就是MP4链接的形式,我们称之为MP4Link?,如下图:  这个看起来像个播放器,其实我们只是在播放区域放了一张长得像播放器的静态图片,在图片上我们设置了链接,指向到视频MP4文件,用户点击”播放按钮“(实际点击的是图片链接),触发浏览器本身的特性,会自动打开MP4文件,这个时候有些浏览器会自动调用设备默认的视频播放器,或者会问用户,当前是要下载还是要播放。

这个图片的真实DOM结构是:

<div style="width: 480px; height: 320px; background-color: rgb(0, 0, 0);">
<a target=_blank target="_blank" class="tvp_mp4_link" href="http://121.14.123.15/vlive.qqvideo.tc.qq.com/i001216370f.mp4?" style="text-decoration: none; color: rgb(3, 131, 201); font-weight: 700; width: 480px; height: 320px; display: block;"></a>
</div>
  1. 我们已知的一些播放问题
设备和浏览器 现象 解决方案
小米1 & 小米2(MIUI V5系统) 系统自带的浏览器API返回不支持H.264,但实际上点击可以进入全屏,MIUI自己拉起系统播放器播放视频 矫正为使用HTML5
三星系列,主要是Note2,S3等 系统自带的浏览器API返回不支持H.264,但实际上可以播放 矫正为使用HTML5
QQ手机浏览器 点击播放以后强制使用浏览器自带的皮肤,无法使用腾讯视频用CSS3制作的皮肤 QQ浏览器的皮肤外观和体验都还不错,可以接受该体验
微信4.\*版本运行在安卓4.0+的系统 播放无法全屏,点击全屏没反应 建议升级到微信5.0+,微信自身未针对安卓4.0做播放适配,未实现安卓4.0要求的全屏API
微信5.0+版本运行在MIUI系统 概率性出现点击无法播放,点击全屏按钮以后即可播放 前端逻辑做了hack处理,针对微信for安卓,点击视频以后自动全屏播放(体验有点仿iPhone)
腾讯微博 Android版 安卓4.0+概率性出现视频可以播放,但不显示画面,安卓2.3.\*无法拉起flash,同时也不支持HTML5 正在跟微博跟进中
微信4.\*版本在安卓4.0+系统 播放视频点全屏按钮无效 安卓4.0开始全屏功能需要APP响应安卓的系统接口才有效,而微信4.\*版本并未实现该接口,微信在5.0才开始支持,可以使用伪全屏解决,详见问题9
微信5.0版本在搭载MIUIV5的小米1手机上 全屏以后会花屏 微信内部逻辑处理问题,可以使用伪全屏解决,详见问题9
  1. 统一播放器是如何选择当前设备应该用什么内核的播放器呢? 统一播放器在移动设备的判断流程如下图: ios设备除Mac系统以外都在html5 PC设备,含Mac系统都走flash Android设备低于4.0都走flash Android4.0以上系统会做些矫正,QQ手机浏览器3.×版本和Firefox浏览器使用MP4链接。微信4.2以上版本、MIUI原生浏览器实际是支持HTML5但JS API返回不支持,这里做了矫正强制使用HTML5。其他浏览器根据canPlayType接口判断是否支持H.264解码,支持则使用HTML5,否则使用Flash.

  2. 移动设备能在网页里播放直播吗? ios的HTML5直播是使用HLS技术,该技术只有ios系统才支持,所以用chrome、safari修改userAgent模拟是看不到效果的,可能会黑屏。 安卓手机基本不支持HLS,则只能使用flash播放直播,如果您使用的安卓设备不支持flash(能安装flash跟支持flash是两回事),则无法播放直播节目。

那么对于安卓这个问题该怎么解决?好消息是,安卓的手机QQ浏览器4.2版本开始原生支持HLS,使用手机QQ浏览器就能播放直播,遇到这个问题,我们建议是引导用户使用手机QQ浏览器。那么如果你是自己App里内嵌WebView?,希望支持直播,那么要么搞定flash,要么搞定HLS,或者直接找wwjs要腾讯视频适合安卓的SDK开发包。

  1. 移动设备播放能做到自动播放吗? 由于移动设备系统的限制,在打开一个网页以后,必须要用户手动物理点击一次才能自动播放,而且在点击一次以后,再播放其他视频,就可以做到自动播放不需要再点击了。

那有没有办法突破呢?经过我们测试,部分iPhone设备,可以先调用video.pause(),然后再调用video.play()接口可以实现自动播放,但仅仅是部分设备有效,而且是同样的机型、同样的系统版本、同样的设置,有些机器可以有些无效,初步估计可能跟越狱有关,但还不完全确认。

安卓设备上目前还没发现可以自动播放的情况。

如果你不是在普通浏览器上使用统一播放器,而是自己的webview,那么其实可以在调用webview的时候设置几个属性,就可以打开视频的自动播放功能:

uiWebView.allowsInlineMediaPlayback = YES;
uiWebView.mediaPlaybackRequiresUserAction = NO;

微信是已经实现了自动播放接口,但需要根据域名申请权限,默认是禁止的,申请权限请联系微信的同学。

  1. 移动设备能通过接口调整音量吗? 这个系统限制了,不能通过接口去修改音量,移动设备其实用户很方便的使用手机侧面调整音量大小。 为此,apple对限制接口做过解释:https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html

  2. 系统全屏和伪全屏的区别和使用场景 首先,先明确下系统全屏和伪全屏的区别。

  系统全屏 伪全屏
定义 在点击视频全屏的时候,调用浏览器遵循HTML5的全屏API,将播放器占满整个屏幕 点击全屏时,通过页面的DOM元素和样式修改播放器的尺寸,让播放器撑大到当前页面的100%宽度或者高度
截图示例
差异描述 控制栏和播放界面使用浏览器或者系统的样式,前端不可修改,也不能增加或删减元素,无法控制其表现 视频文件播放解析是浏览器或系统,控制栏和播放界面使用自己通过CSS设计的样式,可以新增或删减元素,能看到浏览器的标题栏和底部的控制栏

为什么有伪全屏的场景?有以下几个原因: 1. 系统全屏无法满足需求,比如需要在全屏的时候展示视频标题、App下载按钮、清晰度切换等 2. 规避系统全屏的bug,我们已知有如下几个场景:

设备 现象 原因
微信4.\*版本在安卓4.0+系统 播放视频点全屏按钮无效 安卓4.0开始全屏功能需要APP响应安卓的系统接口才有效,而微信4.\*版本并未实现该接口,微信在5.0才开始支持
微信5.0版本在搭载MIUIV5的小米1手机上 全屏以后会花屏 微信内部逻辑处理问题

可能还有我们未知的全屏问题,所以为了规避系统全屏的bug,我们可以伪全屏的形式实现。

那么是不是任何场景或者设备都能实现伪全屏呢?

设备或系统 是否可使用伪全屏
安卓2.3.\* √ 默认使用flash播放,由flash player负责全屏逻辑,目前未发现不能全屏的情况
安卓4.0 √ 可以使用伪全屏
iPad √ 可以使用伪全屏
iPhone、iPod Touch × 由于系统限制,播放视频自动进入系统全屏,所以无法使用伪全屏
  1. 网页要使用伪全屏要做什么工作? 伪全屏,本质是用CSS修改播放器的width、height、left、top、zindex、position等样式参数,那么自然可能会影响网页其他元素的展现,也会受到网页元素的影响,例如会被网页里更高层级的div遮挡,收到body或者父容器的margin padding等影响。播放器本身的逻辑只能放大播放器,对于页面元素是否要做些调整(比如将遮挡播放器的元素暂时隐藏)就需要页面响应播放器的onfullscreen事件来写一些页面逻辑的代码做配合了。

  2. iPhone、iPod全屏播放样式能修改吗? iPhone、iPad播放视频是使用的系统全屏,见问题9的详细说明,系统全屏是系统接管,是调用的系统播放器实现的播放,所以前端不能修改其样式和表现。

原文:http://blog.csdn.net/cdnight/article/details/40303825

  • 上一篇lucene4及以上如何做到近实时搜索
  • 下一篇video标签调研2

html5 video播放调研,全屏,伪全屏相关推荐

  1. html5 video播放调研

    web duper code{web} :|: life{me} :|: tencent&xiaomi{work} 来源:http://materliu.github.io/all/web/m ...

  2. html5播放器自动全屏,HTML5 video播放器全屏(fullScreen)实现的方法

    这篇文章主要介绍了HTML5 video播放器全屏(fullScreen)方法实例,本文直接给出一个完整代码实例,需要的朋友可以参考下 首先来说,这个标题具有误导性,但这样设置改标题也是主要因为vid ...

  3. html5 video播放按钮放在中间,在html5视频控制区跟踪点击播放按钮(Track clicks to play button in html5 video control area)...

    在html5视频控制区跟踪点击播放按钮(Track clicks to play button in html5 video control area) 我点击了一张HTML5视频播放海报,并点击了控 ...

  4. html视频播放器全屏,HTML5 video播放器全屏(fullScreen)方法实例

    首先来说,这个标题具有误导性,但这样设置改标题也是主要因为video使用的比较多 在html5中,全屏方法可以适用于很多html 元素,不仅仅是video 复制代码代码如下: 全屏问题 *{ padd ...

  5. html5播放器自动全屏,HTML5 video播放器全屏(fullScreen)方法实例

    首先来说,这个标题具有误导性,但这样设置改标题也是主要因为video使用的比较多 在html5中,全屏方法可以适用于很多html 元素,不仅仅是video复制代码代码如下: 全屏问题 *{ paddi ...

  6. html5 video标签实现手机端视频播放全屏显示

    <video preload='auto' id='my-video' src='cuplayer.mp4' webkit-playsinline='true' playsinline='tru ...

  7. HTML5 Video播放本地文件

    本人在做项目的时候,有个功能需求需要播放云上的视频和本地磁盘里的视频,播放云上的视频有url直接就能播放,但是播放本地的视频涉及到浏览器跨域的问题,在网上找了很多,但都不能解决我的问题,最后想到了构建 ...

  8. 重写HTML5 video播放器

    自从H5进宫以来,flash一直被冷落以至于要停止维护.可见,H5还是有很大的优势的,在播放器上,H5自带的播放器已经很强大了,今天将要重写H5播放器(虽然好丑) 放在前面的总结:谷歌浏览器表现的差强 ...

  9. html5 video 播放状态,10分钟了解HTML5的Video标签属性、方法和事件

    标签的属性 src :视频的属性 poster:视频封面,没有播放时显示的图片 preload:预加载 autoplay:自动播放 loop:循环播放 controls:浏览器自带的控制条 width ...

最新文章

  1. MATLAB 2014a (8.3) Compiler Runtime (MCR)
  2. python绘制灰度图片直方图-用python简单处理图片(5):图像直方图
  3. OpenCV蒙版图像make mask image的实例(附完整代码)
  4. java ee maven_针对新手的Java EE7和Maven项目–第6部分
  5. Win32ASM学习[10]:传送指令
  6. 救命神文!应对ubuntu磁盘空间不足(已解决)
  7. 程序员如何确保软件没 Bug?
  8. 七内部排序算法汇总(插入排序、Shell排序、冒泡排序、请选择类别、、高速分拣合并排序、堆排序)...
  9. Debug工具的使用
  10. 我从Python新手到大师的百天之路(内附学习资源)
  11. 10-25 查询选修张老师讲授所有课程的学生
  12. (组合数+快速幂+lucas+费马小引理)acwing 887. 求组合数 III
  13. Springboot+vue spring286小巨人图书销售购物商城#毕业设计
  14. linux 新建1 10文件夹,linux创建目录和文件的命令
  15. 智能控制和计算机控制的区别,BA楼宇控制方式是什么 智能照明控制与BA楼宇控制方式的区别在哪...
  16. 【CQBZOJ - 1205】因式分解问题
  17. 如何在硬盘上恢复已经删除的照片?
  18. 为什么要做一款ERP软件——开源软件诞生7
  19. XDCTF2014 Writeup
  20. 重庆理工大学计算机学院学概率论,重庆理工大学概率论与数理统计习题册答案...

热门文章

  1. android莫名其妙打开支付宝,Android 7.0 无法拉起支付宝App
  2. 【时间序列】时间序列中如何进行交叉验证
  3. 自然语言处理(NLP)-第三方库(工具包):WordNet(在nltk.corpus下)【英文:同义词、反义词、蕴含关系、语义相似度】
  4. matlab 职坐标,C/C++知识点之Matlab 与 c++对txt 文档的读写格式
  5. 堡垒机 jumpserver
  6. c++ strchr函数
  7. win10计算机管理项,Win10系统下快速管理开启项的方法?
  8. LIMS实验室管理系统包括哪些功能,如何实现检测全程无纸化
  9. [原创] OneThink模型管理详解-10分钟创建一个团队管理后台
  10. 解决ssh: no common algorithm for key exchange; client offered: [curve25519-sha256@libssh.org ecdh