From 44461347574bab8ce58b39b0599f73a7765fa45f Mon Sep 17 00:00:00 2001 From: "fischman@webrtc.org" Date: Thu, 3 Oct 2013 22:34:10 +0000 Subject: [PATCH] AppRTCDemo(android): support boolean value for MediaStreamConstraints.{audio,video}. Previously it was assumed that these values were always MediaTrackConstraints but http://dev.w3.org/2011/webrtc/editor/getusermedia.html#idl-def-MediaStreamConstraints allows them to be boolean, too. R=andrew@webrtc.org Review URL: https://webrtc-codereview.appspot.com/2352004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@4918 4adac7df-926f-26a2-2b94-8c16560cd09d --- .../src/org/appspot/apprtc/AppRTCClient.java | 20 +++++++++++++++---- .../appspot/apprtc/AppRTCDemoActivity.java | 17 +++++++++------- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/talk/examples/android/src/org/appspot/apprtc/AppRTCClient.java b/talk/examples/android/src/org/appspot/apprtc/AppRTCClient.java index 6042dab93..3d369e090 100644 --- a/talk/examples/android/src/org/appspot/apprtc/AppRTCClient.java +++ b/talk/examples/android/src/org/appspot/apprtc/AppRTCClient.java @@ -272,6 +272,7 @@ public class AppRTCClient { MediaConstraints videoConstraints = constraintsFromJSON( getVideoConstraints( getVarValue(roomHtml, "mediaConstraints", false))); + Log.d(TAG, "videoConstraints: " + videoConstraints); return new AppRTCSignalingParameters( @@ -282,17 +283,28 @@ public class AppRTCClient { private String getVideoConstraints(String mediaConstraintsString) { try { JSONObject json = new JSONObject(mediaConstraintsString); - JSONObject videoJson = json.optJSONObject("video"); - if (videoJson == null) { - return ""; + // Tricksy handling of values that are allowed to be (boolean or + // MediaTrackConstraints) by the getUserMedia() spec. There are three + // cases below. + if (!json.has("video") || !json.optBoolean("video", true)) { + // Case 1: "video" is not present, or is an explicit "false" boolean. + return null; } - return videoJson.toString(); + if (json.optBoolean("video", false)) { + // Case 2: "video" is an explicit "true" boolean. + return "{\"mandatory\": {}, \"optional\": []}"; + } + // Case 3: "video" is an object. + return json.getJSONObject("video").toString(); } catch (JSONException e) { throw new RuntimeException(e); } } private MediaConstraints constraintsFromJSON(String jsonString) { + if (jsonString == null) { + return null; + } try { MediaConstraints constraints = new MediaConstraints(); JSONObject json = new JSONObject(jsonString); diff --git a/talk/examples/android/src/org/appspot/apprtc/AppRTCDemoActivity.java b/talk/examples/android/src/org/appspot/apprtc/AppRTCDemoActivity.java index 06192bc49..81c5ba925 100644 --- a/talk/examples/android/src/org/appspot/apprtc/AppRTCDemoActivity.java +++ b/talk/examples/android/src/org/appspot/apprtc/AppRTCDemoActivity.java @@ -214,14 +214,17 @@ public class AppRTCDemoActivity extends Activity { logAndToast("Creating local video source..."); - VideoCapturer capturer = getVideoCapturer(); - videoSource = factory.createVideoSource( - capturer, appRtcClient.videoConstraints()); MediaStream lMS = factory.createLocalMediaStream("ARDAMS"); - VideoTrack videoTrack = factory.createVideoTrack("ARDAMSv0", videoSource); - videoTrack.addRenderer(new VideoRenderer(new VideoCallbacks( - vsv, VideoStreamsView.Endpoint.LOCAL))); - lMS.addTrack(videoTrack); + if (appRtcClient.videoConstraints() != null) { + VideoCapturer capturer = getVideoCapturer(); + videoSource = factory.createVideoSource( + capturer, appRtcClient.videoConstraints()); + VideoTrack videoTrack = + factory.createVideoTrack("ARDAMSv0", videoSource); + videoTrack.addRenderer(new VideoRenderer(new VideoCallbacks( + vsv, VideoStreamsView.Endpoint.LOCAL))); + lMS.addTrack(videoTrack); + } lMS.addTrack(factory.createAudioTrack("ARDAMSa0")); pc.addStream(lMS, new MediaConstraints()); }