<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
  <title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Jean-Marc Valin wrote:
<blockquote cite="mid1100147512.3968.2.camel@localhost" type="cite">
  <blockquote type="cite">
    <pre wrap="">I believe it is adaptive, but no, I haven't used it, because it's
coupled only to the speex codec.  We're working on a generic
application and codec-independent jitter buffer algorithm, for use in
asterisk and iaxclient (at least).  Some information is available at
<a class="moz-txt-link-freetext" href="http://www.voip-info.org/tiki-index.php?page=Asterisk%20new%">http://www.voip-info.org/tiki-index.php?page=Asterisk%20new%</a>
20jitterbuffer
    </pre>
  </blockquote>
  <pre wrap=""><!---->
Yes, this jitter buffer is adaptive. There are still some improvements
left to do (e.g. making sure packets are dropped/interpolated during
silent periods), but it's already working good. 

As for being Speex-dependent, I'd say yes and no. It calls speex_decode,
which is a Speex "virtual" function, so it would be rather simple to
wrap any other codec to make it work like that. If you're interested, I
can provide help doing that.
  </pre>
</blockquote>
OK, I'm actually about ready to start working on this now.<br>
<br>
If people in the speex community are interested in working with me on
this, I can probably start with the speex buffer, but I imagine there's
going to be a lot more work needed to get this where I'd like it to go.<br>
<br>
At the API level, It seems pretty easy to make the speex implementation
become speex-independent.&nbsp; Instead of having speex_jitter_get call any
particular speex_decode or speex_read_bits, etc functions, it could
instead just return the "thing" it got, and a flag.&nbsp; I.e. <br>
<br>
#define JB_OK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0<br>
#define JB_EMPTY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1<br>
#define JB_NOFRAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2<br>
#define JB_DROP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3<br>
<br>
JB_OK means here's the frame for the timestamp you asked for.<br>
JB_EMPTY&nbsp;&nbsp; means&nbsp; the jitterbuffer is empty, (we just started or
whatnot)<br>
JB_NOFRAME means the caller should interpolate a frame<br>
JB_DROP means we'd like you to drop this frame, and try calling us
again with the same timestamp.<br>
<br>
We could then have a second-level API wrapper around this for speex
which would then call speex_decode, etc, as necessary.<br>
<br>
Basically, I'd like the jitterbuffer to do all the history, length, etc
calculations, but not actually know anything about what it's managing.<br>
<br>
In asterisk and iaxclient (my project), the things I'd pass into the
jitterbuffer would be different kinds of structures.&nbsp; Some of these may
be audio frames, some might be control frames (DTMF, etc) that we want
synchronized with the audio stream, etc.&nbsp; In the future, we'd also want
to have video frames thrown in there, which would need to be
synchronized. <br>
<br>
So, I guess my questions (for Jean-Marc mostly, but others as well):<br>
<br>
1) Is it OK with you to add this extra abstraction layer to your jitter
buffer?<br>
2) What's the state of the current implementation: (does it work?)<br>
3) Is there a paper or something that you're using in your design that
I can read.&nbsp; <br>
4) Are people interested in collaborating and contributing to this.<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
</body>
</html>