shithub: opus

Download patch

ref: 57fa05633f61574db681b5067272d2b386f886ea
parent: c4fa0a57f759c283ceb8b7dd8b0d76a7de779aa6
author: Jean-Marc Valin <[email protected]>
date: Fri Nov 9 09:30:25 EST 2012

Better description of the the stereo signalling behaviour

--- a/doc/draft-spittka-payload-rtp-opus.xml
+++ b/doc/draft-spittka-payload-rtp-opus.xml
@@ -176,7 +176,7 @@
       </t>
 
       <t>
-        The voice mode allows to efficiently encode voice signals at lower bit
+        The voice mode allows efficient encoding of voice signals at lower bit
         rates while the audio mode is optimized for audio signals at medium and
         higher bitrates.
       </t>
@@ -183,8 +183,8 @@
 
       <t>
         The Opus speech and audio codec is highly scalable in terms of audio
-        bandwidth and bitrate and complexity. Further, Opus allows to
-        transmit stereo signals.
+        bandwidth, bitrate, and complexity. Further, Opus allows
+        transmitting stereo signals.
       </t>
 
       <section title='Network Bandwidth'>
@@ -325,7 +325,8 @@
           Opus allows for transmission of stereo audio signals. This operation
           is signaled in-band in the Opus payload and no special arrangement
           is required in the payload format. Any implementation of the Opus
-          decoder MUST be capable of receiving stereo signals.
+          decoder MUST be capable of receiving stereo signals, although it MAY
+	  decode those signals as mono.
         </t>
         <t>
           If a decoder can not take advantage of the benefits of a stereo signal
@@ -350,8 +351,8 @@
         therefore no padding is required. The payload MAY be padded by an
         integer number of octets according to <xref target="RFC3550"/>.</t>
 
-        <t>The marker bit (M) of the RTP header has no function in combination
-        with Opus and MAY be ignored.</t>
+        <t>The marker bit (M) of the RTP header is used in accordance with
+	Section 4.1 of <xref target="RFC3551"/>.</t>
 
         <t>The RTP payload type for Opus has not been assigned statically and is
         expected to be assigned dynamically.</t>
@@ -521,6 +522,18 @@
               <vspace blankLines='1'/>
             </t>
 
+            <t hangText="sprop-maxcodedaudiobandwidth:">
+              a hint about the maximum audio bandwidth that the sender is likely to produce.
+	      This is not a guarantee that the sender will never send any higher bandwidth
+	      (e.g. it could send a pre-recorded prompt that uses a higher bandwidth), but it
+	      indicates to the receiver that frequencies above this maximum can safely be discarded.
+	      This parameter is useful to avoid wasting receiver resources by operating the audio
+	      processing pipeline (e.g. AEC) at a higher rate than necessary.
+	      Possible values are nb, mb, wb, swb, fb. By default, the sender
+	      is assumed to have no limitations, i.e. fb.
+              <vspace blankLines='1'/>
+            </t>
+
             <t hangText="maxptime:"> the decoder's maximum length of time in
             milliseconds rounded up to the next full integer value represented
             by the media in a packet that can be
@@ -590,6 +603,19 @@
               is assumed (stereo=0).<vspace blankLines='1'/>
             </t>
 
+            <t hangText="sprop-stereo:">
+              specifies whether the sender is likely to produce stereo audio.
+              Possible values are 1 and 0 where 1 specifies that stereo signals are likely to
+	      be sent, and 0 speficies that the sender will likely only send mono.
+	      This is not a guarantee that the sender will never send stereo audio
+	      (e.g. it could send a pre-recorded prompt that uses stereo), but it
+	      indicates to the receiver that the received signal can be safely downmixed to mono.
+	      This parameter is useful to avoid wasting receiver resources by operating the audio
+	      processing pipeline (e.g. AEC) in stereo when not necessary.
+              If no value is specified, mono
+              is assumed (stereo=0).<vspace blankLines='1'/>
+            </t>
+
             <t hangText="cbr:">
               specifies if the decoder prefers the use of a constant bitrate versus
               variable bitrate. Possible values are 1 and 0 where 1 specifies constant
@@ -669,8 +695,8 @@
             <t>The media type ("audio") goes in SDP "m=" as the media name.</t>
 
             <t>The media subtype ("opus") goes in SDP "a=rtpmap" as the encoding
-            name. The RTP clock rate in "a=rtpmap" MUST be mapped to the required
-            media type parameter "rate".</t>
+            name. The RTP clock rate in "a=rtpmap" MUST be 48000 and the number of
+	    channels MUST be 2.</t>
 
             <t>The optional media type parameters "ptime" and "maxptime" are
             mapped to "a=ptime" and "a=maxptime" attributes, respectively, in the
@@ -690,7 +716,7 @@
             <artwork>
               <![CDATA[
     m=audio 54312 RTP/AVP 101
-    a=rtpmap:101 opus/48000
+    a=rtpmap:101 opus/48000/2
               ]]>
             </artwork>
           </figure>
@@ -704,7 +730,7 @@
           <artwork>
             <![CDATA[
     m=audio 54312 RTP/AVP 101
-    a=rtpmap:101 opus/48000
+    a=rtpmap:101 opus/48000/2
     a=fmtp:101 maxcodedaudiobandwidth=wb; maxaveragebitrate=20000;
     stereo=1; useinbandfec=1; usedtx=0
     a=ptime:40
@@ -731,8 +757,8 @@
             <figure>
               <artwork>
                 <![CDATA[
-        m=audio 54312 RTP/AVP 100
-        a=rtpmap:100 opus/48000
+    m=audio 54312 RTP/AVP 100
+    a=rtpmap:100 opus/48000/2
                 ]]>
               </artwork>
             </figure>
@@ -777,19 +803,19 @@
             in <xref target='bitrate_by_bandwidth'/> the session MUST be rejected.</t>
 
             <t>
-              The parameter "stereo" is a unidirectional receive-only
+              The "stereo" parameter is a unidirectional receive-only
               parameter.
             </t>
 
             <t>
-              The parameter "cbr" is a unidirectional receive-only
+              The "cbr" parameter is a unidirectional receive-only
               parameter.
             </t>
 
-            <t>The parameter "useinbandfec" is a unidirectional receive-only
+            <t>The "useinbandfec" parameter is a unidirectional receive-only
             parameter.</t>
 
-            <t>The parameter "usedtx" is a unidirectional receive-only
+            <t>The "usedtx" parameter is a unidirectional receive-only
             parameter.</t>
 
             <t>Any unknown parameter in an offer MUST be ignored by the receiver