Chrome 本机消息传递:我可以将 MediaStream 流式传输到本机程序吗?
Chrome native messaging: can I stream a MediaStream to a native program?
我正在编写需要在主机 window 系统中显示本机 window 的 Web 应用程序。 window 必须显示正在流式传输到 Web 应用程序的视频。
我已经为 OS X 编写了一个本机程序,它以我需要的方式显示视频,并且在 Web 应用程序中我有一个 MediaStream
通过 WebRTC 发送。我需要将它们连接在一起。
我想使用 Chrome 的本机消息传递,它允许我将 JSON 对象流式传输到本机程序。如果我可以从 MediaStream
访问原始数据流,我应该能够将其转换为 JSON 对象,将它们流式传输到本机应用程序,在那里我可以重建原始视频流。
这样的事情可能吗?
如果可能,我强烈建议在您的本机应用程序中实现 WebRTC 媒体服务器,并在浏览器的 WebRTC API 和您的服务器之间直接通信。其他任何东西都有更多的开销。
例如,要从 MediaSource 转到本机消息传递,您需要一种方法将 MediaSource 中的音频和视频提要序列化为字节序列,然后通过本机消息传递通道(将是 JSON-encoded 由浏览器,然后 JSON-decoded 由您的本机应用程序)。
- 对于音频,您可以使用
audioContext.createMediaStreamSource
to bridge from a MediaStream
(from WebRTC) to an Audio node (in the Web Audio API), and then use offlineAudioCtx.startRendering
将音频节点转换为原始字节。
- 对于视频,您可以在 canvas 上绘制视频,然后连续使用
toDataURL
或 toBlob
获取基础数据以通过网络发送。 (有关拍摄单张照片的教程,请参阅 "Taking still photos with WebRTC" on MDN,这可以推广到多帧)
这听起来效率很低,而且可能确实如此,所以您最好在本机应用程序中实现 WebRTC 媒体服务器以获得合理的性能。
我正在编写需要在主机 window 系统中显示本机 window 的 Web 应用程序。 window 必须显示正在流式传输到 Web 应用程序的视频。
我已经为 OS X 编写了一个本机程序,它以我需要的方式显示视频,并且在 Web 应用程序中我有一个 MediaStream
通过 WebRTC 发送。我需要将它们连接在一起。
我想使用 Chrome 的本机消息传递,它允许我将 JSON 对象流式传输到本机程序。如果我可以从 MediaStream
访问原始数据流,我应该能够将其转换为 JSON 对象,将它们流式传输到本机应用程序,在那里我可以重建原始视频流。
这样的事情可能吗?
如果可能,我强烈建议在您的本机应用程序中实现 WebRTC 媒体服务器,并在浏览器的 WebRTC API 和您的服务器之间直接通信。其他任何东西都有更多的开销。
例如,要从 MediaSource 转到本机消息传递,您需要一种方法将 MediaSource 中的音频和视频提要序列化为字节序列,然后通过本机消息传递通道(将是 JSON-encoded 由浏览器,然后 JSON-decoded 由您的本机应用程序)。
- 对于音频,您可以使用
audioContext.createMediaStreamSource
to bridge from aMediaStream
(from WebRTC) to an Audio node (in the Web Audio API), and then useofflineAudioCtx.startRendering
将音频节点转换为原始字节。 - 对于视频,您可以在 canvas 上绘制视频,然后连续使用
toDataURL
或toBlob
获取基础数据以通过网络发送。 (有关拍摄单张照片的教程,请参阅 "Taking still photos with WebRTC" on MDN,这可以推广到多帧)
这听起来效率很低,而且可能确实如此,所以您最好在本机应用程序中实现 WebRTC 媒体服务器以获得合理的性能。