【发布时间】:2018-11-06 14:47:30
【问题描述】:
我在 WebRTC 网络应用程序中偶然发现了一个奇怪的问题。这是设置: 客户端 A 和客户端 B 通过仅发送 WebRTC 连接将音频发送到 SFU。 客户端 C 通过与同一 SFU 的两个仅接收连接接收来自客户端 A 和 B 的音频流,并将它们添加到两个不同的“音频”元素。这些发送和接收连接之间的路由正常工作。
问题来了: 在刷新页面时,有时客户端 C 会听到来自客户端 A 和 B 的音频。但大多数时候客户端 C 只会随机听到来自 A 或 B 的音频。 Firefox 和 chrome 都会出现这种情况。
两个连接都在接收数据(参见图表“bitsReceivedPerSecond”),但只有一个连接在输出音频。这是一个 C 可以听到 A 但听不到 B 的示例:
我对这些图表的理解是原始 WebRTC 连接工作正常(发送和接收数据),但不知何故连接不会随机输出音频。
有人知道这是怎么发生的吗?
这是用于将流添加到音频元素的“ontrack”回调。每个连接的日志都正确显示。
gotRemoteStream(e) {
Logger.log("Remote Streams: #"+e.streams.length);
if (this.audioElement.srcObject !== e.streams[0]) {
Logger.log("Received remote Stream with tracks to audio: " + this.audioElement.id);
this.audioElement.srcObject = e.streams[0];
}
}
【问题讨论】:
-
来自客户端 B 的
totalAudioEnergy没有显示音频,这表明 B 中存在发送方问题。可能发生,例如如果它的输入轨道(麦克风?)不小心被静音了(在这种情况下浏览器仍然发送数据包)。您是否体验过两者的音频? -
“bitsReceivedPerSecond”与客户端 B 发送的音频相同。他开始说话,然后沉默了几秒钟,然后又开始说话。所以我认为发送方和传输也应该没问题。我猜“总AudioEnergy”只是audioOutputLevel随时间的积分
标签: javascript audio webrtc