<div dir="ltr"><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, May 29, 2013 at 7:18 AM, Lorenzo Miniero <span dir="ltr">&lt;<a href="mailto:lminiero@gmail.com" target="_blank">lminiero@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">Hi James,<div><br></div><div>I&#39;ve added some comments inline.<br>

<div class="gmail_extra"><br><br><div class="gmail_quote"><div class="im">2013/5/28 James Mortensen <span dir="ltr">&lt;<a href="mailto:james.mortensen@voicecurve.com" target="_blank">james.mortensen@voicecurve.com</a>&gt;</span><br>


<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">Hi Lorenzo,<div><br></div><div>Not trying to hijack the thread, but Andrea appears to be away for the next few days, and I&#39;m experiencing the same exact problem with the audio issues and want to help move us both forward.  So I can answer the questions below to get you more data. Please see below:<br>




<div class="gmail_extra"><div><br><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">




<div><span style="color:rgb(34,34,34)">[May 28 11:17:40] DEBUG[16613][C-00000000] channel.c: Scheduling timer at (50 requested / 50 actual) timer tic</span><br></div><div><br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>
That said, I&#39;m not sure what the cause of the issue could be. What ptime are the two peers using?<br>
What is the transcoding path<br>
as displayed on the Asterisk console? Does the same happen in other scenarios as well, e.g., the browser interacting with another<br>
browser, or a softphone using a different codec (e.g., speex) at different rates (e.g., 16kHz vs 8kHz)?<br>
</blockquote>
<br></div>
now I&#39;m out of office I will be able to provide this info<br>
only on Thursaday.<div><br></div></blockquote><div><br></div></div></div><div>I assume the ptime is this maxptime value we see in the SDP from the Chrome to Asterisk call leg:</div><div><br></div><div>a=rtpmap:111 opus/48000/2</div>




<div>a=maxptime:60</div><div>a=fmtp:111 maxplaybackrate=16000; stereo=0; sprop-stereo=0; useinbandfec=0</div><div class="gmail_extra"><br></div><div class="gmail_extra">If that&#39;s not the ptime, please let me know where I might find that and I&#39;ll get it for you.</div>




<div class="gmail_extra"><br></div></div></div></div></blockquote><div><br></div></div><div>By ptime I mean how many milliseconds of audio are contained in a single RTP packet. Usually this is 20ms for most codecs but that&#39;s not always the case: Opus, for instance, supports a wide range of different ones, which is why in the SDP we report that the maximum ptime that is supported in the implementation is 60ms.</div>


<div><br></div><div>The Asterisk codec encoding/decoding infrastructure should already transparently take care of this, considering that when encoding and decoding you always know how many samples are involved, but I didn&#39;t test this intensively, and so a difference in how the two &quot;legs&quot; do this (e.g., 20 ms for the Opus leg, 10 ms for the G.729 leg) may in some cases cause hiccups.</div>

<div><div class="h5">
<div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div><div class="gmail_extra">

<div class="gmail_extra">
</div><div class="gmail_extra">And here you can see the call leg from the Chrome to Asterisk portion of the call is opus, with the other leg using ulaw.  I&#39;ve tried with g729 on the Bandwidth to Asterisk leg and still hear the same underwater-like call audio that Andrea describes.</div>




<div class="gmail_extra"><br></div><div class="gmail_extra">ip-10-188-135-200*CLI&gt; sip show channels</div><div class="gmail_extra">Peer             User/ANR         Call ID          Format           Hold     Last Message    Expiry     Peer      </div>




<div class="gmail_extra">54.X.X.X    1000            55srb9arjvh7rnv  (opus)           No       Rx: ACK                    ws-Opensip</div><div class="gmail_extra">67.231.X.X     +15036XXXXXX     48c000dd54ba525  (ulaw)           No       Tx: ACK                    BANDWIDTH </div>




<div class="gmail_extra">2 active SIP dialogs</div><div class="gmail_extra">ip-10-188-135-200*CLI&gt; </div><div><br></div><div><br></div><div>Also, here is the output from opus set debug huge:</div><div><br>
</div>
<div><div>[Opus] [Encoder #9 (8000)]   &gt;&gt; Got 960 samples, 18 bytes</div><div>[Opus] [Decoder #12 (8000)] 960 samples, 72 bytes</div><div>[Opus] [Decoder #12 (8000)]   &gt;&gt; Got 160 samples, 320 bytes</div>

<div>[Opus] [Encoder #9 (8000)] 160 samples, 320 bytes</div><div>[Opus] [Encoder #9 (8000)]   &gt;&gt; Got 960 samples, 20 bytes</div><div>[Opus] [Decoder #12 (8000)] 960 samples, 77 bytes</div><div>[Opus] [Decoder #12 (8000)]   &gt;&gt; Got 160 samples, 320 bytes</div>




<div>[Opus] [Encoder #9 (8000)] 160 samples, 320 bytes</div><div>[Opus] [Encoder #9 (8000)]   &gt;&gt; Got 960 samples, 19 bytes</div><div>[Opus] [Decoder #12 (8000)] 960 samples, 67 bytes</div><div>[Opus] [Decoder #12 (8000)]   &gt;&gt; Got 160 samples, 320 bytes</div>




<div>[Opus] [Encoder #9 (8000)] 160 samples, 320 bytes</div><div>[Opus] [Encoder #9 (8000)]   &gt;&gt; Got 960 samples, 17 bytes</div><div>[Opus] [Decoder #12 (8000)] 960 samples, 71 bytes</div><div>[Opus] [Decoder #12 (8000)]   &gt;&gt; Got 160 samples, 320 bytes</div>




<div>[Opus] [Encoder #9 (8000)] 160 samples, 320 bytes</div><div>[Opus] [Encoder #9 (8000)]   &gt;&gt; Got 960 samples, 21 bytes</div><div>[Opus] [Decoder #12 (8000)] 960 samples, 72 bytes</div><div>[Opus] [Decoder #12 (8000)]   &gt;&gt; Got 160 samples, 320 bytes</div>




<div>[Opus] [Encoder #9 (8000)] 160 samples, 320 bytes</div><div>[Opus] [Encoder #9 (8000)]   &gt;&gt; Got 960 samples, 21 bytes</div><div>[Opus] [Decoder #12 (8000)] 960 samples, 72 bytes</div><div>[Opus] [Decoder #12 (8000)]   &gt;&gt; Got 160 samples, 320 bytes</div>




<div>[Opus] [Encoder #9 (8000)] 160 samples, 320 bytes</div><div>[Opus] [Encoder #9 (8000)]   &gt;&gt; Got 960 samples, 23 bytes</div><div>[Opus] [Decoder #12 (8000)] 960 samples, 69 bytes</div><div>[Opus] [Decoder #12 (8000)]   &gt;&gt; Got 160 samples, 320 bytes</div>




<div>[Opus] [Encoder #9 (8000)] 160 samples, 320 bytes</div><div>[Opus] [Encoder #9 (8000)]   &gt;&gt; Got 960 samples, 19 bytes</div><div>[Opus] [Decoder #12 (8000)] 960 samples, 72 bytes</div><div>[Opus] [Decoder #12 (8000)]   &gt;&gt; Got 160 samples, 320 bytes</div>




<div>[Opus] [Encoder #9 (8000)] 160 samples, 320 bytes</div><div>[Opus] [Encoder #9 (8000)]   &gt;&gt; Got 960 samples, 21 bytes</div><div>[Opus] [Decoder #12 (8000)] 960 samples, 74 bytes</div><div>[Opus] [Decoder #12 (8000)]   &gt;&gt; Got 160 samples, 320 bytes</div>




<div>[Opus] [Encoder #9 (8000)] 160 samples, 320 bytes</div><div>[Opus] [Encoder #9 (8000)]   &gt;&gt; Got 960 samples, 23 bytes</div><div>[Opus] [Decoder #12 (8000)] 960 samples, 74 bytes</div><div>[Opus] [Decoder #12 (8000)]   &gt;&gt; Got 160 samples, 320 bytes</div>




<div>[Opus] [Encoder #9 (8000)] 160 samples, 320 bytes</div><div>[Opus] [Encoder #9 (8000)]   &gt;&gt; Got 960 samples, 21 bytes</div><div>[Opus] [Decoder #12 (8000)] 960 samples, 75 bytes</div><div>[Opus] [Decoder #12 (8000)]   &gt;&gt; Got 160 samples, 320 bytes</div>




<div>[Opus] [Encoder #9 (8000)] 160 samples, 320 bytes</div><div>[Opus] [Encoder #9 (8000)]   &gt;&gt; Got 960 samples, 25 bytes</div></div><div class="gmail_extra"><br></div></div></div></div></blockquote><div><br></div>


</div></div><div>The &quot;huge&quot; debug doesn&#39;t seem to report anything wrong: the encoder gets 160 samples in 320 bytes (8kHz slin) and encodes them correctly, and at the same time the decoder gets 960 samples (as in Opus the reference rate is always 48kHz) and decodes them to 160 samples/320 bytes (8kHz slin). So apparently no encoding/decoding error is reported from the library.</div>


<div><br></div><div>What about the transcoding path in Asterisk, though? e.g.</div><div><br></div><div>     core show translation paths opus</div><div><br></div><div>should tell you how Asterisk is going to take care of the transcoding between Opus and different codecs.</div>

<div class="im">
<div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div><div class="gmail_extra">

<div class="gmail_extra">
</div>Unlike Andrea, who applied the patch to 11.3.0, I successfully applied the patch to Asterisk 11.4.0, but the issues we&#39;re both experiencing appear to be the same. If that&#39;s not the case, I can start a new thread.  Hope this helps! :)<span><font color="#888888"><br clear="all">




<div><br></div></font></span></div></div></div></blockquote><div><br></div></div><div>I&#39;m not sure how much those two versions of Asterisk differ from each other, so I&#39;m afraid I cannot answer you with respect to that: anyhow, I guess that there&#39;s no need to open a new thread. But just out of curiosity, did you try to replicate the same scenarios with Asterisk 11.1.2 as well? Just to understand whether or not I can focus on the latest changes to investigate what&#39;s wrong in the current Opus implementation.</div>

<span class=""><font color="#888888">
<div> </div><div>Lorenzo</div></font></span><div class="im"><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<div dir="ltr">
<div><div class="gmail_extra"><span><font color="#888888"><div></div>-- <br>James Mortensen<br>Project Manager, VoiceCurve, Inc.<br><a href="tel:866-707-4590" value="+18667074590" target="_blank">866-707-4590</a><br>
<a href="mailto:james.mortensen@voicecurve.com" target="_blank">james.mortensen@voicecurve.com</a><br>
</font></span></div></div></div>
</blockquote></div></div><br></div></div></div>
</blockquote></div><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div>Hi Lorenzo,<div><br></div><div>Here is the result of the core show translation paths opus:</div>

<div><br></div><div><div>ip-10-188-135-200*CLI&gt; core show translation opus path</div><div>Usage: &#39;core show translation&#39; can be used in two ways.</div><div>       1. &#39;core show translation [recalc [&lt;recalc seconds&gt;]]</div>

<div>          Displays known codec translators and the cost associated</div><div>          with each conversion.  If the argument &#39;recalc&#39; is supplied along</div><div>          with optional number of seconds to test a new test will be performed</div>

<div>          as the chart is being displayed.</div><div>       2. &#39;core show translation paths [codec]&#39;</div><div>           This will display all the translation paths associated with a codec</div><div>ip-10-188-135-200*CLI&gt; core show translation paths opus</div>

<div>--- Translation paths SRC Codec &quot;opus&quot; sample rate 8000 ---</div><div><span class="" style="white-space:pre">        </span>opus       To g723      : No Translation Path                                         </div>

<div><span class="" style="white-space:pre">        </span>opus       To gsm       : (opus)-&gt;(slin)-&gt;(gsm)                                       </div><div><span class="" style="white-space:pre">        </span>opus       To ulaw      : (opus)-&gt;(slin)-&gt;(ulaw)                                      </div>

<div><span class="" style="white-space:pre">        </span>opus       To alaw      : (opus)-&gt;(slin)-&gt;(alaw)                                      </div><div><span class="" style="white-space:pre">        </span>opus       To g726      : (opus)-&gt;(slin)-&gt;(g726)                                      </div>

<div><span class="" style="white-space:pre">        </span>opus       To adpcm     : (opus)-&gt;(slin)-&gt;(adpcm)                                     </div><div><span class="" style="white-space:pre">        </span>opus       To slin      : (opus)-&gt;(slin)                                              </div>

<div><span class="" style="white-space:pre">        </span>opus       To lpc10     : (opus)-&gt;(slin)-&gt;(lpc10)                                     </div><div><span class="" style="white-space:pre">        </span>opus       To g729      : (opus)-&gt;(slin)-&gt;(g729)                                      </div>

<div><span class="" style="white-space:pre">        </span>opus       To speex     : No Translation Path                                         </div><div><span class="" style="white-space:pre">        </span>opus       To speex16   : No Translation Path                                         </div>

<div><span class="" style="white-space:pre">        </span>opus       To ilbc      : (opus)-&gt;(slin)-&gt;(ilbc)                                      </div><div><span class="" style="white-space:pre">        </span>opus       To g726aal2  : (opus)-&gt;(slin)-&gt;(g726aal2)                                  </div>

<div><span class="" style="white-space:pre">        </span>opus       To g722      : (opus)-&gt;(slin16)-&gt;(g722)                                    </div><div><span class="" style="white-space:pre">        </span>opus       To slin16    : (opus)-&gt;(slin16)                                            </div>

<div><span class="" style="white-space:pre">        </span>opus       To siren7    : No Translation Path                                         </div><div><span class="" style="white-space:pre">        </span>opus       To siren14   : No Translation Path                                         </div>

<div><span class="" style="white-space:pre">        </span>opus       To testlaw   : (opus)-&gt;(slin)-&gt;(testlaw)                                   </div><div><span class="" style="white-space:pre">        </span>opus       To g719      : No Translation Path                                         </div>

<div><span class="" style="white-space:pre">        </span>opus       To speex32   : No Translation Path                                         </div><div><span class="" style="white-space:pre">        </span>opus       To slin12    : (opus)-&gt;(slin12)                                            </div>

<div><span class="" style="white-space:pre">        </span>opus       To slin24    : (opus)-&gt;(slin24)                                            </div><div><span class="" style="white-space:pre">        </span>opus       To slin32    : (opus)-&gt;(slin)-&gt;(slin32)                                    </div>

<div><span class="" style="white-space:pre">        </span>opus       To slin44    : (opus)-&gt;(slin)-&gt;(slin44)                                    </div><div><span class="" style="white-space:pre">        </span>opus       To slin48    : (opus)-&gt;(slin48)                                            </div>

<div><span class="" style="white-space:pre">        </span>opus       To slin96    : (opus)-&gt;(slin)-&gt;(slin96)                                    </div><div><span class="" style="white-space:pre">        </span>opus       To slin192   : (opus)-&gt;(slin)-&gt;(slin192)                                   </div>

<div><span class="" style="white-space:pre">        </span>opus       To silk8     : No Translation Path                                         </div><div><span class="" style="white-space:pre">        </span>opus       To silk12    : No Translation Path                                         </div>

<div><span class="" style="white-space:pre">        </span>opus       To silk16    : No Translation Path                                         </div><div><span class="" style="white-space:pre">        </span>opus       To silk24    : No Translation Path                                         </div>

<div>ip-10-188-135-200*CLI&gt; </div></div><div><br></div><div><br></div><div style>There appears to be paths for both ulaw as well as g729.</div><div style><br></div><div style>I did try the patch on Asterisk 11.1.2, but shifted gears when I realized the crypto headers are buggy as per <a href="https://issues.asterisk.org/jira/browse/ASTERISK-20849">https://issues.asterisk.org/jira/browse/ASTERISK-20849</a>.  However, I&#39;ll apply the patch to fix that issue and then try a call on Asterisk 11.1.2.</div>

<div style><br></div><div style>I&#39;ll follow up with additional details when I know more.  Again, thank you for your time and your work on this. We&#39;re really stoked about getting opus working in Asterisk! :)</div>
<br clear="all">
<div><br></div>-- <br>James Mortensen<br>Project Manager, VoiceCurve, Inc.<br>866-707-4590<br><a href="mailto:james.mortensen@voicecurve.com" target="_blank">james.mortensen@voicecurve.com</a><br>
</div></div>