[Q&A] 通話時にマイクデバイスから録音する際のエラーに関して

972 views
Skip to first unread message

もけもけ

unread,
Sep 7, 2016, 3:07:13 AM9/7/16
to SkyWay Technical Forum
Androidで通話の録音を実装しているのですが幾つか問題があります

1. MediaConnectionが単数(通話相手が一人)の場合
  
問題無く録音できるのですが、下記エラーが出力されます

E/AudioRecord: start() status -38
E/org.webrtc.Logging: WebRtcAudioRecord: AudioRecord.startRecording failed
E/AudioRecordJni: StartRecording failed!

2. MediaConnectionが複数(通話相手が複数)の場合

下記例外が投げられ処理が中断されます

E/MediaRecorder: start failed: -38
E/MediaActivity: null
java.lang.IllegalStateException
at android.media.MediaRecorder.start(Native Method)
at <自作のパッケージ>.audio.MediaRecorderManager.record(MediaRecorderManager.java:47)

A. 疑似的なコード

// MediaConnection作成部分
mediaConnection1
= peer.call(peerId1, localMediaStream, option);
mediaConnection2
= peer.call(peerId2, localMediaStream, option);

// 音声録音部分
recorder
= new MediaRecorder();
recorder
.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder
.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
recorder
.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
recorder
.setOutputFile(file);
recorder
.prepare();
recorder
.start();


回避方法等が御座いましたら教示願います

もけもけ

unread,
Sep 8, 2016, 11:31:31 AM9/8/16
to SkyWay Technical Forum
もう少し調査してみました

サンプルアプリケーション(https://github.com/nttcom/SkyWay-Android-Sample)のMediaActivity.javaを
自分の音声を録音するよう修正を行いました(添付ファイル参照)

録音自体は正常に行われるのですが下記エラーが出力され相手側に音声が送信されません

09-09 00:11:16.800 30866-31023/io.skyway.skw_sample E/AudioRecord: start() status -38
09-09 00:11:16.800 30866-31023/io.skyway.skw_sample E/org.webrtc.Logging: WebRtcAudioRecord: AudioRecord.startRecording failed
09-09 00:11:16.800 30866-31023/io.skyway.skw_sample E/AudioRecordJni: StartRecording failed!

やはり複数のスレッドから音声入力デバイスにアクセスするのは不可能なのでしょうか





MediaActivity.java

Tsuyoshi Takahashi

unread,
Sep 12, 2016, 12:47:04 AM9/12/16
to SkyWay Technical Forum
もけもけ様

SkyWay開発チームの高橋です。貴重な情報のご提供ありがとうございます。

下記の件ですが、SkyWay SDKが内部で利用しているAndroidの標準クラス(AudioRecord)の仕様上、
同時に2つのクライアントがアクティブになることを許していないようで、それが事象の発生原因と考えられます。

頂いたコードの場合、もけもけ様が作成されたMediaRecorderの方が先にマイクデバイスを取得している為、
SkyWay SDK側のAudioRecordがマイクを取得できず、録音開始エラーとなっています(結果、相手側で無音)

逆にSkyWay SDK側が先にマイクを取得するようにしてみました所(MediaConnection.STREAMイベントの後に
MediaRecorderの録音を開始)、MediaRecorder側が録音開始エラーとなる事が確認できました。


そのため、本件(アプリ側でMediaRecorderやAudioRecordを利用して発話内容を録音する事はできない)に
つきましては、現時点では、有効な回避策は把握できておりません。


よろしくお願い致します。



2016年9月9日金曜日 0時31分31秒 UTC+9 もけもけ:

もけもけ

unread,
Sep 14, 2016, 12:48:55 AM9/14/16
to SkyWay Technical Forum
高橋様

ご回答ありがとうございます
Androidの仕様ということで了解しました


2016年9月12日月曜日 13時47分04秒 UTC+9 Tsuyoshi Takahashi:
Reply all
Reply to author
Forward
0 new messages