我正在尝试使用MediaSource API将单独的WebM视频附加到单个源。
我发现一个Github project正在尝试相同的操作,其中加载了WebM的播放列表,并且每个列表都附加为SourceBuffer。但是它是在一年前提交的,因此与current spec不同步。因此,我forked it并更新为最新的API属性/方法,并进行了一些重组。现有的大部分代码都是直接从规范的examples和Eric Bidelman’s test page中获取的。
但是,我无法使其按预期方式工作。我正在两种浏览器中进行测试,两种浏览器均在Mac OS X 10.9.2上进行测试:Chrome 35稳定版(在撰写本文时为最新版本),以及Firefox 30 beta(在about:config中将media.mediasource.enabled
标志设置为true
)(此功能不会直到FF 25为止,电流稳定为24)。
这是我遇到的问题。
两种浏览器
我希望视频最终是一个由11个WebM组成的长视频(00.webm,01.webm,...,10.webm)。目前,每个浏览器仅播放视频的1段。
Chrome 合金
行为不一致。似乎不可能可靠地重现这些错误中的任何一个。
每次都是不一样的。我无法在这里全部列出。
已知警告:Chrome当前不实现
sourceBuffer.mode
,尽管我不知道这可能会产生什么影响。火狐浏览器
我最初的理论是,这与
mediaSource.sourceBuffers[0].timestampOffset = duration
和duration = mediaSource.duration
有关。但是,除了mediaSource.duration
,我似乎无法从NaN
中得到任何返回,即使我要追加新的分割受众群也是如此。在这里完全迷路了。指导非常感谢。
编辑:我未注释代码的持续时间部分,并在所有视频上从Aaron Colwell's Media Source Extension Tools(感谢Adam Hart提示)运行了
mse_webm_remuxer
。瞧,Chrome不再有无法预测的故障!但是,可惜的是,一旦媒体片段结束,它仍然会暂停,即使您按播放,它有时也会停留在一帧上。在Firefox Beta中,它没有播放到第一段,响应如下:
记录
duration
的值将返回NaN
(但仅在FF中)。 最佳答案
主要问题是视频文件。如果您打开chrome://media-internals/
,则可以看到error Media segment did not begin with keyframe.
使用格式正确的视频,例如the one from Eric Bidelman's example(我希望他不要生气,我一直直接链接到该视频,但这是我发现的唯一可以正常工作的示例视频),您的代码可以处理appendNextMediaSegment()
中的以下更改:
duration = mediaSource.duration;
mediaSource.sourceBuffers[0].timestampOffset = duration;
mediaSource.sourceBuffers[0].appendBuffer(mediaSegment);
您可以尝试Aaron Colwell's Media Source Extension Tools尝试使您的视频正常运行,但是我获得的成功有限。
在附加段之前查看
onProgress
事件似乎也有些怪异,但是我想如果您只想在视频正在播放的情况下附加它,那可能行得通。由于视频长度未知,这可能会使搜索栏 Action 奇怪,但这在任何情况下都是一个问题。关于javascript - 媒体源扩展不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24195601/