2016-12-28 156 views
2

我一直在我的应用程序中使用SimpleWebRTC一段时间。这是非常简单的设置和适用于简单的应用程序。但是,我需要能够禁用/启用视频,而不会影响我的应用中的音频,而这正是SimpleWebRTC不足的地方。搜索一些其他StackOverflow问题显示,这似乎被称为'重新谈判'。WebRTC逻辑流重新协商(启用/禁用视频)

显然直到最近(去年或两年?)浏览器没有公开MediaStreamTrack s(https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack),这使得重新协商变得不可能。现在这显然是可能的,但我没有看到任何包装库做这件事。实际上,大多数流行的WebRTC库似乎都不再被维护。

有没有人与流重新协商工作,并指出我在正确的方向,要么实现它的图书馆,polyfill,或一些关于如何通过当前的WebRTC标准实现这一点的指导?我不介意摆脱一个图书馆,以支持准系统WebRTC,我只是不确定什么是始终如一地结束/启动连接的正确方式,因为实现在浏览器之间似乎仍然很挑剔。

+0

可能重复的[如何在WebRTC MediaStream中添加跟踪](http://stackoverflow.com/questions/35504214/how-to-addtrack-in-mediastream-in-webrtc) – jib

+0

此外,你有没有尝试过只是禁用视频?这会导致视频数据包停止发送,至少在Firefox中:https://jsfiddle.net/ec9ossmu/(小提琴需要Firefox,因为Chrome目前还不支持该规范的统计数据)。 – jib

+0

@jib感谢,就小提琴而言,它与Chrome在Chrome中的解决方案具有相同的效果,视频有效暂停,但相机保持打开状态,使用户产生怀疑。至于你的第一个链接,你是对的,这在技术上是重复的,对不起我错过了。 Chrome的状态已经改变了,它现在部分支持轨道,特别是'addTrack'和'removeTrack',而不是'replaceTrack',正如Phillip指出的那样,我需要它。我可以将其标记为重复的,但由于对WebRTC的支持不断变化,我需要看看答案是否仍然有效,以及现在是否有更清晰的方法。 –

回答

1

特别是对于simplewebrtc有https://simplewebrtc.com/notsosimple.html#mute 它不重新协商,但将MediaStreamTrack启用属性设置为false,它发送黑帧(低带宽)。不利的一面是,如果你用这种方式使摄像机静音,摄像灯将保持亮起。

+0

是的,我已经意识到这个解决方案,我很抱歉,我忘了提及它。它的问题与您所描述的完全相同,当用户只打算传输音频时看到照相机亮起的用户可能会认为我的应用正在做一些粗略的事情。 –

+1

然后问题是一些浏览器(Chrome)仍然没有实现RTPSender.replaceTrack,这将允许这个没有重新协商。 如果你想实施重新谈判:祝你好运。 –

+0

我明白了,当谈到WebRTC标准时,Firefox看起来确实比Chrome更出色。不幸的是,我们大多数用户可能会使用Chrome。 –