| Index: webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/MediaEngine.java
|
| diff --git a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/MediaEngine.java b/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/MediaEngine.java
|
| deleted file mode 100644
|
| index a7036914ff33cd762392ee8a68fa549e1a8f4730..0000000000000000000000000000000000000000
|
| --- a/webrtc/examples/android/media_demo/src/org/webrtc/webrtcdemo/MediaEngine.java
|
| +++ /dev/null
|
| @@ -1,321 +0,0 @@
|
| -/*
|
| - * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
|
| - *
|
| - * Use of this source code is governed by a BSD-style license
|
| - * that can be found in the LICENSE file in the root of the source
|
| - * tree. An additional intellectual property rights grant can be found
|
| - * in the file PATENTS. All contributing project authors may
|
| - * be found in the AUTHORS file in the root of the source tree.
|
| - */
|
| -
|
| -package org.webrtc.webrtcdemo;
|
| -
|
| -import android.app.AlertDialog;
|
| -import android.content.BroadcastReceiver;
|
| -import android.content.Context;
|
| -import android.content.DialogInterface;
|
| -import android.content.Intent;
|
| -import android.content.IntentFilter;
|
| -import android.media.AudioManager;
|
| -import android.os.Environment;
|
| -import android.util.Log;
|
| -import android.view.OrientationEventListener;
|
| -import java.io.File;
|
| -
|
| -public class MediaEngine {
|
| - private static final String LOG_DIR = "webrtc";
|
| -
|
| - // Checks for and communicate failures to user (logcat and popup).
|
| - private void check(boolean value, String message) {
|
| - if (value) {
|
| - return;
|
| - }
|
| - Log.e("WEBRTC-CHECK", message);
|
| - AlertDialog alertDialog = new AlertDialog.Builder(context).create();
|
| - alertDialog.setTitle("WebRTC Error");
|
| - alertDialog.setMessage(message);
|
| - alertDialog.setButton(DialogInterface.BUTTON_POSITIVE,
|
| - "OK",
|
| - new DialogInterface.OnClickListener() {
|
| - public void onClick(DialogInterface dialog, int which) {
|
| - dialog.dismiss();
|
| - return;
|
| - }
|
| - }
|
| - );
|
| - alertDialog.show();
|
| - }
|
| -
|
| -
|
| - // Shared Audio/Video members.
|
| - private final Context context;
|
| - private String remoteIp;
|
| - private boolean enableTrace;
|
| -
|
| - // Audio
|
| - private VoiceEngine voe;
|
| - private int audioChannel;
|
| - private boolean audioEnabled;
|
| - private boolean voeRunning;
|
| - private int audioCodecIndex;
|
| - private int audioTxPort;
|
| - private int audioRxPort;
|
| -
|
| - private boolean speakerEnabled;
|
| - private boolean headsetPluggedIn;
|
| - private boolean enableAgc;
|
| - private boolean enableNs;
|
| - private boolean enableAecm;
|
| -
|
| - private BroadcastReceiver headsetListener;
|
| -
|
| - private boolean audioRtpDump;
|
| - private boolean apmRecord;
|
| -
|
| - private int inFps;
|
| - private int inKbps;
|
| - private int outFps;
|
| - private int outKbps;
|
| - private int inWidth;
|
| - private int inHeight;
|
| -
|
| - public MediaEngine(Context context) {
|
| - this.context = context;
|
| - voe = new VoiceEngine();
|
| - check(voe.init() == 0, "Failed voe Init");
|
| - audioChannel = voe.createChannel();
|
| - check(audioChannel >= 0, "Failed voe CreateChannel");
|
| - check(audioChannel >= 0, "Failed voe CreateChannel");
|
| -
|
| - check(voe.setAecmMode(VoiceEngine.AecmModes.SPEAKERPHONE, false) == 0,
|
| - "VoE set Aecm speakerphone mode failed");
|
| -
|
| - // Set audio mode to communication
|
| - AudioManager audioManager =
|
| - ((AudioManager) context.getSystemService(Context.AUDIO_SERVICE));
|
| - audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
|
| - // Listen to headset being plugged in/out.
|
| - IntentFilter receiverFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
|
| - headsetListener = new BroadcastReceiver() {
|
| - @Override
|
| - public void onReceive(Context context, Intent intent) {
|
| - if (intent.getAction().compareTo(Intent.ACTION_HEADSET_PLUG) == 0) {
|
| - headsetPluggedIn = intent.getIntExtra("state", 0) == 1;
|
| - updateAudioOutput();
|
| - }
|
| - }
|
| - };
|
| - context.registerReceiver(headsetListener, receiverFilter);
|
| - }
|
| -
|
| - public void dispose() {
|
| - check(!voeRunning && !voeRunning, "Engines must be stopped before dispose");
|
| - context.unregisterReceiver(headsetListener);
|
| - check(voe.deleteChannel(audioChannel) == 0, "VoE delete channel failed");
|
| - voe.dispose();
|
| - }
|
| -
|
| - public void start() {
|
| - if (audioEnabled) {
|
| - startVoE();
|
| - }
|
| - }
|
| -
|
| - public void stop() {
|
| - stopVoe();
|
| - }
|
| -
|
| - public boolean isRunning() {
|
| - return voeRunning;
|
| - }
|
| -
|
| - public void setRemoteIp(String remoteIp) {
|
| - this.remoteIp = remoteIp;
|
| - UpdateSendDestination();
|
| - }
|
| -
|
| - public String remoteIp() { return remoteIp; }
|
| -
|
| - private String getDebugDirectory() {
|
| - // Should create a folder in /scard/|LOG_DIR|
|
| - return Environment.getExternalStorageDirectory().toString() + "/" +
|
| - LOG_DIR;
|
| - }
|
| -
|
| - private boolean createDebugDirectory() {
|
| - File webrtc_dir = new File(getDebugDirectory());
|
| - if (!webrtc_dir.exists()) {
|
| - return webrtc_dir.mkdir();
|
| - }
|
| - return webrtc_dir.isDirectory();
|
| - }
|
| -
|
| - public void startVoE() {
|
| - check(!voeRunning, "VoE already started");
|
| - check(voe.startListen(audioChannel) == 0, "Failed StartListen");
|
| - check(voe.startPlayout(audioChannel) == 0, "VoE start playout failed");
|
| - check(voe.startSend(audioChannel) == 0, "VoE start send failed");
|
| - voeRunning = true;
|
| - }
|
| -
|
| - private void stopVoe() {
|
| - check(voeRunning, "VoE not started");
|
| - check(voe.stopSend(audioChannel) == 0, "VoE stop send failed");
|
| - check(voe.stopPlayout(audioChannel) == 0, "VoE stop playout failed");
|
| - check(voe.stopListen(audioChannel) == 0, "VoE stop listen failed");
|
| - voeRunning = false;
|
| - }
|
| -
|
| - public void setAudio(boolean audioEnabled) {
|
| - this.audioEnabled = audioEnabled;
|
| - }
|
| -
|
| - public boolean audioEnabled() { return audioEnabled; }
|
| -
|
| - public int audioCodecIndex() { return audioCodecIndex; }
|
| -
|
| - public void setAudioCodec(int codecNumber) {
|
| - audioCodecIndex = codecNumber;
|
| - CodecInst codec = voe.getCodec(codecNumber);
|
| - check(voe.setSendCodec(audioChannel, codec) == 0, "Failed setSendCodec");
|
| - codec.dispose();
|
| - }
|
| -
|
| - public String[] audioCodecsAsString() {
|
| - String[] retVal = new String[voe.numOfCodecs()];
|
| - for (int i = 0; i < voe.numOfCodecs(); ++i) {
|
| - CodecInst codec = voe.getCodec(i);
|
| - retVal[i] = codec.toString();
|
| - codec.dispose();
|
| - }
|
| - return retVal;
|
| - }
|
| -
|
| - private CodecInst[] defaultAudioCodecs() {
|
| - CodecInst[] retVal = new CodecInst[voe.numOfCodecs()];
|
| - for (int i = 0; i < voe.numOfCodecs(); ++i) {
|
| - retVal[i] = voe.getCodec(i);
|
| - }
|
| - return retVal;
|
| - }
|
| -
|
| - public int getIsacIndex() {
|
| - CodecInst[] codecs = defaultAudioCodecs();
|
| - for (int i = 0; i < codecs.length; ++i) {
|
| - if (codecs[i].name().contains("ISAC")) {
|
| - return i;
|
| - }
|
| - }
|
| - return 0;
|
| - }
|
| -
|
| - public void setAudioTxPort(int audioTxPort) {
|
| - this.audioTxPort = audioTxPort;
|
| - UpdateSendDestination();
|
| - }
|
| -
|
| - public int audioTxPort() { return audioTxPort; }
|
| -
|
| - public void setAudioRxPort(int audioRxPort) {
|
| - check(voe.setLocalReceiver(audioChannel, audioRxPort) == 0,
|
| - "Failed setLocalReceiver");
|
| - this.audioRxPort = audioRxPort;
|
| - }
|
| -
|
| - public int audioRxPort() { return audioRxPort; }
|
| -
|
| - public boolean agcEnabled() { return enableAgc; }
|
| -
|
| - public void setAgc(boolean enable) {
|
| - enableAgc = enable;
|
| - VoiceEngine.AgcConfig agc_config =
|
| - new VoiceEngine.AgcConfig(3, 9, true);
|
| - check(voe.setAgcConfig(agc_config) == 0, "VoE set AGC Config failed");
|
| - check(voe.setAgcStatus(enableAgc, VoiceEngine.AgcModes.FIXED_DIGITAL) == 0,
|
| - "VoE set AGC Status failed");
|
| - }
|
| -
|
| - public boolean nsEnabled() { return enableNs; }
|
| -
|
| - public void setNs(boolean enable) {
|
| - enableNs = enable;
|
| - check(voe.setNsStatus(enableNs,
|
| - VoiceEngine.NsModes.MODERATE_SUPPRESSION) == 0,
|
| - "VoE set NS Status failed");
|
| - }
|
| -
|
| - public boolean aecmEnabled() { return enableAecm; }
|
| -
|
| - public void setEc(boolean enable) {
|
| - enableAecm = enable;
|
| - check(voe.setEcStatus(enable, VoiceEngine.EcModes.AECM) == 0,
|
| - "voe setEcStatus");
|
| - }
|
| -
|
| - public boolean speakerEnabled() {
|
| - return speakerEnabled;
|
| - }
|
| -
|
| - public void setSpeaker(boolean enable) {
|
| - speakerEnabled = enable;
|
| - updateAudioOutput();
|
| - }
|
| -
|
| - // Debug helpers.
|
| - public boolean apmRecord() { return apmRecord; }
|
| -
|
| - public boolean audioRtpDump() { return audioRtpDump; }
|
| -
|
| - public void setDebuging(boolean enable) {
|
| - apmRecord = enable;
|
| - if (!enable) {
|
| - check(voe.stopDebugRecording() == 0, "Failed stopping debug");
|
| - return;
|
| - }
|
| - if (!createDebugDirectory()) {
|
| - check(false, "Unable to create debug directory.");
|
| - return;
|
| - }
|
| - String debugDirectory = getDebugDirectory();
|
| - check(voe.startDebugRecording(debugDirectory + String.format("/apm_%d.dat",
|
| - System.currentTimeMillis())) == 0,
|
| - "Failed starting debug");
|
| - }
|
| -
|
| - public void setIncomingVoeRtpDump(boolean enable) {
|
| - audioRtpDump = enable;
|
| - if (!enable) {
|
| - check(voe.stopRtpDump(audioChannel,
|
| - VoiceEngine.RtpDirections.INCOMING) == 0,
|
| - "voe stopping rtp dump");
|
| - return;
|
| - }
|
| - String debugDirectory = getDebugDirectory();
|
| - check(voe.startRtpDump(audioChannel, debugDirectory +
|
| - String.format("/voe_%d.rtp", System.currentTimeMillis()),
|
| - VoiceEngine.RtpDirections.INCOMING) == 0,
|
| - "voe starting rtp dump");
|
| - }
|
| -
|
| - private void updateAudioOutput() {
|
| - boolean useSpeaker = !headsetPluggedIn && speakerEnabled;
|
| - AudioManager audioManager =
|
| - ((AudioManager) context.getSystemService(Context.AUDIO_SERVICE));
|
| - audioManager.setSpeakerphoneOn(useSpeaker);
|
| - }
|
| -
|
| - private void UpdateSendDestination() {
|
| - if (remoteIp == null) {
|
| - return;
|
| - }
|
| - if (audioTxPort != 0) {
|
| - check(voe.setSendDestination(audioChannel, audioTxPort,
|
| - remoteIp) == 0, "VoE set send destination failed");
|
| - }
|
| - }
|
| -
|
| - MediaEngineObserver observer;
|
| - public void setObserver(MediaEngineObserver observer) {
|
| - this.observer = observer;
|
| - }
|
| -}
|
|
|