[Libav-user] warbly audio playback when syncing to video

Ron Woods rwoods at vaytek.com
Tue Dec 4 22:05:39 CET 2012

In a video previewer that I am writing, I am trying to synchronize the audio to the video as in ffplay.c with av_sync_type = AV_SYNC_VIDEO_MASTER.   The resulting audio seems to be in sync with the video; however, it is warbly, like it's playing through water or something.  Obviously, I am missing something in mimicking the technique from ffplay.c

In synchronize_audio() of ffplay.c, there is this line:
diff = get_audio_clock(is) - get_master_clock(is);
I am using the get_audio_clock() as in ffplay, but for the get_master_clock(), I am using a custom get_video_clock() directly, as I will always be syncing to the video.  However, I am not using the same function as in ffplay.c, because I am not handling the video stream through a PacketQueue.

My app performs video analysis on the video frames as they are decoded and then passes them to a Windows C# UI for display and optional saving to disk.   The throughput of the video analysis drives the video playback.  That is, when it is done processing a frame, then it requests the next one.   If the processing takes less time than a frame interval, then I insert a delay to ensure that the playback is close to real time for the user.  (Maybe this is not the best design?)

Therefore, I would like the audio to follow the video. The problem seems to be in getting the proper value for the video "clock".  To this end, I have been using a function as in Dranger's tutorial06.c:
double get_video_clock(VideoState *is) {
                double delta;
                delta = (av_gettime() - video_current_pts_time) / 1000000.0;
                return video_current_pts + delta;
where delta is amount of time since the video_current_pts was obtained.  Seems to me that this should work in my context, yet the result is not yet acceptable.  If I change the function to simply
return video_current_pts;
Then the warble is more pronounced.

How do I get the audio to properly synchronize with the video?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20121204/09598a88/attachment.html>

More information about the Libav-user mailing list