支持m3u8即支持HLS协议,判断方式如下:
/**
* https://github.com/videojs/videojs-contrib-hls
* Whether the browser has built-in HLS support.
*/
videojs.Hls.supportsNativeHls = (function() {
var
video = document.createElement('video'),
xMpegUrl,
vndMpeg;
// native HLS is definitely not supported if HTML5 video isn't
if (!videojs.Html5.isSupported()) {
return false;
}
xMpegUrl = video.canPlayType('application/x-mpegURL');
vndMpeg = video.canPlayType('application/vnd.apple.mpegURL');
return (/probably|maybe/).test(xMpegUrl) ||
(/probably|maybe/).test(vndMpeg);
})();
m3u8文件的content-type:安卓只支持 application/vnd.apple.mpegurl,而ios对于application/x-mpegURL,application/vnd.apple.mpegURL均支持。
p.s videojs 关于HLS技术做了许多工具,非常强大,甚至可以把流读过来然后封装成另外的格式,参见参考文档。
14.12.05更新
调研Android系统下HLS的支持情况*
测试环境:Android4.4.4,Android4.3,Android 4.2.2
测试浏览器:Chrome、Firefox、QQ、UC、欧朋、安卓浏览器
注:测试用ts流为本地文件非线上。
M3U8的content-type为octet-stream的情况下
1、FireFox不支持M3U8文件,三种设备均不能播放。只能播放Mp4 & webm
2、UC浏览器9.9.8版本,三种设备均偶发卡顿现象,处于loading状态,一半几率能最终下载完毕,播放出来。猜测与网速有关。
3、UC浏览器的EN版本(10.0.1)正常播放。
4、其他浏览器正常,Android4.2.2内置浏览器会出现有画面没声音的现象。
5、在IOS7的iPad下正常播放。
M3U8的content-type为vnd.apple.mpegurl的情况下
1、Android4.3 无法播放。
2、UC浏览器下播放流畅,偶发上面2的情况。
3、其他同上面的1、4、5
经测试,以下情况并不影响是否可以播放
1、ts文件的H.264的配编码置(如乐视多为HD,新浪为Main,测试baseline)
2、video标签的写法,有如下4中写法
<video controls width="300" height="270" src="drive.m3u8"></video>
<video controls width="300" height="270"><source src="drive.m3u8"> </video>
<video type="application/x-mpegurl" controls width="300" height="270"><source src="drive.m3u8"> </video>
<video type="application/vnd.apple.mpegurl" controls width="300" height="270"><source src="drive.m3u8"> </video>
结论:令人纠结的Content-type
参考文档:
记于2014年09月26日 EOF
点击评论或查看评论。