问题标签 [ebml]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1750 浏览

javascript - 如何单独播放由 MediaRecorder 创建的 WEBM 文件

为了录制音频和视频,我在MediaRecorder API的ondataavailable下创建 webm 文件。我必须单独播放每个创建的 webm 文件。

Mediarecorder api 仅将标头信息插入第一个块(webm 文件),因此其余块在没有标头信息的情况下不会单独播放。

正如建议的链接 1链接 2,我已经从第一个块中提取了标题信息,

并将此标头信息附加到第二个块中,第二个块仍然无法播放,但这次浏览器显示视频海报(单帧)和两个块总和的持续时间,例如:10秒;每个块的持续时间为 5 秒。

我用十六进制编辑器做的同样的标题信息。我在编辑器中打开了 webm 文件,并从第一个 webm 文件中复制了前 190 个元素并将其放入第二个文件中,如下图所示,即使这一次,第二个 webm 文件也无法播放,结果与前面的示例相同。

红色显示标题信息:

webm 十六进制

这次我从第一个 webm 文件中复制了标题和集群信息,并将其放入第二个文件中,如下图所示,但没有成功,

webm 十六进制

问题

我在这里做错了什么?

有什么方法可以单独播放 webm 文件/块?

注意:我不能使用MediaSource播放这些块。

编辑 1

正如@Brad 建议的那样,我想将第一个集群之前的所有内容插入到后面的集群中。我有几个 webm 文件,每个文件的持续时间为 5 秒。深入研究文件后,我才知道,几乎每个备用文件都没有聚类点(没有 0x1F43B675)。

在这里我很困惑,我必须在每个文件的开头或每个第一个集群的开头插入标题信息(初始化数据)?如果我选择稍后的选项,那么如何播放没有任何集群的 webm 文件?

或者,首先我需要使每个 webm 文件在一开始就具有集群的方式,这样我就可以在这些文件中的集群之前添加头信息?

编辑 2

经过一番挖掘和阅读后我得出结论,每个 webm 文件都需要头信息、集群和实际数据。

0 投票
2 回答
1240 浏览

javascript - 无法使用 EBML.js - MediaRecorder API - Chrome 从 mediarecorder 创建可搜索的视频 blob

使用媒体记录器,我可以在 azure 上上传和附加视频 blob。但是使用以下代码无法在下载时搜索组合视频 -

我尝试使用 EBML.js,如果我使用以下代码,那么我会得到可搜索的视频文件。这种方法需要最后处理文件。因此,最终文件的大小可能为 1GB,这将需要很长时间才能上传。

这就是我想同时上传到天蓝色的原因。如果我使用以下代码,它会记录未知标签警告,然后是长度错误。此外,视频文件不可播放。

函数“getSeekableBlob”:

有没有办法获取可搜索的 blob 并将它们上传到 azure?