| Index: webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java
|
| diff --git a/webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java b/webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java
|
| index a1ea8a457d2ed2e1589e56e1828ea23e6c5a4bfe..359e98689654825304f8db70462d96a28499e498 100644
|
| --- a/webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java
|
| +++ b/webrtc/examples/androidapp/src/org/appspot/apprtc/CallActivity.java
|
| @@ -29,14 +29,22 @@ import android.view.Window;
|
| import android.view.WindowManager.LayoutParams;
|
| import android.widget.Toast;
|
|
|
| +import java.io.IOException;
|
| +import java.lang.RuntimeException;
|
| +import java.util.ArrayList;
|
| +import java.util.List;
|
| +
|
| import org.webrtc.Camera2Enumerator;
|
| import org.webrtc.EglBase;
|
| +import org.webrtc.GlVideoFileRenderer;
|
| +import org.webrtc.GlRectDrawer;
|
| import org.webrtc.IceCandidate;
|
| import org.webrtc.PeerConnectionFactory;
|
| import org.webrtc.RendererCommon.ScalingType;
|
| import org.webrtc.SessionDescription;
|
| import org.webrtc.StatsReport;
|
| import org.webrtc.SurfaceViewRenderer;
|
| +import org.webrtc.VideoRenderer;
|
|
|
| /**
|
| * Activity for peer connection call setup, call waiting
|
| @@ -96,6 +104,18 @@ public class CallActivity extends Activity
|
| "org.appspot.apprtc.CMDLINE";
|
| public static final String EXTRA_RUNTIME =
|
| "org.appspot.apprtc.RUNTIME";
|
| + public static final String EXTRA_VIDEO_FILE_AS_CAMERA =
|
| + "org.appspot.apprtc.VIDEO_FILE_AS_CAMERA";
|
| + public static final String EXTRA_VIDEO_FILE_AS_CAMERA_WIDTH =
|
| + "org.appspot.apprtc.VIDEO_FILE_AS_CAMERA_WIDTH";
|
| + public static final String EXTRA_VIDEO_FILE_AS_CAMERA_HEIGHT =
|
| + "org.appspot.apprtc.VIDEO_FILE_AS_CAMERA_HEIGHT";
|
| + public static final String EXTRA_SAVE_REMOTE_VIDEO_TO_FILE =
|
| + "org.appspot.apprtc.SAVE_REMOTE_VIDEO_TO_FILE";
|
| + public static final String EXTRA_SAVE_REMOTE_VIDEO_TO_FILE_WIDTH =
|
| + "org.appspot.apprtc.SAVE_REMOTE_VIDEO_TO_FILE_WIDTH";
|
| + public static final String EXTRA_SAVE_REMOTE_VIDEO_TO_FILE_HEIGHT =
|
| + "org.appspot.apprtc.SAVE_REMOTE_VIDEO_TO_FILE_HEIGHT";
|
| private static final String TAG = "CallRTCClient";
|
|
|
| // List of mandatory application permissions.
|
| @@ -128,7 +148,9 @@ public class CallActivity extends Activity
|
| private AppRTCAudioManager audioManager = null;
|
| private EglBase rootEglBase;
|
| private SurfaceViewRenderer localRender;
|
| - private SurfaceViewRenderer remoteRender;
|
| + private SurfaceViewRenderer remoteRenderScreen;
|
| + private GlVideoFileRenderer videoFileRenderer;
|
| + private List<VideoRenderer.Callbacks> remoteRenders = new ArrayList<VideoRenderer.Callbacks>();
|
| private PercentFrameLayout localRenderLayout;
|
| private PercentFrameLayout remoteRenderLayout;
|
| private ScalingType scalingType;
|
| @@ -176,7 +198,7 @@ public class CallActivity extends Activity
|
|
|
| // Create UI controls.
|
| localRender = (SurfaceViewRenderer) findViewById(R.id.local_video_view);
|
| - remoteRender = (SurfaceViewRenderer) findViewById(R.id.remote_video_view);
|
| + remoteRenderScreen = (SurfaceViewRenderer) findViewById(R.id.remote_video_view);
|
| localRenderLayout = (PercentFrameLayout) findViewById(R.id.local_video_layout);
|
| remoteRenderLayout = (PercentFrameLayout) findViewById(R.id.remote_video_layout);
|
| callFragment = new CallFragment();
|
| @@ -191,12 +213,32 @@ public class CallActivity extends Activity
|
| };
|
|
|
| localRender.setOnClickListener(listener);
|
| - remoteRender.setOnClickListener(listener);
|
| + remoteRenderScreen.setOnClickListener(listener);
|
| + remoteRenders.add(remoteRenderScreen);
|
| +
|
| + final Intent intent = getIntent();
|
|
|
| // Create video renderers.
|
| rootEglBase = EglBase.create();
|
| localRender.init(rootEglBase.getEglBaseContext(), null);
|
| - remoteRender.init(rootEglBase.getEglBaseContext(), null);
|
| + String saveRemoteVideoToFile = intent.getStringExtra(EXTRA_SAVE_REMOTE_VIDEO_TO_FILE);
|
| +
|
| + // When saveRemoveToFile is set we save the video from the remote to a file.
|
| + if (saveRemoteVideoToFile != null) {
|
| + int videoOutWidth = intent.getIntExtra(EXTRA_SAVE_REMOTE_VIDEO_TO_FILE_WIDTH, 0);
|
| + int videoOutHeight = intent.getIntExtra(EXTRA_SAVE_REMOTE_VIDEO_TO_FILE_HEIGHT, 0);
|
| + try {
|
| + videoFileRenderer = new GlVideoFileRenderer(
|
| + saveRemoteVideoToFile, videoOutWidth, videoOutHeight,
|
| + rootEglBase.getEglBaseContext());
|
| + remoteRenders.add(videoFileRenderer);
|
| + }
|
| + catch (IOException e) {
|
| + throw new RuntimeException("Failed to open video file for output: " + saveRemoteVideoToFile, e);
|
| + }
|
| + }
|
| + remoteRenderScreen.init(rootEglBase.getEglBaseContext(), null);
|
| +
|
| localRender.setZOrderMediaOverlay(true);
|
| updateVideoView();
|
|
|
| @@ -211,7 +253,6 @@ public class CallActivity extends Activity
|
| }
|
|
|
| // Get Intent parameters.
|
| - final Intent intent = getIntent();
|
| Uri roomUri = intent.getData();
|
| if (roomUri == null) {
|
| logAndToast(getString(R.string.missing_url));
|
| @@ -221,6 +262,7 @@ public class CallActivity extends Activity
|
| return;
|
| }
|
| String roomId = intent.getStringExtra(EXTRA_ROOMID);
|
| + Log.d(TAG, "Room ID: " + roomId);
|
| if (roomId == null || roomId.length() == 0) {
|
| logAndToast(getString(R.string.missing_url));
|
| Log.e(TAG, "Incorrect room ID in intent!");
|
| @@ -255,9 +297,13 @@ public class CallActivity extends Activity
|
| intent.getBooleanExtra(EXTRA_DISABLE_BUILT_IN_AEC, false),
|
| intent.getBooleanExtra(EXTRA_DISABLE_BUILT_IN_AGC, false),
|
| intent.getBooleanExtra(EXTRA_DISABLE_BUILT_IN_NS, false),
|
| - intent.getBooleanExtra(EXTRA_ENABLE_LEVEL_CONTROL, false));
|
| - commandLineRun = intent.getBooleanExtra(EXTRA_CMDLINE, false);
|
| - runTimeMs = intent.getIntExtra(EXTRA_RUNTIME, 0);
|
| + intent.getBooleanExtra(EXTRA_ENABLE_LEVEL_CONTROL, false),
|
| + intent.getStringExtra(EXTRA_VIDEO_FILE_AS_CAMERA),
|
| + intent.getIntExtra(EXTRA_VIDEO_FILE_AS_CAMERA_WIDTH, 0),
|
| + intent.getIntExtra(EXTRA_VIDEO_FILE_AS_CAMERA_HEIGHT, 0));
|
| + runTimeMs = intent.getIntExtra(EXTRA_RUNTIME, 0);
|
| +
|
| + Log.d(TAG, "VIDEO_FILE: '" + intent.getStringExtra(EXTRA_VIDEO_FILE_AS_CAMERA) + "'");
|
|
|
| // Create connection client. Use DirectRTCClient if room name is an IP otherwise use the
|
| // standard WebSocketRTCClient.
|
| @@ -393,8 +439,8 @@ public class CallActivity extends Activity
|
|
|
| private void updateVideoView() {
|
| remoteRenderLayout.setPosition(REMOTE_X, REMOTE_Y, REMOTE_WIDTH, REMOTE_HEIGHT);
|
| - remoteRender.setScalingType(scalingType);
|
| - remoteRender.setMirror(false);
|
| + remoteRenderScreen.setScalingType(scalingType);
|
| + remoteRenderScreen.setMirror(false);
|
|
|
| if (iceConnected) {
|
| localRenderLayout.setPosition(
|
| @@ -408,7 +454,7 @@ public class CallActivity extends Activity
|
| localRender.setMirror(true);
|
|
|
| localRender.requestLayout();
|
| - remoteRender.requestLayout();
|
| + remoteRenderScreen.requestLayout();
|
| }
|
|
|
| private void startCall() {
|
| @@ -474,9 +520,13 @@ public class CallActivity extends Activity
|
| localRender.release();
|
| localRender = null;
|
| }
|
| - if (remoteRender != null) {
|
| - remoteRender.release();
|
| - remoteRender = null;
|
| + if (videoFileRenderer != null) {
|
| + videoFileRenderer.release();
|
| + videoFileRenderer = null;
|
| + }
|
| + if (remoteRenderScreen != null) {
|
| + remoteRenderScreen.release();
|
| + remoteRenderScreen = null;
|
| }
|
| if (audioManager != null) {
|
| audioManager.close();
|
| @@ -540,7 +590,7 @@ public class CallActivity extends Activity
|
| signalingParameters = params;
|
| logAndToast("Creating peer connection, delay=" + delta + "ms");
|
| peerConnectionClient.createPeerConnection(rootEglBase.getEglBaseContext(),
|
| - localRender, remoteRender, signalingParameters);
|
| + localRender, remoteRenders, signalingParameters);
|
|
|
| if (signalingParameters.initiator) {
|
| logAndToast("Creating OFFER...");
|
|
|