Javascript 如何使用RTPeerConnection.removeTrack()删除视频或音频或两者?
我正在学习WebRTC,并试图弄清楚它是如何工作的 我在WebRTC.github.io上进行了修改,使getUserMedia成为leftVideo的源代码,并将其流式传输到rightVideo。它可以工作 我还想添加一些功能,比如当我在leftVideo上按pause时(我的浏览器是Chrome69) 我把电话号码分开 并在leftVideo上添加功能Javascript 如何使用RTPeerConnection.removeTrack()删除视频或音频或两者?,javascript,webrtc,Javascript,Webrtc,我正在学习WebRTC,并试图弄清楚它是如何工作的 我在WebRTC.github.io上进行了修改,使getUserMedia成为leftVideo的源代码,并将其流式传输到rightVideo。它可以工作 我还想添加一些功能,比如当我在leftVideo上按pause时(我的浏览器是Chrome69) 我把电话号码分开 并在leftVideo上添加功能 leftVideo.onpause = () => { pc1Senders.map(sender => pc1.remov
leftVideo.onpause = () => {
pc1Senders.map(sender => pc1.removeTrack(sender));
}
我不想关闭连接,我只想关闭视频或音频
但在我暂停leftVideo后,右边的视频仍会跟踪。
我是在这里做错了,还是在别的地方
感谢您的帮助。首先,您需要获取对等方的流。您可以使用
MediaStreamTrack
的enabled
属性禁用/隐藏流。使用下面的代码片段切换媒体
/* stream: MediaStream, type:trackType('audio'/'video') */
toggleTrack(stream,type) {
stream.getTracks().forEach((track) => {
if (track.kind === type) {
track.enabled = !track.enabled;
}
});
}
找到所有的发送者
循环并移除每个发送轨道
添加新曲目(如果需要)
编辑:或者,如果您不需要重新协商(以下列出的条件),请使用replaceTrack
()
并非所有轨道更换都需要重新协商。事实上,甚至
看似巨大的变化可以在不需要协商的情况下完成。在这里
可能引发谈判的变更是:
- 新轨迹的分辨率超出了新轨迹的范围 当前轨迹的边界;也就是说,新轨道要么更宽,要么更宽 比现在的高
- 新曲目的帧速率足够高 使编解码器的块速率被超过。这条新赛道是一条新的赛道 视频轨迹及其原始或预编码状态不同于 原来的轨道
- 新曲目是一首音频曲目,具有不同的 原始的频道数
- 内置 编码器(如硬件编码器)可能无法提供 协商编解码器。软件源可能无法实现协商的协议 编解码器
答案很好,但如果您仍然希望删除曲目而不是使其静音,那么RTC API的总体思路似乎是尽可能保留发送者。请注意,即使addTrack也会返回一个发送者——这应该是关于这个概念的一个提示。也许按种类对它们进行分类,只替换(不需要时移除)它们的轨迹是最有效的方法。我将测试这个,但这需要时间,我希望我会记得回到这里并添加一些印象。这是如此简单和有效!为什么会有这么多复杂的线程,这些线程都是关于pc.addTrack/removeTrack等的。Testen现在在android、chrome和firefox上运行。到处都能工作。向上投票。感谢您的支持,但这种方法存在一些问题,如果您使用enabled属性而不是removeTrack方法,则空气开启指示器将不会关闭。这不是一个真正的问题,但当你们打开你们的视频流时,所有视频聊天平台都会关闭指示灯,这对我的项目很有帮助。我投了赞成票。谢谢。@ShahnawazHossan很高兴我能帮上忙
/* stream: MediaStream, type:trackType('audio'/'video') */
toggleTrack(stream,type) {
stream.getTracks().forEach((track) => {
if (track.kind === type) {
track.enabled = !track.enabled;
}
});
}
const senders = pc.getSenders();
senders.forEach((sender) => pc.removeTrack(sender));
newTracks.forEach((tr) => pc.addTrack(tr));