我想使用媒体源扩展来传输HLS片段。我尝试使用mpeg-dash片段(使用MP4Box生成)和媒体源扩展。
var mediaSource = new window.MediaSource();
mediaSource.addEventListener('sourceopen', _onSourceOpen);
$('video').attr('src', URL.createObjectURL(self.mediaSource));
function _onSourceOpen() {
sourceBuffer = mediaSource.addSourceBuffer('video/mp4; codecs="avc1.64000d,mp4a.40.2"');
}
function _onFragmentDataLoad(data) {
sourceBuffer.appendBuffer(data);
}
它在chrome,Windows 8 IE,android chrome上流畅播放。它也适用于野生动物园,但它不会得到媒体的总持续时间。所以我在safari上尝试使用HLS片段。生成的HLS数据包含.m3u8
个文件和其他.ts
个片段。当我将.m3u8文件指定为视频元素的源时:
$('video').attr('src', 'filename.m3u8');
事情就像魅力一样。但后来我放松了对运输的控制。为了完全控制传输和响应式解决方案更改,我尝试将.ts
个片段逐个放入初始化sourcebuffer
。它在野生动物园中失败了。但是相同的HLS片段与exo player
一致。我的问题是:
1.如何使用Media Source Extension在safari上实现HLS流。
2.由于HLS生成不会产生任何init
片段,不像短划线生成,媒体播放器如何理解持续时间和其他元数据?
3.如何获得此HLS的编解码器?或者safari默认支持任何编解码器,可以在这里使用吗?
感谢。