asterisk-dev  

Re: [Asterisk-Dev] IAX2 trunk really should send timestamps as part of iax2_meta_trunk_entry..

Steve Kann
Sun, 06 Feb 2005 07:01:00 -0800


On Feb 6, 2005, at 1:11 AM, Steve Underwood wrote:

[EMAIL PROTECTED] wrote:

On Sun, 6 Feb 2005, Steve Underwood wrote:


Think plesiochronous :-) [if you don't know what that means, look it up]. T1s and E1s come from the days of plesiochronous telecoms (PDH - the plesiochronous digital heirarchy). SDH - the synchronous digital heirarchy - replaced that, and the complexity of multiplexing and demultiplexing dropped dramatically.

What goes into an IAX trunk packet is a bunch of plesiochronous streams. They each have their own timing. A common timestamp for the whole group doesn't cut it.



Just before Astrican I tried to convince Mark that the timestamps had to be there, but couldn't. Perhaps someone else will be more successful.

Steve

OK. Think more than plesiochronous. Think plesiochronous digital heirarchy :-) Because the streams are plesiochronous (unless one of the sources has a really screwy clock), you can just encode how much ahead or behind the group an individual stream is, which is a tiny value. That is basically how PDH does it.

In PDH, the higher order muxing (everything above T1/E1) forces the lower streams into a single synchronous stream, which is a little faster than the sum of the streams it carries. This allows some slots for carrying extra bits, when an incoming stream is a little fast, and tagging that bits are missing when an incoming stream is a little slow. The amount of fudging data you need to handle is very small, because the worst case mismatch in speeds in small (100ppm in the case of PDH). For IAX2 trunking, just one or two bits per channel per packet could do the job. Without a bit of work, I'm not sure how messy the software might look, but in terms of dense coding on the wire its makes sense.

I have no doubt that you could use somewhat fewer bits if you made the code more complicated, but I don't think you'd probably find you need a variable number of bits to do it effectively.


There's a number of properties of (present) IAX2 and VoIP streams and IAX2 trunks that are different than TDM telephony streams:

1) The loss rate is (potentially) much higher;
2) packets may arrive out-of-order.
3) There's jitter.
4) There's discontinuous transmission of frames.

Now, you can potentially de-jitter each of the sub-streams before putting them together on an iax2 trunk, but then you would need to also de-jitter them _again_ after they've been been sent across the trunk. If you have multiple hops, this all adds to latency in an expensive way.

IAX2 streams presently have a number of "issues" that make this more difficult, especially problems where timestamps are sent pretty screwed up (i.e. the case where you have a call that gets bridged, either natively or not, and you switch you timing source from the local box, to the bridged channel, often there's a 2-4 second jump in timestamps). I guess this is really a separate issue to solve, though..


-SteveK


_______________________________________________ Asterisk-Dev mailing list Asterisk-Dev@lists.digium.com http://lists.digium.com/mailman/listinfo/asterisk-dev To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/asterisk-dev
  • Re: [Asterisk-Dev] IAX2 trunk really should send timestamps as part of iax2_meta_trunk_entry.. Steve Kann