如何在浏览器中使用自定义但部分支持的 MimeType 播放数据流?

How do I play a stream of data with custom but partially supported MimeType in browser?

从软件工程中带过来的。被告知这个问题对于 Whosebug 可能更好。

我正在向另一个对等点发送视频数据流,并希望重新组合该数据并使该流成为视频元素的来源。我使用 npm 包 RecordRTC 记录数据,并且每 1 秒获取一个 Blob 数据。

我通过 WebRTC 数据通道发送它,最初尝试使用 MediaSource API 重新组合数据,但事实证明 MediaSource 不支持 mimetype 为 [=10= 的数据].有没有关于如何重新组装这个流的想法?是否可以修改 MediaSource API?

我对此数据流的唯一要求是音频使用 pcm 编码,但如果您有任何想法或问题,请告诉我!

P.S。我认为基于意见的质疑不适用于 Whosebug,所以这就是我首先发布的原因。

处理此问题的最简单方法是通过服务器代理流,在服务器上您可以 return 将流作为 HTTP 响应。然后,您可以做一些简单的事情:

<video src="https://example.com/your-stream"></video>

缺点当然是现在您必须支付带宽费用,因为连接不再是点对点的。

如果您可以使用 Service Worker 并让它 return 根据您从对等方接收的数据伪造 HTTP 响应,那就太好了。不幸的是,浏览器开发人员通过在用户重新加载页面或使用隐私模式时禁用它来削弱 Service Worker 标准。 (他们似乎假设 Service Worker 只对缓存有用。)

此外,关于 WebRTC 的说明...您所做的很好。你不想使用普通的 WebRTC 媒体流,因为它们不仅是有损压缩的,而且它们会丢弃片段以优先保持实时而不是质量。这听起来不像你想要的。

I've been wondering this - is the raw mediastream returned from something like getusermedia what format is that in?

MediaStream 是原始数据,但无法直接访问。如果您将 MediaStream 附加到 Web Audio API 图形,无论声卡采用何种格式捕获,都会转换为 32 位浮点 PCM。此时,您可以使用脚本处理器节点来捕获原始 PCM 数据。