Canvas 将画布流与getUserMedia';s音频流听不见(kurento/webrtc)

Canvas 将画布流与getUserMedia';s音频流听不见(kurento/webrtc),canvas,video-streaming,webrtc,mediastream,kurento-media-server,Canvas,Video Streaming,Webrtc,Mediastream,Kurento Media Server,当用户没有视频设备时,我使用画布视频流,并将视频轨迹与从getUserMedia获得的流(音频流)合并。对等网络连接完美,但其他用户无法听到音频 如果我共享我的屏幕,并将此视频曲目合并到流中,则音频效果完美。 我注意到,CanvasMediaStream没有工作,但是MediaStream工作得很好。我不知道这是kurento的问题还是我做错了什么。没有kurento需要测试,但问题可能是CanvasCaptureMediaStreamTrack在画布的上下文中经过一段时间的不活动后变得静音 为

当用户没有视频设备时,我使用画布视频流,并将视频轨迹与从getUserMedia获得的流(音频流)合并。对等网络连接完美,但其他用户无法听到音频

如果我共享我的屏幕,并将此视频曲目合并到流中,则音频效果完美。
我注意到,CanvasMediaStream没有工作,但是MediaStream工作得很好。我不知道这是kurento的问题还是我做错了什么。

没有kurento需要测试,但问题可能是CanvasCaptureMediaStreamTrack在画布的上下文中经过一段时间的不活动后变得静音

为了解决这个问题,您只需设置一个定期更新画布的绘图循环(每半秒应该足够了,而且不会造成太多开销)

此外,您可能希望从一个全新的媒体流开始,尽管我怀疑这是否有任何影响:

//假设存在“画布”和“麦克风流”
//使上下文处于活动状态,以便流不会被禁用
const ctx=canvas.getContext(“2d”);
setInterval(()=>ctx.clearRect(0,0,1,1),500);
ctx.clearRect(0,0,1,1);
const canvas_stream=canvas.captureStream();
const canvas_track=canvas_stream.getVideoTracks()[0];
const mic_track=mic_stream.getAudioTracks()[0];
const merged_stream=新媒体流([canvas_track,mic_track]);
//使用“合并流”执行某些操作

CanvasMediaStream不应该再存在了。。。这也会发生在Chrome上吗?在本地消费时,您能听到音频吗?你到底想从我们这里得到什么?听起来你已经知道了修复方法:将canvascapturemediastreamtrack添加到音频媒体流,或者甚至从这两个曲目创建一个新的媒体流。感谢回复@kaido。没有视频流,kurento无法工作,因此我尝试添加虚拟视频轨迹。这样,呼叫将启动,但无法听到音频。这在Chrome和Firefox浏览器上都会发生。有没有其他方法可以添加视频曲目?如果添加屏幕共享视频曲目,我可以听到音频。我只是希望其他用户在各个方面都能听到我的声音。如果这也发生在Chrome上,那不是因为这条流是一条CanvasMediaStream。您仍然可以尝试创建
新媒体流([canvasStream.getVideoTracks()[0],micStream.getAudioTracks()[0]])
。此外,您可能希望在抓取流的画布上下文上以固定的间隔(至少在Chrome上每隔5秒)调用一些绘图方法,甚至
ctx.clearRect()
应该这样做,但为了安全起见,请从
fillRect(0,0,1,1)
开始。如果不这样做,浏览器可能会使画布轨迹静音,这可能是kurento(我不知道)的问题。@kaido好的,谢谢,将尝试此解决方案。但是除了使用画布流,我还有其他选择吗?如果你需要视频流?不确定。。。即使是一个短循环MediaElement的MediaStream也会在每次循环时发出静音事件,因此,如果您的后端确实存在静音曲目的问题,它也可能会失败,尽管也值得尝试,但我怀疑每0.5秒在画布上绘制一次上下文就可以了。