将画布流与 getUserMedia 的音频流合并是听不见的 (kurento/webrtc)

问题描述

用户没有视频设备时,我使用画布视频流并将视频轨道与从 getUserMedia(音频流)获得的流合并。对端连接完美,但其他用户听不到音频。

如果我共享我的屏幕并将此视频轨道合并到流中,则音频可以完美运行。 我注意到 CanvasMediaStream 不工作,但 MediaStream 工作正常。我不知道这是 kurento 的问题还是我做错了什么。

解决方法

没有要测试的 Kurento,但问题可能是 CanvasCaptureMediaStreamTrack 在画布上下文中一段时间​​不活动后会被静音。

要解决这个问题,您可以简单地设置一个绘图循环来定期更新画布(每半秒应该足够了,而不会造成太多开销)。

另外,您可能想从一个新的 MediaStream 开始,尽管我怀疑这有任何影响:

// assumes there is a 'canvas' and a 'mic_stream'

// make the context active,so the stream is not muted
const ctx = canvas.getContext("2d");
setInterval(() => ctx.clearRect(0,1,1),500);
ctx.clearRect(0,1);
const canvas_stream = canvas.captureStream();

const canvas_track = canvas_stream.getVideoTracks()[0];
const mic_track = mic_stream.getAudioTracks()[0];
const merged_stream = new MediaStream([ canvas_track,mic_track ]);

// do something with 'merged_stream'