我试图实现视频下载并行从多个来源。然而,当不遵循视频文件的序列顺序时,MSE appendBuffer方法往往会失败。
我想附加部分随机顺序,并播放视频“尽快”。我正在探索SourceBuffer模式属性以及timestampOffset。所有这些都没有帮助。
我想知道我所拥有的webm源文件是否可以以“不支持的格式”来完成这样的任务(顺序方法很好)。
源视频文件
谢谢你的建议。
更新:,我试着分析了著名的示例视频文件,并发现它的部分可能会出现故障。似乎有必要遵循集群字节范围
<Cluster type="list" offset="4357">
<Timecode type="uint" value="0"/>
<SimpleBlock type="binary" size="7723" trackNum="1" timecode="0" presentationTimecode="0" flags="80"/>
<SimpleBlock type="binary" size="5" trackNum="2" timecode="0" presentationTimecode="0" flags="80"/>
...
</Cluster>
<Cluster type="list" offset="16187">
<Timecode type="uint" value="385"/>
<SimpleBlock type="binary" size="5" trackNum="2" timecode="0" presentationTimecode="385" flags="80"/>
<SimpleBlock type="binary" size="4968" trackNum="1" timecode="13" presentationTimecode="398" flags="80"/>
...
</Cluster>发布于 2016-06-16 10:25:26
深入研究了webm格式规范,编写了libwebm工具,研究了DASH i,最后找出了如何使MSE appendBuffer按任意顺序工作!。
你会得到一些类似的东西:
{
"type": "video/webm; codecs=\"vp8\"",
"duration": 27771.000000,
"init": { "offset": 0, "size": 258},
"media": [
{ "offset": 258, "size": 54761, "timecode": 0.000000 },
{ "offset": 55019, "size": 166431, "timecode": 2.048000 },
{ "offset": 221450, "size": 49258, "timecode": 4.130000 },
{ "offset": 270708, "size": 29677, "timecode": 6.148000 },
{ "offset": 300385, "size": 219929, "timecode": 8.232000 },
{ "offset": 520314, "size": 25132, "timecode": 10.335000 },
{ "offset": 545446, "size": 180777, "timecode": 12.440000 },
{ "offset": 726223, "size": 76107, "timecode": 14.471000 },
{ "offset": 802330, "size": 376557, "timecode": 14.794000 },
{ "offset": 1178887, "size": 247138, "timecode": 16.877000 },
{ "offset": 1426025, "size": 78468, "timecode": 18.915000 },
{ "offset": 1504493, "size": 25614, "timecode": 20.991000 },
{ "offset": 1530107, "size": 368277, "timecode": 23.093000 },
{ "offset": 1898384, "size": 382847, "timecode": 25.097000 },
{ "offset": 2281231, "size": 10808, "timecode": 27.135000 }
]
}现在,您所要做的就是首先加载元数据xhr.setRequestHeader("Range", "bytes=0-257");,然后在中加载任意顺序的,所有其他段。例如,第二段范围是55019-221449字节。
解释:
最重要的是将帧组重新编码到您希望拥有的集群大小。在本例中,我选择了相当低的阈值(每个10帧),但是您可以选择更高的,从而生成更少的集群(“媒体”数组中的条目更少)。
在此之后,您必须以经典的方式(使用libwebm中的sample_muxer )修复提示,并且您已经做好了准备。
测试: Chrome 51,Firefox 47。
https://stackoverflow.com/questions/37786956
复制相似问题