首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于随机顺序的appendBuffer媒体源扩展WebM流

基于随机顺序的appendBuffer媒体源扩展WebM流
EN

Stack Overflow用户
提问于 2016-06-13 10:07:13
回答 1查看 1.1K关注 0票数 1

我试图实现视频下载并行从多个来源。然而,当不遵循视频文件的序列顺序时,MSE appendBuffer方法往往会失败。

我想附加部分随机顺序,并播放视频“尽快”。我正在探索SourceBuffer模式属性以及timestampOffset。所有这些都没有帮助。

我想知道我所拥有的webm源文件是否可以以“不支持的格式”来完成这样的任务(顺序方法很好)。

源视频文件

谢谢你的建议。

更新:,我试着分析了著名的示例视频文件,并发现它的部分可能会出现故障。似乎有必要遵循集群字节范围

代码语言:javascript
复制
<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>
EN

Stack Overflow用户

回答已采纳

发布于 2016-06-16 10:25:26

深入研究了webm格式规范,编写了libwebm工具,研究了DASH i,最后找出了如何使MSE appendBuffer按任意顺序工作!

  1. -i result.webm -g 10 -c:v libvpx resultClusters.webm (也可以使用libvpx-vp9)
  2. mkvmuxer_sample -i resultClusters.webm -o resultRepaired.webm
  3. mse_json_manifest resultRepaired.webm >> manifest.json

你会得到一些类似的东西:

代码语言:javascript
复制
{
  "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。

票数 7
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37786956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档