我的目标是使用 webrtc web application 在视频或音频通话中启用屏幕共享。
好吧,我发现我可以使用 MediaStreamTrack.applyConstraints()
来更改视频属性,但是可以更改视频源吗?此外,如何将视频添加到现有音频流中。
我现在只需要它在 chrome 上工作。
原文由 Abdullah Al Noman 发布,翻译遵循 CC BY-SA 4.0 许可协议
我的目标是使用 webrtc web application 在视频或音频通话中启用屏幕共享。
好吧,我发现我可以使用 MediaStreamTrack.applyConstraints()
来更改视频属性,但是可以更改视频源吗?此外,如何将视频添加到现有音频流中。
我现在只需要它在 chrome 上工作。
原文由 Abdullah Al Noman 发布,翻译遵循 CC BY-SA 4.0 许可协议
截至今天,我觉得对你的情况更好的方法是使用 RTCRtpSender.replaceTrack 方法。
假设您的相机流是“camStream”,您可以使用以下方法获取所需的 RTCRtpSender 对象:
var camVideoTrack = camStream.getVideoTracks()[0];
var camAudioTrack = camStream.getAudioTracks()[0];
var videoSender = peerConnection.addTrack(camVideoTrack, camStream);
var audioSender = peerConnection.addTrack(camAudioTrack, camStream);
…
最后两行向连接添加视频和音频功能。
…
假设您的屏幕流是“screenStream”,那么您可以像这样从相机切换到屏幕共享视频:
var screenVideoTrack = screenStream.getVideoTracks()[0];
videoSender.replaceTrack(screenVideoTrack);
…
无需更换音轨,因为我们只对在保持音频输入不变的同时更改视觉效果感兴趣。
使用这种方法的好处是不需要对等端重新协商来切换视频源。
这种方法的另一个好处是您不需要停止 camStream。完成屏幕共享后,您可以使用以下方式切换回视频源:
videoSender.replaceTrack(camStream.getVideoTracks()[0]);
您可以 在此处 查看 replaceTrack 的文档
我有一个可用的 webrtc 会议解决方案,它支持使用这些类似步骤的屏幕共享和屏幕录制。你可以 在这里查看
它在 firefox 上开箱即用,但要使其在 chrome 上运行,您需要启用“Experimental Web Platform”标志(转到 chrome://flags/ )
原文由 Anthony Anyanwu 发布,翻译遵循 CC BY-SA 4.0 许可协议
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
6 回答820 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决
我能够通过以下步骤找到解决方案
删除当前流
添加新流
创建新报价
请注意,
removeStream
已弃用,不再出现在规范中,也未在所有浏览器中实现。例如,这在 Firefox 中不起作用。stream.stop()
也弃用了stream.getTracks().forEach(track => track.stop())