在记录音频和视频时,我正在使用MediaRecorder API的ondataavailable下创建webm文件。 我必须逐个播放每个创建的webm文件。
Mediarecorder api仅将头信息插入第一个块(webm文件),因此没有头信息的其余块不能独立播放。
// for the most regular webm files, the header information exists
// between 0 to 189 Uint8 array elements
const headerIinformation = arrayBufferFirstChunk.slice(0, 189);
我将首部信息插入到第二个数据块中,但是第二个数据块仍无法播放。此时浏览器会显示视频的海报(单帧)和两个数据块之和的持续时间,例如:10秒;每个数据块的持续时间为5秒。
我也用十六进制编辑器完成了同样的头部信息操作。我在编辑器中打开了webm文件,并从第一个webm文件中复制了前190个元素并将其放入第二个文件中,类似于下面的图片,即使这次第二个webm文件仍然无法播放,结果与上一次相同。
红色显示了头部信息:
这次我从第一个webm文件中复制了头部和簇信息,将其放入第二个文件中,类似于下面的图片,但没有成功。
问题
我在这里做错了什么?
有没有办法可以单独播放webm文件/数据块?
注意:我不能使用MediaSource来播放这些数据块。
编辑1
如@Brad建议的那样,我想将第一个簇之前的所有内容插入到后面的一个簇中。我有一些每个持续5秒的webm文件。经过查看文件,我发现几乎每隔一个文件没有簇点(没有0x1F43B675)。
在这里,我很困惑,是将头部信息(初始化数据)插入到每个文件的开头还是每个第一个簇的开头?如果我选择后者,那么没有任何簇的webm文件将如何播放?
或者,首先我需要使每个webm文件以具有簇的方式开始,以便我可以在这些文件中的簇之前插入头部信息吗?
编辑2
经过一些挖掘和阅读这里,我得出结论,每个webm文件都需要头部信息、簇和实际数据。