我正在使用JavaScript IceLink库(http://www.frozenmountain.com/products/icelink)来实现webrtc视频聊天。应用程序有时会在视频聊天后崩溃。 Chrome日志显示下一个问题: [240:1520:0819/141151:VERBOSE1:webrtcsession.cc(1016)] SetAudioPlayoutVolume:不存在音频通道。
void WebRtcSession::SetAudioPlayoutVolume(uint32 ssrc, double volume) {
ASSERT(signaling_thread()->IsCurrent());
ASSERT(volume >= 0 && volume <= 10);
if (!voice_channel_) {
LOG(LS_ERROR) << "SetAudioPlayoutVolume: No audio channel exists.";
return;
}
if (!voice_channel_->SetOutputScaling(ssrc, volume, volume))
ASSERT(false);
}
(https://code.google.com/p/webrtc/source/browse/trunk/talk/app/webrtc/webrtcsession.cc?r=6855#990)
看起来 - 崩溃 - 是Chrome浏览器的预期行为,但它对我的应用程序来说是一种糟糕的用户体验。我能以某种方式处理这种情况吗?我需要摆脱这次崩溃。
答案 0 :(得分:2)
崩溃是否是预期的行为&#34;是一个有趣的问题。
从语义上讲,assert(condition)
语句意味着
除非
condition
为真,否则非常非常错误
显然,Chrome开发人员订阅Crash Early理念 - 如果您无法从故障状态中有意义地恢复,则应尽快终止。在这方面,它是预期的&#34;行为。
然后再次,如果一个断言被触发,这意味着程序中的错误。如果这是一个预期的状态,就不会有崩溃,而是有意义的反应。因此,您在Chrome中遇到了一个错误,而不是&#34;预期&#34;行为。即使您正在使用的库中存在错误,用户也不应该触发崩溃。
您应该使用最新的Chrome版本(dev / Canary版本)测试您的应用。如果错误仍然存在 - 那你明确错误should report。如果错误在Canary中没有重现,那么这是一个已经修复的错误,你所能做的就是等待修复它的下一个Chrome版本。