Есть ли способ записать звук, когда другой сервис (например, WebRTC, Twilio) использует его? - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь записать звук с телефона Android через микрофон во время телефонного звонка с использованием Twilio.Кажется, что Twilio использует webRTC, поскольку существует несколько I/org.webrtc.Logging записей.Я сузил некоторые проблемы, связанные с хранением, разрешениями, setAudioEncoder() / setOutputFormat() вызовами, и это SO Q / A предполагает, что ошибка связана с другой услугой, использующей микрофон телефона.

Не удалось запустить MediaRecorder: -38

Тем не менее, возможно ли захватывать звук параллельно с webRTC или есть какой-нибудь метод для подключения к аудиопотоку?

I 'Я пробовал несколько конфигов, но в основном я пытался манипулировать порядком, типом и настройками, которые давали мне различные степени успеха.Этот код ниже, насколько я получил.И кажется, что я не могу из-за другой службы, использующей микрофон.

public void onConnected(Call call) {

                setAudioFocus(true);

                recorder = new MediaRecorder();
                Log.d(TAG, "created recorder");

                recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                Log.d(TAG, "set source");

                recorder.setOutputFormat(MediaRecorder.OutputFormat.AAC_ADTS);
                Log.d(TAG, "set output");

                recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); // TODO: change format, codec
                Log.d(TAG, "set codec");

                fileName = getExternalCacheDir().getAbsolutePath();
                fileName += "/audiorecordtest.aac";

                recorder.setOutputFile(fileName);
                Log.d(TAG, "set file");

                try {
                    recorder.prepare();
                } catch (IOException e) {
                    Log.e(TAG, "prepare() failed");
                }
                recorder.start();

                Log.d(TAG, "Connected");
                activeCall = call;
            }

Вот вывод Logcat ...

2019-05-20 15:46:04.865 13078-13132/product I/org.webrtc.Logging: WebRtcAudioRecord: startRecording
2019-05-20 15:46:04.870 13078-13163/product I/org.webrtc.Logging: WebRtcAudioRecord: AudioRecordThread@[name=AudioRecordJavaThread, id=563]
2019-05-20 15:46:04.969 13078-13078/product D/CallActivity: created recorder
2019-05-20 15:46:04.972 13078-13078/product D/CallActivity: set source
2019-05-20 15:46:04.972 13078-13078/product D/CallActivity: set output
2019-05-20 15:46:04.973 13078-13078/product D/CallActivity: set codec
2019-05-20 15:46:04.975 13078-13078/product D/CallActivity: set file
2019-05-20 15:46:05.005 13078-13078/product E/MediaRecorder: start failed: -38
2019-05-20 15:46:05.005 13078-13078/product D/AndroidRuntime: Shutting down VM
2019-05-20 15:46:05.006 13078-13078/product E/AndroidRuntime: FATAL EXCEPTION: main
    Process: product, PID: 13078
    java.lang.IllegalStateException
        at android.media.MediaRecorder.start(Native Method)
        at product.CallActivity$2.onConnected(CallActivity.java:259)
        at com.twilio.voice.Call$1$2.run(Call.java:532)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
2019-05-20 15:46:05.011 13078-13078/product I/Process: Sending signal. PID: 13078 SIG: 9
...