背景
我正在创建一个使用WebRTC的视频聊天系统。流从广播公司发送到Wowza流引擎,然后从Wowza发送到任何观众。流的广播者可以切换音频是否包括在其广播中。启用或禁用音频,如下所示:
let audioEnabled = false; // change to true if we want audio
navigator.mediaDevices.getUserMedia({video:true,audio:audioEnabled})
问题
如果广播公司正在播放无音频流,则观看者将通过HTML5视频元素(已实现here)观看。观众可能会注意到视频播放器上的扬声器图标显示为灰色,因此他们无法尝试更改音量或切换静音。
如果广播公司现在决定启用音频,则WebRTC连接将关闭,重新协商并重新打开,并且观众会看到视频连接冻结了几秒钟,然后再次开始播放。 但是,查看者的HTML5视频播放器仍然坚信音频仍然被禁用。如果HTML5视频播放器被销毁并重新创建,则音频将正常工作,并且扬声器图标不再呈灰色。
简而言之
HTML5视频播放器没有注意到何时将音频添加到以前仅视频流中。
我的想法
重新协商流时发出通知,并在发生这种情况时销毁/重新创建HTML5视频播放器。
广播公司在发送到Wowza的流中包括静默MediaStreamTrack和视频轨道。
说服Wowza在重播Feed时将静音音频与视频一起发送。
到目前为止
我认识到,如果包含一个插件,这将更容易解决,但是我还没有遇到任何面向公众的工作webrtc演示,我可以使用它而不必为这个问题重新实现一个相当复杂的系统。
我已经遵循了上面列出的三个想法,但是我希望能更加确定地确定自己在正确的道路上工作,然后再花更多的时间讨论这个问题。
感谢您的阅读!