[Asterisk-video] lip sync issues with mp4_play
Sergio Garcia Murillo
sergio.garcia at fontventa.com
Tue Nov 11 16:44:23 CST 2008
Hi Dan,
Lip sync?? jeje.. good one.. ;)
Let's start with the bad news there is no audio/video sync mechanism in
asterisk (as we comment in a previous mail), the good news are that if
you have two synced media streams input in asterisk, the two media
streams outputs are going to be synced.
So let's go for the source, app_mp4. As Emmanuel says in another mail,
the hint track marks the timing for the rtp packets to be sent, so if
the source i synced, app_mp4 will play it synced.
The bad news is that mp4 files are prepared for streaming, not for been
transmitted on a fixed rate channel and played on a live, non-buffered
player. So, what's the problem?
First, app_h324m does nothing with the sync, it just receives the
packets from asterisk, extract the media and send it to the h324m
library, so far so good.
The h324m library has a small jitter buffer, and it does not start
sending until it has a minimum of data on it (3 packets if I remember
correctly), so it introduces a small delay. Why? because if audio data
is not sent with an almost perfect timing the mobile phone will suffer
an audio under run and the audio will be crappy. But 3 packets are 60ms,
so not much to worry.
When the jitter has enough data it starts sending audio at a fixed rate,
and audio data will have preference over video, so the audio will be
constantly played, no variable delays introduced.
Video is another issue, the biggest problem are the encoders. Most of
them, ffmpeg at least, are not constant bitrate encoders. So they will
produce a very big IFrame followed by small PFrames. What's the problem
with that? The ISDN can't send faster, so a variable delay will be
introduced on video depending on the size of the frame.
What happens then? Did you remember that we said that audio and video
were RECEIVED synced on the app_h324m application? So when you sent the
audio and video frame to the h324m library they are still synced, and
even the h324m library starts sending it almost synced. But the amr
arrives much more faster than the video, that depending on the size
could take almost a second to be sent depending on the video bitrate.
What do mobile phones do? Usually a best effort approach, as soon as
they receive audio, they play it. As soon as they receive the a video
frame they decode and display it. That is the reason why sometimes a
video plays faster than it should be for a while (several frames have
been enqueued, been the latest very small, and they are received by the
mobile phone almost at the same time).
What can be done? not much, buffering will introduce an unacceptable
delay in a person to person communication, so the only good solution is
to be ale to have a CBR h263 encoder that outputs always the same amount
of data for each frame. That way a fixed delay will be introduced in
video and by adjusting the jitter the synchronization we could be almost
perfect.
Best regards!
Sergio
Dan Julius escribió:
> Hi,
>
> Is there a good reference to better understand how audio/video
> synchronization is handled in h324m?
>
> I'm using mp4_play to play a file I created following the mp4 mini
> tutorial. I combined an h263 track with a g711 track,
> I've noticed that by modifying the bitrate of the video channel I can
> get different results, but all of them have lip-sync issues.
>
> where is the av sync supposed to be handled, in the mp4 file, by
> libh324m, or the 3g handset?
>
> Thanks for the advice,
> Dan
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> --Bandwidth and Colocation Provided by http://www.api-digital.com--
>
> asterisk-video mailing list
> To UNSUBSCRIBE or update options visit:
> http://lists.digium.com/mailman/listinfo/asterisk-video
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.digium.com/pipermail/asterisk-video/attachments/20081111/8098107b/attachment-0001.htm
More information about the asterisk-video
mailing list