Added Stereo url paramter to apprtc demo.

R=dutton@google.com

Review URL: https://webrtc-codereview.appspot.com/1418004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4013 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/samples/js/apprtc/apprtc.py b/samples/js/apprtc/apprtc.py
index bd609ce..e9e61c6 100644
--- a/samples/js/apprtc/apprtc.py
+++ b/samples/js/apprtc/apprtc.py
@@ -327,6 +327,10 @@
     if debug == 'loopback':
     # set compat to false as DTLS does not work for loopback.
       compat = 'false'
+    # set stereo to false by default
+    stereo = 'false'
+    if self.request.get('stereo'):
+      stereo = self.request.get('stereo')
 
 
     # token_timeout for channel creation, default 30min, max 2 days, min 3min.
@@ -390,7 +394,8 @@
                        'pc_constraints': json.dumps(pc_constraints),
                        'offer_constraints': json.dumps(offer_constraints),
                        'media_constraints': json.dumps(media_constraints),
-                       'turn_url': turn_url
+                       'turn_url': turn_url,
+                       'stereo': stereo
                       }
     if unittest:
       target_page = 'test/test_' + unittest + '.html'
diff --git a/samples/js/apprtc/index.html b/samples/js/apprtc/index.html
index e87bfd5..72a46da 100644
--- a/samples/js/apprtc/index.html
+++ b/samples/js/apprtc/index.html
@@ -125,6 +125,7 @@
                           'OfferToReceiveVideo':true }};

   var isVideoMuted = false;

   var isAudioMuted = false;

+  var stereo = false;

 

   function initialize() {

     console.log("Initializing; room={{ room_key }}.");

@@ -137,6 +138,7 @@
     // changing here.

     openChannel('{{ token }}');

     requestTurn('{{ turn_url }}');

+    stereo = {{ stereo }};

     doGetUserMedia();

   }

 

@@ -292,15 +294,19 @@
 

   function processSignalingMessage(message) {

     var msg = JSON.parse(message);

-

     if (msg.type === 'offer') {

       // Callee creates PeerConnection

       if (!initiator && !started)

         maybeStart();

-

+      // Set Opus in Stereo, if stereo enabled.

+      if (stereo)

+        msg.sdp = addStereo(msg.sdp);

       pc.setRemoteDescription(new RTCSessionDescription(msg));

       doAnswer();

     } else if (msg.type === 'answer' && started) {

+      // Set Opus in Stereo, if stereo enabled.

+      if (stereo)

+        msg.sdp = addStereo(msg.sdp);

       pc.setRemoteDescription(new RTCSessionDescription(msg));

     } else if (msg.type === 'candidate' && started) {

       var candidate = new RTCIceCandidate({sdpMLineIndex:msg.label,

@@ -535,6 +541,39 @@
     return sdp;

   }

 

+  // Set Opus in stereo if stereo is enabled.

+  function addStereo(sdp) {

+    var sdpLines = sdp.split('\r\n');

+

+    // Find opus payload.

+    for (var i = 0; i < sdpLines.length; i++) {

+      if (sdpLines[i].search('opus/48000') !== -1) {

+        var opusPayload = extractSdp(sdpLines[i], /:(\d+) opus\/48000/i);

+        break;

+      }

+    }

+

+    // Find the payload in fmtp line.

+    for (var i = 0; i < sdpLines.length; i++) {

+      if (sdpLines[i].search('a=fmtp') !== -1) {

+        var payload = extractSdp(sdpLines[i], /a=fmtp:(\d+)/ );

+        if (payload === opusPayload) {

+          var fmtpLineIndex = i;

+          break;

+        }

+      }

+    }

+    // No fmtp line found.

+    if (fmtpLineIndex === null)

+      return sdp;

+

+    // append stereo=1 to fmtp line.

+    sdpLines[fmtpLineIndex] = sdpLines[fmtpLineIndex].concat(' stereo=1');

+

+    sdp = sdpLines.join('\r\n');

+    return sdp;

+  }

+

   function extractSdp(sdpLine, pattern) {

     var result = sdpLine.match(pattern);

     return (result && result.length == 2)? result[1]: null;