diff options
author | fischman@webrtc.org <fischman@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2014-02-13 03:56:14 +0000 |
---|---|---|
committer | fischman@webrtc.org <fischman@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2014-02-13 03:56:14 +0000 |
commit | b0ffe7003e63b7283f3897a919aa8d2905d7a313 (patch) | |
tree | 9bc403715b80e1b09edaa14c9f1daba438b8e1f8 /examples/android/src/org/appspot | |
parent | ac981114cbd52dcfa16000ca08c0d40c775bc92d (diff) | |
download | talk-b0ffe7003e63b7283f3897a919aa8d2905d7a313.tar.gz |
PeerConnection(java): use MediaCodec for HW-accelerated video encode where available.
Still disabled by default until https://code.google.com/p/webrtc/issues/detail?id=2899 is resolved.
Also (because I needed them during development):
- make AppRTCDemo "debuggable" for extra JNI checks
- honor audio constraints served by apprtc.appspot.com
- don't "restart" video when it hasn't been stopped (affects running with the
screen off)
BUG=2575
R=noahric@google.com
Review URL: https://webrtc-codereview.appspot.com/8269004
git-svn-id: http://webrtc.googlecode.com/svn/trunk/talk@5539 4adac7df-926f-26a2-2b94-8c16560cd09d
Diffstat (limited to 'examples/android/src/org/appspot')
-rw-r--r-- | examples/android/src/org/appspot/apprtc/AppRTCClient.java | 36 | ||||
-rw-r--r-- | examples/android/src/org/appspot/apprtc/AppRTCDemoActivity.java | 8 |
2 files changed, 30 insertions, 14 deletions
diff --git a/examples/android/src/org/appspot/apprtc/AppRTCClient.java b/examples/android/src/org/appspot/apprtc/AppRTCClient.java index 3d369e0..2a4cd60 100644 --- a/examples/android/src/org/appspot/apprtc/AppRTCClient.java +++ b/examples/android/src/org/appspot/apprtc/AppRTCClient.java @@ -131,6 +131,10 @@ public class AppRTCClient { return appRTCSignalingParameters.videoConstraints; } + public MediaConstraints audioConstraints() { + return appRTCSignalingParameters.audioConstraints; + } + // Struct holding the signaling parameters of an AppRTC room. private class AppRTCSignalingParameters { public final List<PeerConnection.IceServer> iceServers; @@ -140,12 +144,13 @@ public class AppRTCClient { public final boolean initiator; public final MediaConstraints pcConstraints; public final MediaConstraints videoConstraints; + public final MediaConstraints audioConstraints; public AppRTCSignalingParameters( List<PeerConnection.IceServer> iceServers, String gaeBaseHref, String channelToken, String postMessageUrl, boolean initiator, MediaConstraints pcConstraints, - MediaConstraints videoConstraints) { + MediaConstraints videoConstraints, MediaConstraints audioConstraints) { this.iceServers = iceServers; this.gaeBaseHref = gaeBaseHref; this.channelToken = channelToken; @@ -153,6 +158,7 @@ public class AppRTCClient { this.initiator = initiator; this.pcConstraints = pcConstraints; this.videoConstraints = videoConstraints; + this.audioConstraints = audioConstraints; } } @@ -268,34 +274,40 @@ public class AppRTCClient { MediaConstraints pcConstraints = constraintsFromJSON( getVarValue(roomHtml, "pcConstraints", false)); Log.d(TAG, "pcConstraints: " + pcConstraints); - MediaConstraints videoConstraints = constraintsFromJSON( - getVideoConstraints( + getAVConstraints("video", getVarValue(roomHtml, "mediaConstraints", false))); - Log.d(TAG, "videoConstraints: " + videoConstraints); + MediaConstraints audioConstraints = constraintsFromJSON( + getAVConstraints("audio", + getVarValue(roomHtml, "mediaConstraints", false))); + Log.d(TAG, "audioConstraints: " + audioConstraints); return new AppRTCSignalingParameters( iceServers, gaeBaseHref, token, postMessageUrl, initiator, - pcConstraints, videoConstraints); + pcConstraints, videoConstraints, audioConstraints); } - private String getVideoConstraints(String mediaConstraintsString) { + // Return the constraints specified for |type| of "audio" or "video" in + // |mediaConstraintsString|. + private String getAVConstraints( + String type, String mediaConstraintsString) { try { JSONObject json = new JSONObject(mediaConstraintsString); // 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. + if (!json.has(type) || !json.optBoolean(type, true)) { + // Case 1: "audio"/"video" is not present, or is an explicit "false" + // boolean. return null; } - if (json.optBoolean("video", false)) { - // Case 2: "video" is an explicit "true" boolean. + if (json.optBoolean(type, false)) { + // Case 2: "audio"/"video" is an explicit "true" boolean. return "{\"mandatory\": {}, \"optional\": []}"; } - // Case 3: "video" is an object. - return json.getJSONObject("video").toString(); + // Case 3: "audio"/"video" is an object. + return json.getJSONObject(type).toString(); } catch (JSONException e) { throw new RuntimeException(e); } diff --git a/examples/android/src/org/appspot/apprtc/AppRTCDemoActivity.java b/examples/android/src/org/appspot/apprtc/AppRTCDemoActivity.java index e872355..1754994 100644 --- a/examples/android/src/org/appspot/apprtc/AppRTCDemoActivity.java +++ b/examples/android/src/org/appspot/apprtc/AppRTCDemoActivity.java @@ -75,6 +75,7 @@ public class AppRTCDemoActivity extends Activity private static final String TAG = "AppRTCDemoActivity"; private PeerConnectionFactory factory; private VideoSource videoSource; + private boolean videoSourceStopped; private PeerConnection pc; private final PCObserver pcObserver = new PCObserver(); private final SDPObserver sdpObserver = new SDPObserver(); @@ -159,6 +160,7 @@ public class AppRTCDemoActivity extends Activity vsv.onPause(); if (videoSource != null) { videoSource.stop(); + videoSourceStopped = true; } } @@ -166,7 +168,7 @@ public class AppRTCDemoActivity extends Activity public void onResume() { super.onResume(); vsv.onResume(); - if (videoSource != null) { + if (videoSource != null && videoSourceStopped) { videoSource.restart(); } } @@ -239,7 +241,9 @@ public class AppRTCDemoActivity extends Activity vsv, VideoStreamsView.Endpoint.LOCAL))); lMS.addTrack(videoTrack); } - lMS.addTrack(factory.createAudioTrack("ARDAMSa0")); + if (appRtcClient.audioConstraints() != null) { + lMS.addTrack(factory.createAudioTrack("ARDAMSa0")); + } pc.addStream(lMS, new MediaConstraints()); } logAndToast("Waiting for ICE candidates..."); |