H5直播系列七 flv.js浏览器兼容性

一、关于QQ浏览器 X5内核

Paste_Image.png

1.PC上的极速模式没问题。IE模式使用的是IE8,所以各种没戏
2.移动版的X5内核是腾讯基于优秀开源Webkit 深度优化的浏览器渲染引擎,搭载在最新一代的手机QQ浏览器上
微信内置浏览器 x5内核 有哪些坑及解决方案?
微信内置浏览器对于 HTML5 的支持如何?
QQ浏览器x5内核的兼容性问题
Layabox 解读微信全面升级 X5 Blink 内核
X5即将升级内核到Blink
总的来说,自从微信2016年4月升级 X5 Blink内核之后,兼容性大大好转。安卓版的微信浏览器,全面升级为TBS2.0 (基于Android 5.0 WebView Blink内核,Chrome 37),所有版本的安卓系统均为同一内核,开发只需考虑适屏问题了,HTML5和CSS3均有较好的支持(基于Chrome 37,详情可以上caniuse查)。IOS虽说没有升级统一为同一版本的内核,但IOS版本的微信一直是WKWebView内核,WKWebView的版本依赖于IOS的版本。 IOS 8.0(下文有IOS8以下系统的占比,可忽略)以上的系统,对Html5和css3的支持率也很高,基本的H5,CSS3的特性均得到支持,测试中有详细数据。
基于微信的直播方式

二、flv.js兼容性要求

参考介绍一下再微信内置浏览器的兼容性关于浏览器兼容性问题的作者回复
没记错的话,目前的 X5 是一个基于旧版 Chromium 魔改的内核。
总之两个必要条件:Media Source Extensions API 和 fetch+stream API 对 http-flv 是必须的
Due to IO restrictions, flv.js can support HTTP FLV live stream on Chrome 43+, FireFox 42+, Edge 15.15048+ and Safari 10.1+ for now.

1.MSE
主要是Safari和QQ浏览器不支持,具体参考H5直播系列二 MSE(Media Source Extensions)

2.Fetch or XHR
这个除IE都支持了,具体参见JS异步处理系列二 Fetch

3.flvjs提供的检测方法
参考移动端报错问题,调试window.MediaSource undefined
执行前务必通过 flvjs.getFeatureList() 检测环境支持度.mseFlvPlayback为true即可播放点播视频,mseLiveFlvPlayback为true才可播放httpflv直播流

var fList:FlvJs.FeatureList = flvjs.getFeatureList();
"FlvPlay:"+fList.mseFlvPlayback+",LivePlay:"+fList.mseLiveFlvPlayback

经过测试,mseFlvPlayback和mseLiveFlvPlayback在QQ手机浏览器上都是undefined,没戏了……

四、B站H5帮助页面关于兼容性
Paste_Image.png

扒出来一点压缩后的js:

function checkFormats(){
var e=document.createElement("video"),

t=function(e,t){
var i=document.getElementById(e);
i.innerHTML=t?"支持":"不支持",
i.className=i.className.replace(/\bunknown\b/,t?"success":"error")},
i=e&&e.canPlayType,
n=window.MediaSource,

a=function(t){
return n&&!n.isTypeSupported?e.canPlayType(t):n&&n.isTypeSupported(t)
}
,

l=function(){
var e=document.createElement("div"),
t="Khtml Ms O Moz Webkit".split(" "),
i=t.length;
return function(n){
if(n in e.style)return!0;
for(n=n.replace(/^[a-z]/,function(e){return e.toUpperCase()});i--;)
if(t[i]+n in e.style)return!0;return!1}}(),
o=function(){return!!document.createElement("canvas").getContext};

t("c-video",i),
t("c-mse",!!n),
t("c-h264",e&&e.canPlayType&&e.canPlayType('video/mp4; codecs="avc1.42001E, mp4a.40.2"')),
t("c-mse-h264",a('video/mp4; codecs="avc1.4d401e"')),
t("c-css3-dm",l("transition")&&l("transform")),
t("c-canvas-dm",o()),

document.getElementById("c-user-agent").innerHTML=navigator.userAgent
}
五、为什么国内大部分视频厂商不对PC开放HTML5?

1.Flash 并不能完全被抛弃。HTML5 在 IE 浏览器里面,只在 IE 9 以上的版本才得到较好的支持,IE 8 及以下的版本,播放视频的选择还只能使用插件,而插件里面最主流的还只能是 Flash。虽然厂商完全可以提供双版本,但是 Flash “能用”、“不能抛弃”的特点,一定程度上使视频网站没有急于去开发 PC Web 端的 HTML5 播放器。

2.Flash 获取很方便,装机比例很高。现在的国产浏览器,附送的内容除了全家桶以外,Flash 一般都会安装好,就算是 Chrome 或者 Firefox 等国际上知名的主流浏览器,也会给予相当简单的操作提示让用户很容易地安装上 Flash。这个特点使得视频网站也没有必要那么着急去开发 HTML5 播放器。(听说 Chrome 马上就取消自带 Flash 了,欢呼雀跃)

3.视频源存在兼容性问题。原生的 HTML5 <video> 元素在 Windows PC 上仅支持 mp4 (H.264 编码)、webm、ogg 等格式视频的播放。而由于历史遗留问题(HTML5 视频标准最终被广泛支持以前,Flash 在 Web 视频播放方面有着统治地位),视频网站的视频源和转码设置,很多都高清源都是适用于 Flash 播放的 FLV 格式,只有少量低清晰度视频是 mp4 格式,webm 和 ogg 更是听都没听说过。比如优酷只有高清和标清才有 MP4 源,超清、1080P 等,基本都是 FLV 和 HLS(M3U8)的视频源(在 Windows PC 上支持 M3U8 比支持 FLV 更复杂,我们不做过多赘述)。而腾讯视频,因为转型 MP4 比较早,视频源几乎全部都是 MP4 和 HLS,所以现在可以在 Mac OS X 上率先支持 PC Web 端的 HTML5 播放器(Safari 下 HLS、Chrome 下 MP4)。

4.MSE 技术资料较少。上面提到了视频源的兼容性问题,但是 HTML5 是不是就真的没办法播放 FLV 等格式视频了呢?不是。解决方案是 MSE,Media Source Extensions,就是说,HTML5 <video> 不仅可以直接播放上面支持的 mp4、m3u8、webm、ogg 格式,还可以支持由 JS 处理过后的视频流,这样我们就可以用 JS 把一些不支持的视频流格式,转化为支持的格式(如 H.264 的 mp4)。B 站前些天开源的 flv.js 就是这个技术的一个典型实现。B 站的 PC HTML5 播放器,就是用 MSE 技术,将 FLV 源用 JS 实时转码成 HTML5 支持的视频流编码格式(其实就一个文件头的差异(这里文件头改成容器。感谢评论区谦谦的指教,是容器的差异,容器不只是文件头)),提供给 HTML5 播放器播放。这种技术,相较于其它成熟的播放方案而言,比较新颖,国内外资料都比较少,坑比较多,国内视频网站自然不愿意去第一个吃螃蟹。B 站就是因为有这样一位比较厉害的少年程序猿,单枪匹马踩坑实现了 MSE 技术的播放(题外话,这样一个牛逼的技术突破,作者在 B 站的待遇却令人心寒,被逼辞职。怎么讲呢,贵站可能倒闭但绝不会变质(手动滑稽)。参见:如何看待哔哩哔哩的 flv.js 作者月薪不到 5000 元?)。

5.HTML5 播放器容易被破解。现在互联网环境下,资源盗版、盗链很常见。视频网站们也在花大力气防盗链。Flash 是插件,而且发展了这么多年,技术已经相当成熟,甚至可以做到在代码中直接插入编译好的 C 模块(FlasCC 技术,原称 Alchemy),很多视频网站(比如优酷和腾讯)的 Flash 播放器中都有破解难度相当大的 C 模块。如果换成 HTML5 播放,由于 JS 代码相当于开源的特性,破解者非常容易就可以下载、盗链播放视频、跳过广告(而广告是视频网站的主要营收)。

6.WebAssembly 技术尚未广泛支持。上面说到,HTML5 代码容易被破解。但其实也是有解决方案的,Web 项目中也可以插入编译好的 C 模块,这就是 WebAssembly 技术。B 站的 HTML5 播放器的加密部分就是用比 WebAssembly 初级一点的 asm.js 实现的,我尝试破解时很头大。但是,遗憾的是,绝大部分主流浏览器的主流版本暂未支持这一特性。(QQ,UC浏览器目前尚不支持)

7.可能看着别人都没有,我也没必要搞吧。国内主流视频网站里面,只有 B 站(是的,你 B 网站排名早已超过爱奇艺乐视PPTV等,别再哭穷,别再二次元净土了,早变质了)和腾讯视频有 PC 端的 HTML5 播放器,其中腾讯视频还只对 Mac OS X 开放(Flash 在 Macbook 上发热严重)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容