我正在编写一个 Web 应用程序,需要在主机窗口系统中显示 native 窗口。该窗口必须显示正在流式传输到 Web 应用程序的视频。
我为 OS X 编写了一个 native 程序,它以我需要的方式显示视频,并且在 Web 应用程序中我有一个通过 WebRTC 发送的 MediaStream
。我需要将它们连接在一起。
我想使用 Chrome 的 native 消息传递,它可以让我将 JSON 对象流式传输到 native 程序。如果我可以从 MediaStream
访问原始数据流,我应该能够将其转换为 JSON 对象,将它们流式传输到 native 应用程序,在那里我可以重建原始视频流。
这样的事情可能吗?
最佳答案
如果可能,我强烈建议在您的 native 应用程序中实现 WebRTC 媒体服务器,并直接在浏览器的 WebRTC API 和您的服务器之间进行通信。其他任何事情都有更多的开销。
例如,要从 MediaSource 转到 native 消息传递,您需要一种方法将 MediaSource 中的音频和视频源序列化为字节序列,然后通过 native 消息传递 channel 将其发送(将通过以下方式进行 JSON 编码)浏览器,然后由您的 native 应用程序进行 JSON 解码)。
- 对于音频,您可以使用
audioContext.createMediaStreamSource
从MediaStream
(来自 WebRTC)桥接到音频节点(在 Web Audio API 中),然后使用offlineAudioCtx.startRendering
从音频节点转换为原始字节。 - 对于视频,您可以在 Canvas 上绘制视频,然后连续使用
toDataURL
或toBlob
获取底层数据并通过网络发送。 (有关拍摄单张照片的教程,请参阅"Taking still photos with WebRTC" on MDN,这可以推广到多帧)
这听起来非常低效,而且可能确实如此,因此您最好在 native 应用程序中实现 WebRTC 媒体服务器以获得一些合理的性能。
关于google-chrome - Chrome native 消息传递: can I stream a MediaStream to a native program?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34569765/