java.lang.AssertionError: ожидаемое условие будет истинным webrtc android

Я реализую webrtc в android с помощью libjingle (версия-9127), проблема в том, что в одном жизненном цикле приложения, когда я пытаюсь совершать вызовы, первый вызов успешно устанавливается, а затем завершается. Но при втором звонке, затем, когда звонок получает ответ, видео отображается, но аудиопоток не передается, а затем через 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;
    }

person Akshay Bissa    schedule 25.08.2016    source источник


Ответы (1)


Глядя на исходный код (если это не репозиторий, я уверен, что это класс, который вы используете на основе номеров строк ошибок) строка, которая вызывает исключение, следующая: assertTrue(audioRecord.getRecordingState() == AudioRecord.RECORDSTATE_RECORDING)

Не забудьте освободить все, что вы используете после завершения вызова. Когда начинается новый вызов, каждый ресурс должен быть свежим. И инициализировать все обратно.

person Samuel Méndez    schedule 25.08.2016
comment
@AkshayBissa У меня в основном такой же код, поэтому я не знаю никаких других шагов - person Samuel Méndez; 25.08.2016
comment
@SamuelMéndez Я использую MediaPlayer для воспроизведения мелодии звонка, может ли это быть проблемой для dis - person abissa; 25.08.2016
comment
В логе первая ошибка AudioRecord start() status -38. Есть несколько вопросов по этой теме (например, stackoverflow.com/questions/ 20460892/). Может быть, решение исходит из этого - person Samuel Méndez; 25.08.2016
comment
@SamuelMéndez Нет, это было бесполезно. Можете ли вы предоставить мне полный процесс отключения вызова в webrtc? - person abissa; 26.08.2016
comment
@abissa Я работаю с той же проблемой. Не могли бы вы помочь мне, как вы решили свою проблему? Спасибо. - person Muhammad Usman; 05.05.2020