Add aecdump support to AppRTCDemo

Review URL: https://codereview.webrtc.org/1514473008

Cr-Commit-Position: refs/heads/master@{#10985}
This commit is contained in:
aluebs
2015-12-10 23:28:42 -08:00
committed by Commit bot
parent 4dfe332d19
commit 0b0a88b918
7 changed files with 51 additions and 3 deletions

View File

@ -102,6 +102,11 @@
<string name="pref_noaudioprocessing_dlg">Disable audio processing pipeline.</string> <string name="pref_noaudioprocessing_dlg">Disable audio processing pipeline.</string>
<string name="pref_noaudioprocessing_default">false</string> <string name="pref_noaudioprocessing_default">false</string>
<string name="pref_aecdump_key">aecdump_preference</string>
<string name="pref_aecdump_title">Create aecdump.</string>
<string name="pref_aecdump_dlg">Enable diagnostic audio recordings.</string>
<string name="pref_aecdump_default">false</string>
<string name="pref_opensles_key">opensles_preference</string> <string name="pref_opensles_key">opensles_preference</string>
<string name="pref_opensles_title">Use OpenSL ES for audio playback.</string> <string name="pref_opensles_title">Use OpenSL ES for audio playback.</string>
<string name="pref_opensles_dlg">Use OpenSL ES for audio playback.</string> <string name="pref_opensles_dlg">Use OpenSL ES for audio playback.</string>

View File

@ -101,6 +101,12 @@
android:dialogTitle="@string/pref_noaudioprocessing_dlg" android:dialogTitle="@string/pref_noaudioprocessing_dlg"
android:defaultValue="@string/pref_noaudioprocessing_default" /> android:defaultValue="@string/pref_noaudioprocessing_default" />
<CheckBoxPreference
android:key="@string/pref_aecdump_key"
android:title="@string/pref_aecdump_title"
android:dialogTitle="@string/pref_aecdump_dlg"
android:defaultValue="@string/pref_aecdump_default" />
<CheckBoxPreference <CheckBoxPreference
android:key="@string/pref_opensles_key" android:key="@string/pref_opensles_key"
android:title="@string/pref_opensles_title" android:title="@string/pref_opensles_title"

View File

@ -74,6 +74,8 @@ public class CallActivity extends Activity
"org.appspot.apprtc.AUDIOCODEC"; "org.appspot.apprtc.AUDIOCODEC";
public static final String EXTRA_NOAUDIOPROCESSING_ENABLED = public static final String EXTRA_NOAUDIOPROCESSING_ENABLED =
"org.appspot.apprtc.NOAUDIOPROCESSING"; "org.appspot.apprtc.NOAUDIOPROCESSING";
public static final String EXTRA_AECDUMP_ENABLED =
"org.appspot.apprtc.AECDUMP";
public static final String EXTRA_OPENSLES_ENABLED = public static final String EXTRA_OPENSLES_ENABLED =
"org.appspot.apprtc.OPENSLES"; "org.appspot.apprtc.OPENSLES";
public static final String EXTRA_DISPLAY_HUD = public static final String EXTRA_DISPLAY_HUD =
@ -229,6 +231,7 @@ public class CallActivity extends Activity
intent.getIntExtra(EXTRA_AUDIO_BITRATE, 0), intent.getIntExtra(EXTRA_AUDIO_BITRATE, 0),
intent.getStringExtra(EXTRA_AUDIOCODEC), intent.getStringExtra(EXTRA_AUDIOCODEC),
intent.getBooleanExtra(EXTRA_NOAUDIOPROCESSING_ENABLED, false), intent.getBooleanExtra(EXTRA_NOAUDIOPROCESSING_ENABLED, false),
intent.getBooleanExtra(EXTRA_AECDUMP_ENABLED, false),
intent.getBooleanExtra(EXTRA_OPENSLES_ENABLED, false)); intent.getBooleanExtra(EXTRA_OPENSLES_ENABLED, false));
commandLineRun = intent.getBooleanExtra(EXTRA_CMDLINE, false); commandLineRun = intent.getBooleanExtra(EXTRA_CMDLINE, false);
runTimeMs = intent.getIntExtra(EXTRA_RUNTIME, 0); runTimeMs = intent.getIntExtra(EXTRA_RUNTIME, 0);

View File

@ -67,6 +67,7 @@ public class ConnectActivity extends Activity {
private String keyprefHwCodecAcceleration; private String keyprefHwCodecAcceleration;
private String keyprefCaptureToTexture; private String keyprefCaptureToTexture;
private String keyprefNoAudioProcessingPipeline; private String keyprefNoAudioProcessingPipeline;
private String keyprefAecDump;
private String keyprefOpenSLES; private String keyprefOpenSLES;
private String keyprefDisplayHud; private String keyprefDisplayHud;
private String keyprefTracing; private String keyprefTracing;
@ -96,6 +97,7 @@ public class ConnectActivity extends Activity {
keyprefAudioBitrateValue = getString(R.string.pref_startaudiobitratevalue_key); keyprefAudioBitrateValue = getString(R.string.pref_startaudiobitratevalue_key);
keyprefAudioCodec = getString(R.string.pref_audiocodec_key); keyprefAudioCodec = getString(R.string.pref_audiocodec_key);
keyprefNoAudioProcessingPipeline = getString(R.string.pref_noaudioprocessing_key); keyprefNoAudioProcessingPipeline = getString(R.string.pref_noaudioprocessing_key);
keyprefAecDump = getString(R.string.pref_aecdump_key);
keyprefOpenSLES = getString(R.string.pref_opensles_key); keyprefOpenSLES = getString(R.string.pref_opensles_key);
keyprefDisplayHud = getString(R.string.pref_displayhud_key); keyprefDisplayHud = getString(R.string.pref_displayhud_key);
keyprefTracing = getString(R.string.pref_tracing_key); keyprefTracing = getString(R.string.pref_tracing_key);
@ -266,6 +268,11 @@ public class ConnectActivity extends Activity {
keyprefNoAudioProcessingPipeline, keyprefNoAudioProcessingPipeline,
Boolean.valueOf(getString(R.string.pref_noaudioprocessing_default))); Boolean.valueOf(getString(R.string.pref_noaudioprocessing_default)));
// Check Disable Audio Processing flag.
boolean aecDump = sharedPref.getBoolean(
keyprefAecDump,
Boolean.valueOf(getString(R.string.pref_aecdump_default)));
// Check OpenSL ES enabled flag. // Check OpenSL ES enabled flag.
boolean useOpenSLES = sharedPref.getBoolean( boolean useOpenSLES = sharedPref.getBoolean(
keyprefOpenSLES, keyprefOpenSLES,
@ -353,6 +360,7 @@ public class ConnectActivity extends Activity {
intent.putExtra(CallActivity.EXTRA_CAPTURETOTEXTURE_ENABLED, captureToTexture); intent.putExtra(CallActivity.EXTRA_CAPTURETOTEXTURE_ENABLED, captureToTexture);
intent.putExtra(CallActivity.EXTRA_NOAUDIOPROCESSING_ENABLED, intent.putExtra(CallActivity.EXTRA_NOAUDIOPROCESSING_ENABLED,
noAudioProcessing); noAudioProcessing);
intent.putExtra(CallActivity.EXTRA_AECDUMP_ENABLED, aecDump);
intent.putExtra(CallActivity.EXTRA_OPENSLES_ENABLED, useOpenSLES); intent.putExtra(CallActivity.EXTRA_OPENSLES_ENABLED, useOpenSLES);
intent.putExtra(CallActivity.EXTRA_AUDIO_BITRATE, audioStartBitrate); intent.putExtra(CallActivity.EXTRA_AUDIO_BITRATE, audioStartBitrate);
intent.putExtra(CallActivity.EXTRA_AUDIOCODEC, audioCodec); intent.putExtra(CallActivity.EXTRA_AUDIOCODEC, audioCodec);

View File

@ -11,6 +11,7 @@
package org.appspot.apprtc; package org.appspot.apprtc;
import android.content.Context; import android.content.Context;
import android.os.ParcelFileDescriptor;
import android.util.Log; import android.util.Log;
import org.appspot.apprtc.AppRTCClient.SignalingParameters; import org.appspot.apprtc.AppRTCClient.SignalingParameters;
@ -37,6 +38,8 @@ import org.webrtc.VideoSource;
import org.webrtc.VideoTrack; import org.webrtc.VideoTrack;
import org.webrtc.voiceengine.WebRtcAudioManager; import org.webrtc.voiceengine.WebRtcAudioManager;
import java.io.File;
import java.io.IOException;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.Timer; import java.util.Timer;
@ -105,6 +108,7 @@ public class PeerConnectionClient {
private MediaConstraints pcConstraints; private MediaConstraints pcConstraints;
private MediaConstraints videoConstraints; private MediaConstraints videoConstraints;
private MediaConstraints audioConstraints; private MediaConstraints audioConstraints;
private ParcelFileDescriptor aecDumpFileDescriptor;
private MediaConstraints sdpMediaConstraints; private MediaConstraints sdpMediaConstraints;
private PeerConnectionParameters peerConnectionParameters; private PeerConnectionParameters peerConnectionParameters;
// Queued remote ICE candidates are consumed only after both local and // Queued remote ICE candidates are consumed only after both local and
@ -139,6 +143,7 @@ public class PeerConnectionClient {
public final int audioStartBitrate; public final int audioStartBitrate;
public final String audioCodec; public final String audioCodec;
public final boolean noAudioProcessing; public final boolean noAudioProcessing;
public final boolean aecDump;
public final boolean useOpenSLES; public final boolean useOpenSLES;
public PeerConnectionParameters( public PeerConnectionParameters(
@ -146,7 +151,7 @@ public class PeerConnectionClient {
int videoWidth, int videoHeight, int videoFps, int videoStartBitrate, int videoWidth, int videoHeight, int videoFps, int videoStartBitrate,
String videoCodec, boolean videoCodecHwAcceleration, boolean captureToTexture, String videoCodec, boolean videoCodecHwAcceleration, boolean captureToTexture,
int audioStartBitrate, String audioCodec, int audioStartBitrate, String audioCodec,
boolean noAudioProcessing, boolean useOpenSLES) { boolean noAudioProcessing, boolean aecDump, boolean useOpenSLES) {
this.videoCallEnabled = videoCallEnabled; this.videoCallEnabled = videoCallEnabled;
this.loopback = loopback; this.loopback = loopback;
this.tracing = tracing; this.tracing = tracing;
@ -160,6 +165,7 @@ public class PeerConnectionClient {
this.audioStartBitrate = audioStartBitrate; this.audioStartBitrate = audioStartBitrate;
this.audioCodec = audioCodec; this.audioCodec = audioCodec;
this.noAudioProcessing = noAudioProcessing; this.noAudioProcessing = noAudioProcessing;
this.aecDump = aecDump;
this.useOpenSLES = useOpenSLES; this.useOpenSLES = useOpenSLES;
} }
} }
@ -485,10 +491,26 @@ public class PeerConnectionClient {
factory.createAudioSource(audioConstraints))); factory.createAudioSource(audioConstraints)));
peerConnection.addStream(mediaStream); peerConnection.addStream(mediaStream);
if (peerConnectionParameters.aecDump) {
try {
aecDumpFileDescriptor = ParcelFileDescriptor.open(
new File("/sdcard/Download/audio.aecdump"),
ParcelFileDescriptor.MODE_READ_WRITE |
ParcelFileDescriptor.MODE_CREATE |
ParcelFileDescriptor.MODE_TRUNCATE);
factory.startAecDump(aecDumpFileDescriptor.getFd());
} catch(IOException e) {
Log.e(TAG, "Can not open aecdump file", e);
}
}
Log.d(TAG, "Peer connection created."); Log.d(TAG, "Peer connection created.");
} }
private void closeInternal() { private void closeInternal() {
if (factory != null && peerConnectionParameters.aecDump) {
factory.stopAecDump();
}
Log.d(TAG, "Closing peer connection."); Log.d(TAG, "Closing peer connection.");
statsTimer.cancel(); statsTimer.cancel();
if (peerConnection != null) { if (peerConnection != null) {

View File

@ -36,6 +36,7 @@ public class SettingsActivity extends Activity
private String keyprefStartAudioBitrateValue; private String keyprefStartAudioBitrateValue;
private String keyPrefAudioCodec; private String keyPrefAudioCodec;
private String keyprefNoAudioProcessing; private String keyprefNoAudioProcessing;
private String keyprefAecDump;
private String keyprefOpenSLES; private String keyprefOpenSLES;
private String keyPrefRoomServerUrl; private String keyPrefRoomServerUrl;
@ -59,6 +60,7 @@ public class SettingsActivity extends Activity
keyprefStartAudioBitrateValue = getString(R.string.pref_startaudiobitratevalue_key); keyprefStartAudioBitrateValue = getString(R.string.pref_startaudiobitratevalue_key);
keyPrefAudioCodec = getString(R.string.pref_audiocodec_key); keyPrefAudioCodec = getString(R.string.pref_audiocodec_key);
keyprefNoAudioProcessing = getString(R.string.pref_noaudioprocessing_key); keyprefNoAudioProcessing = getString(R.string.pref_noaudioprocessing_key);
keyprefAecDump = getString(R.string.pref_aecdump_key);
keyprefOpenSLES = getString(R.string.pref_opensles_key); keyprefOpenSLES = getString(R.string.pref_opensles_key);
keyPrefRoomServerUrl = getString(R.string.pref_room_server_url_key); keyPrefRoomServerUrl = getString(R.string.pref_room_server_url_key);
@ -95,6 +97,7 @@ public class SettingsActivity extends Activity
setAudioBitrateEnable(sharedPreferences); setAudioBitrateEnable(sharedPreferences);
updateSummary(sharedPreferences, keyPrefAudioCodec); updateSummary(sharedPreferences, keyPrefAudioCodec);
updateSummaryB(sharedPreferences, keyprefNoAudioProcessing); updateSummaryB(sharedPreferences, keyprefNoAudioProcessing);
updateSummaryB(sharedPreferences, keyprefAecDump);
updateSummaryB(sharedPreferences, keyprefOpenSLES); updateSummaryB(sharedPreferences, keyprefOpenSLES);
updateSummary(sharedPreferences, keyPrefRoomServerUrl); updateSummary(sharedPreferences, keyPrefRoomServerUrl);
@ -130,6 +133,7 @@ public class SettingsActivity extends Activity
|| key.equals(keyprefHwCodec) || key.equals(keyprefHwCodec)
|| key.equals(keyprefCaptureToTexture) || key.equals(keyprefCaptureToTexture)
|| key.equals(keyprefNoAudioProcessing) || key.equals(keyprefNoAudioProcessing)
|| key.equals(keyprefAecDump)
|| key.equals(keyprefOpenSLES) || key.equals(keyprefOpenSLES)
|| key.equals(keyPrefDisplayHud)) { || key.equals(keyPrefDisplayHud)) {
updateSummaryB(sharedPreferences, key); updateSummaryB(sharedPreferences, key);

View File

@ -251,7 +251,7 @@ public class PeerConnectionClientTest extends InstrumentationTestCase
new PeerConnectionParameters( new PeerConnectionParameters(
false, true, false, // videoCallEnabled, loopback, tracing. false, true, false, // videoCallEnabled, loopback, tracing.
0, 0, 0, 0, "", true, false, // video codec parameters. 0, 0, 0, 0, "", true, false, // video codec parameters.
0, "OPUS", false, false); // audio codec parameters. 0, "OPUS", false, false, false); // audio codec parameters.
return peerConnectionParameters; return peerConnectionParameters;
} }
@ -261,7 +261,7 @@ public class PeerConnectionClientTest extends InstrumentationTestCase
new PeerConnectionParameters( new PeerConnectionParameters(
true, true, false, // videoCallEnabled, loopback, tracing. true, true, false, // videoCallEnabled, loopback, tracing.
0, 0, 0, 0, videoCodec, true, captureToTexture, // video codec parameters. 0, 0, 0, 0, videoCodec, true, captureToTexture, // video codec parameters.
0, "OPUS", false, false); // audio codec parameters. 0, "OPUS", false, false, false); // audio codec parameters.
return peerConnectionParameters; return peerConnectionParameters;
} }