【发布时间】:2015-03-06 05:15:15
【问题描述】:
我想用canvas元素作为webrtc通信视频部分的mediastreamsource,任何方向都会有帮助,搜遍了网络,没有找到太多讨论这个话题的资源
* 长篇背景故事 *
问题,我无法直接从相机发送视频,这是我在显示之前处理视频(一些图像处理内容,超出此问题的范围)的要求的一部分。
以前,在其他对等点的浏览器上,我没有使用<video> 标签直接显示视频,而是对隐藏的画布元素进行了一些处理,然后将详细信息复制到另一个画布(我使用了 settimeout 来保持绘图,这给了illusion of live video)。
现在,客户端希望在传输视频之前完成处理,所以我使用 webrtc 直接传递音频流(之前音频和视频都是通过 webrtc 发送的)。对于视频流,我有两种解决方案:
步骤:
在本地对等点处理视频,在隐藏的画布上绘制。最简单的部分。
使用超时重复捕获图像数据并传输
a) 使用websockets( yes, goes through server),它带来了可怕的延迟并最终导致浏览器崩溃。
b) 使用RTCDataChannel,它的性能要好得多,但有时会无缘无故地失败。我还遇到了其他几个问题(例如,使用的额外带宽,因为发送 jpeg 而不是 webp)。
另一个主要问题是因为我正在使用超时:当我切换标签时,另一边的帧速率下降。
那么,有什么方法可以使用隐藏的画布作为媒体流源,而不是我手动操作?
【问题讨论】:
-
你能限制使用 Firefox 吗?你也许可以用mozCaptureStreamUntilEnded 来做一些事情。或者我能想到的唯一其他方法是通过某种 MCU 中继媒体(例如 Janus-Gateway 或 Licode 的 Erizo)
-
很遗憾,它需要同时支持frefox和chrome,我想到了
mozCaptureStreamUntilEnded路由,但是在firefox中也需要预先录制的媒体对吗? -
可能有一些东西可以一起被破解,并且仍然会使用超时来捕获画布,Jesup 在他的回答中提到了这一点。
标签: javascript webrtc mediastreamsource rtcdatachannel