【问题标题】:java.lang.AssertionError: Expected condition to be true webrtc androidjava.lang.AssertionError:预期条件为真 webrtc android
【发布时间】:2016-08-25 08:21:39
【问题描述】:

我正在使用 libjingle (version-9127) 在 android 中实现 webrtc,问题是在一个应用程序生命周期中,当我尝试拨打电话时,第一次通话成功建立然后结束。但是,当拨打第二个电话时,当接听电话时,会显示视频,但不会传输音频流,然后在 3-7 秒后应用程序崩溃并出现此错误。 完整的logcat错误如下:

08-25 13:47:12.099 20887-23918/com.justtotaltech.tagove.app D/AudioRecordJni: BuiltInAECIsAvailable@[tid=23918]
08-25 13:47:12.099 20887-23918/com.justtotaltech.tagove.app D/AudioManager: SetCommunicationMode(1)@[tid=23918]
08-25 13:47:12.099 20887-23918/com.justtotaltech.tagove.app D/WebRtcAudioManager: setCommunicationMode(true)@[name=Thread-1692 - 23918, id=1699]
08-25 13:47:12.099 20887-23918/com.justtotaltech.tagove.app D/AudioRecordJni: InitRecording@[tid=23918]
08-25 13:47:12.099 20887-23918/com.justtotaltech.tagove.app D/WebRtcAudioRecord: InitRecording(sampleRate=48000, channels=1)
08-25 13:47:12.099 20887-23918/com.justtotaltech.tagove.app D/WebRtcAudioRecord: byteBuffer.capacity: 960
08-25 13:47:12.099 20887-23918/com.justtotaltech.tagove.app D/AudioRecordJni: OnCacheDirectBufferAddress
08-25 13:47:12.099 20887-23918/com.justtotaltech.tagove.app D/AudioRecordJni: direct buffer capacity: 960
08-25 13:47:12.109 20887-23918/com.justtotaltech.tagove.app D/WebRtcAudioRecord: AudioRecord.getMinBufferSize: 4096
08-25 13:47:12.109 20887-23918/com.justtotaltech.tagove.app D/WebRtcAudioRecord: bufferSizeInBytes: 4096
08-25 13:47:12.109 20887-23918/com.justtotaltech.tagove.app D/WebRtcAudioRecord: AudioRecord session ID: 299, audio format: 2, channels: 1, sample rate: 48000
08-25 13:47:12.109 20887-23918/com.justtotaltech.tagove.app D/WebRtcAudioRecord: AcousticEchoCanceler.isAvailable: false
08-25 13:47:12.129 20887-23918/com.justtotaltech.tagove.app D/AudioRecordJni: frames_per_buffer: 480
08-25 13:47:12.129 20887-23918/com.justtotaltech.tagove.app D/AudioRecordJni: StartRecording@[tid=23918]
08-25 13:47:12.129 20887-23918/com.justtotaltech.tagove.app D/WebRtcAudioRecord: StartRecording
08-25 13:47:12.159 20887-24120/com.justtotaltech.tagove.app D/WebRtcAudioRecord: AudioRecordThread@[name=AudioRecordJavaThread, id=1707]
08-25 13:47:12.159 20887-24120/com.justtotaltech.tagove.app E/AudioRecord: start() status -38
08-25 13:47:12.159 20887-24120/com.justtotaltech.tagove.app W/dalvikvm: threadid=41: thread exiting with uncaught exception (group=0x41687d58)
08-25 13:47:15.232 20887-24120/com.justtotaltech.tagove.app E/AndroidRuntime: FATAL EXCEPTION: AudioRecordJavaThread

                 Process: com.justtotaltech.tagove.app, PID: 20887
                          java.lang.AssertionError: Expected condition to be true
                          at org.webrtc.voiceengine.WebRtcAudioRecord.assertTrue(WebRtcAudioRecord.java:259)
                          at org.webrtc.voiceengine.WebRtcAudioRecord.access$300(WebRtcAudioRecord.java:29)
                          at org.webrtc.voiceengine.WebRtcAudioRecord$AudioRecordThread.run(WebRtcAudioRecord.java:79)

编辑:要断开通话,我已经编写了此代码。希望你能弄清楚错误是什么。在此之后我将释放 peerConnections

if(mediaStream != null  && isLocal) {

        mediaStream.removeTrack(audioTrack);
        audioTrack.setState(MediaStreamTrack.State.ENDED);
        audioTrack = null;
        audioSource = null;

        if(videoTrack != null && ActivityCall.callTypeGlobal.equals(CallManager.CallType.VIDEO)){
            Log.d("TestCallType",String.valueOf(ActivityCall.callTypeGlobal));
            mediaStream.removeTrack(videoTrack);
            videoTrack = null;

            source.stop();

            videoCapturer.dispose();
            videoCapturer = null;
            activeCamera = null;
            Log.d("TestCallType","Video Track"+String.valueOf(videoTrack));
            Log.d("TestCallType","Video Capturer"+String.valueOf(videoCapturer));
        }

        mediaStream = null;
    }

【问题讨论】:

    标签: android webrtc libjingle


    【解决方案1】:

    查看source code(如果这不是存储库,我确定这是您根据错误行号使用的类)导致异常的行是这样的: assertTrue(audioRecord.getRecordingState() == AudioRecord.RECORDSTATE_RECORDING)

    确保在通话结束后释放您使用的所有内容。当一个新的调用开始时,每个资源都需要是新鲜的。并重新初始化。

    【讨论】:

    • @AkshayBissa 我的代码基本相同,所以我不知道任何其他步骤
    • @SamuelMéndez 我正在使用 MediaPlayer 播放铃声,这也是 dis 的问题
    • 查看日志第一个错误是AudioRecord start() status -38。关于该主题有一些问题(例如stackoverflow.com/questions/20460892/…)。也许解决方案来自于此
    • @SamuelMéndez 不,这没有用。你能告诉我在 webrtc 中断开呼叫的完整过程是什么
    • @abissa 我正在处理同样的问题。你能帮我看看你是怎么解决你的问题的吗?谢谢。
    猜你喜欢
    • 2019-02-26
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 2021-08-05
    • 2018-10-19
    • 1970-01-01
    相关资源
    最近更新 更多