【发布时间】:2019-02-01 23:12:27
【问题描述】:
我正在使用带有 Asterisk 的 WebRTC,并且由于信号错误导致没有音频的时间大约有 5% 出现错误。简单的解决方法是,如果没有音频通过,则停止连接并重试。我知道这是一个创可贴,而我解决了真正的问题。不过现在,我将整理我的代码。
为了获得音频,我正在执行以下操作:
var remoteStream = new MediaStream();
peerConnection.getReceivers().forEach((receiver) => {
remoteStream.addTrack(receiver.track);
});
callaudio.srcObject = remoteStream;
callaudio.play();
这里的问题是,即使扬声器没有音频输出,远程流也总是添加轨道。
如果您检查chrome://webrtc-internals,您会看到没有音频被发送,但仍然有一个接收器。您可以查看媒体流,并看到确实有一个音轨。一切都支持我应该听到一些东西的事实,但有 5% 的时间我什么也没听到。
我的解决方案是从接收器轨道获取数据并检查那里是否有任何东西,但我不知道如何读取该数据。我有 web audio API 工作,但它只有在当前正在播放一些声音时才有效。有时另一端的人 10 秒钟不说话。我需要一种方法来读取原始数据并查看其中是否发生了某些事情。我只想知道MediaStream 上是否有任何数据!
如果您执行remoteStream.getAudioTracks(),您会返回一个音轨,因为有一个音轨,只是没有音频穿过该音轨。
【问题讨论】:
-
只是建议:将这个“callaudio.play()”放在回调函数中:oncanplay、oncanplaythrough 或 onloadeddata。此外,您必须在发送邀请/候选人时初始设置音频:true。然后,您甚至可以在远程控制静音、暂停或播放,而不仅仅是本地。
-
你最终为此做了什么?
-
我真的没有发现什么太好的东西。我最终解决了信号问题。知道音频的进展情况很难,但在对等连接上使用 getStats() 效果很好。
标签: javascript audio webrtc asterisk