diff --git a/talk/examples/android/src/org/appspot/apprtc/AppRTCClient.java b/talk/examples/android/src/org/appspot/apprtc/AppRTCClient.java index fc34777d9..86460bc08 100644 --- a/talk/examples/android/src/org/appspot/apprtc/AppRTCClient.java +++ b/talk/examples/android/src/org/appspot/apprtc/AppRTCClient.java @@ -273,6 +273,7 @@ public class AppRTCClient { MediaConstraints pcConstraints = constraintsFromJSON( getVarValue(roomHtml, "pcConstraints", false)); + addDTLSConstraintIfMissing(pcConstraints); Log.d(TAG, "pcConstraints: " + pcConstraints); MediaConstraints videoConstraints = constraintsFromJSON( getAVConstraints("video", @@ -288,6 +289,26 @@ public class AppRTCClient { pcConstraints, videoConstraints, audioConstraints); } + // Mimic Chrome and set DtlsSrtpKeyAgreement to true if not set to false by + // the web-app. + private void addDTLSConstraintIfMissing( + MediaConstraints pcConstraints) { + for (MediaConstraints.KeyValuePair pair : pcConstraints.mandatory) { + if (pair.getKey().equals("DtlsSrtpKeyAgreement")) { + return; + } + } + for (MediaConstraints.KeyValuePair pair : pcConstraints.optional) { + if (pair.getKey().equals("DtlsSrtpKeyAgreement")) { + return; + } + } + // DTLS isn't being suppressed (e.g. for debug=loopback calls), so enable + // it by default. + pcConstraints.optional.add( + new MediaConstraints.KeyValuePair("DtlsSrtpKeyAgreement", "true")); + } + // Return the constraints specified for |type| of "audio" or "video" in // |mediaConstraintsString|. private String getAVConstraints( diff --git a/talk/examples/android/src/org/appspot/apprtc/AppRTCDemoActivity.java b/talk/examples/android/src/org/appspot/apprtc/AppRTCDemoActivity.java index 7d92a36f5..3cf05d80b 100644 --- a/talk/examples/android/src/org/appspot/apprtc/AppRTCDemoActivity.java +++ b/talk/examples/android/src/org/appspot/apprtc/AppRTCDemoActivity.java @@ -189,8 +189,6 @@ public class AppRTCDemoActivity extends Activity factory = new PeerConnectionFactory(); MediaConstraints pcConstraints = appRtcClient.pcConstraints(); - pcConstraints.mandatory.add( - new MediaConstraints.KeyValuePair("DtlsSrtpKeyAgreement", "true")); pcConstraints.optional.add( new MediaConstraints.KeyValuePair("RtpDataChannels", "true")); pc = factory.createPeerConnection(iceServers, pcConstraints, pcObserver); @@ -314,7 +312,7 @@ public class AppRTCDemoActivity extends Activity // Mangle SDP to prefer ISAC/16000 over any other audio codec. private String preferISAC(String sdpDescription) { - String[] lines = sdpDescription.split("\n"); + String[] lines = sdpDescription.split("\r\n"); int mLineIndex = -1; String isac16kRtpMap = null; Pattern isac16kPattern = @@ -347,16 +345,16 @@ public class AppRTCDemoActivity extends Activity newMLine.append(origMLineParts[origPartIndex++]).append(" "); newMLine.append(origMLineParts[origPartIndex++]).append(" "); newMLine.append(origMLineParts[origPartIndex++]).append(" "); - newMLine.append(isac16kRtpMap).append(" "); + newMLine.append(isac16kRtpMap); for (; origPartIndex < origMLineParts.length; ++origPartIndex) { if (!origMLineParts[origPartIndex].equals(isac16kRtpMap)) { - newMLine.append(origMLineParts[origPartIndex]).append(" "); + newMLine.append(" ").append(origMLineParts[origPartIndex]); } } lines[mLineIndex] = newMLine.toString(); StringBuilder newSdpDescription = new StringBuilder(); for (String line : lines) { - newSdpDescription.append(line).append("\n"); + newSdpDescription.append(line).append("\r\n"); } return newSdpDescription.toString(); }