Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(776)

Unified Diff: webrtc/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java

Issue 2273573003: Support for video file instead of camera and output video out to file (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Added . to comments Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java
diff --git a/webrtc/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java b/webrtc/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java
index 1d049f91d4ea8316a9c7c065d2258e8b109f3d9a..6ab96af7ccf287143d27f220e7acbefb7f05cd06 100644
--- a/webrtc/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java
+++ b/webrtc/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java
@@ -41,6 +41,9 @@ import org.webrtc.StatsObserver;
import org.webrtc.StatsReport;
import org.webrtc.VideoCapturer;
import org.webrtc.VideoRenderer;
+import org.webrtc.VideoCapturerAndroid;
+import org.webrtc.CameraVideoCapturer;
+import org.webrtc.FileVideoCapturer;
import org.webrtc.VideoSource;
import org.webrtc.VideoTrack;
import org.webrtc.voiceengine.WebRtcAudioManager;
@@ -48,8 +51,10 @@ import org.webrtc.voiceengine.WebRtcAudioUtils;
import java.io.File;
import java.io.IOException;
+import java.util.Collections;
import java.util.EnumSet;
import java.util.LinkedList;
+import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.Executors;
@@ -108,7 +113,7 @@ public class PeerConnectionClient {
private boolean isError;
private Timer statsTimer;
private VideoRenderer.Callbacks localRender;
- private VideoRenderer.Callbacks remoteRender;
+ private List<VideoRenderer.Callbacks> remoteRenders;
private SignalingParameters signalingParameters;
private MediaConstraints pcConstraints;
private int videoWidth;
@@ -127,7 +132,7 @@ public class PeerConnectionClient {
private SessionDescription localSdp; // either offer or answer SDP
private MediaStream mediaStream;
private int numberOfCameras;
- private CameraVideoCapturer videoCapturer;
+ private VideoCapturer videoCapturer;
// enableVideo is set to true if video should be rendered and sent.
private boolean renderVideo;
private VideoTrack localVideoTrack;
@@ -161,6 +166,7 @@ public class PeerConnectionClient {
public final boolean disableBuiltInAGC;
public final boolean disableBuiltInNS;
public final boolean enableLevelControl;
+ public final String videoFileAsCamera;
magjed_webrtc 2016/09/26 11:40:02 This doesn't really scale. We now have useCamera2,
kjellander_webrtc 2016/09/27 11:30:21 I think this can wait. This CL is adding new funct
public PeerConnectionParameters(
boolean videoCallEnabled, boolean loopback, boolean tracing, boolean useCamera2,
@@ -169,7 +175,9 @@ public class PeerConnectionClient {
boolean captureToTexture, int audioStartBitrate, String audioCodec,
boolean noAudioProcessing, boolean aecDump, boolean useOpenSLES,
boolean disableBuiltInAEC, boolean disableBuiltInAGC, boolean disableBuiltInNS,
- boolean enableLevelControl) {
+ boolean enableLevelControl,
+ String videoFileAsCamera) {
+
this.videoCallEnabled = videoCallEnabled;
this.useCamera2 = useCamera2;
this.loopback = loopback;
@@ -190,6 +198,7 @@ public class PeerConnectionClient {
this.disableBuiltInAGC = disableBuiltInAGC;
this.disableBuiltInNS = disableBuiltInNS;
this.enableLevelControl = enableLevelControl;
+ this.videoFileAsCamera = videoFileAsCamera;
}
}
@@ -294,12 +303,23 @@ public class PeerConnectionClient {
final VideoRenderer.Callbacks localRender,
final VideoRenderer.Callbacks remoteRender,
final SignalingParameters signalingParameters) {
+ createPeerConnection(
+ renderEGLContext,
+ localRender,
+ Collections.singletonList(remoteRender),
+ signalingParameters);
+ }
+ public void createPeerConnection(
+ final EglBase.Context renderEGLContext,
+ final VideoRenderer.Callbacks localRender,
+ final List<VideoRenderer.Callbacks> remoteRenders,
+ final SignalingParameters signalingParameters) {
if (peerConnectionParameters == null) {
Log.e(TAG, "Creating peer connection without initializing factory.");
return;
}
this.localRender = localRender;
- this.remoteRender = remoteRender;
+ this.remoteRenders = remoteRenders;
this.signalingParameters = signalingParameters;
executor.execute(new Runnable() {
@Override
@@ -544,7 +564,16 @@ public class PeerConnectionClient {
mediaStream = factory.createLocalMediaStream("ARDAMS");
if (videoCallEnabled) {
- if (peerConnectionParameters.useCamera2) {
+ if (peerConnectionParameters.videoFileAsCamera != null) {
+ videoCapturer = FileVideoCapturer.create(
+ peerConnectionParameters.videoFileAsCamera);
+
+ if (videoCapturer == null) {
+ reportError("Failed to open video file for emulated camera");
+ return;
+ }
+ }
+ else if (peerConnectionParameters.useCamera2) {
if (!peerConnectionParameters.captureToTexture) {
reportError(context.getString(R.string.camera2_texture_only_error));
return;
@@ -556,7 +585,6 @@ public class PeerConnectionClient {
Logging.d(TAG, "Creating capturer using camera1 API.");
createCapturer(new Camera1Enumerator(peerConnectionParameters.captureToTexture));
}
-
if (videoCapturer == null) {
reportError("Failed to open camera");
return;
@@ -1030,7 +1058,10 @@ public class PeerConnectionClient {
return; // No video is sent or only one camera is available or error happened.
}
Log.d(TAG, "Switch camera");
- videoCapturer.switchCamera(null);
+ if (videoCapturer instanceof CameraVideoCapturer) {
magjed_webrtc 2016/09/26 11:40:02 Maybe you should log when this is not the case. Ma
+ CameraVideoCapturer cameraVideoCapturer = (CameraVideoCapturer)videoCapturer;
+ cameraVideoCapturer.switchCamera(null);
+ }
}
public void switchCamera() {
@@ -1133,7 +1164,9 @@ public class PeerConnectionClient {
if (stream.videoTracks.size() == 1) {
remoteVideoTrack = stream.videoTracks.get(0);
remoteVideoTrack.setEnabled(renderVideo);
- remoteVideoTrack.addRenderer(new VideoRenderer(remoteRender));
+ for (VideoRenderer.Callbacks remoteRender : remoteRenders) {
+ remoteVideoTrack.addRenderer(new VideoRenderer(remoteRender));
+ }
}
}
});

Powered by Google App Engine
This is Rietveld 408576698