>> On Mon, Dec 17, 2012 at 10:59 AM, Dolevo Jay <[email protected]> wrote:
>>> I capture the video frame by frame from the desktop screen and send them
>>> over network after encoding. This happens on the PC processor and I have no
>>> problem with this. It works perfect for now. However, I capture the audio
>>> separately with the help of an HID device which has its own processor. I can
>>> send the audio even without encoding but still the problem is the video and
>>> audio get out of sync and drift occurs although I sync the processors at the
>>> very beginning. Could anyone shed any light on this issue?
>>
>> You can set the video PTS in sync with the current audio "clock". Most
>> likely, your audio packets arrive at fixed nominal frequency which is
>> not precise (from the point of view of your PC clock). In this case
>> you should calculate PTS by multiplying the expected audio packet
>> duration by number of actual audio packets received.
>
>
> Even if a nominal fixed frequency were precise enough with respect to the 
> video frequency it seems you're probably looking at transport delays that are 
> neither constant nor identical (enough) for the two streams. It's not clear 
> if you send video and audio over the same network stream if you maybe even 
> capture the audio on a separate host (possibly the remote)? How big is the 
> drift, I suppose we're not talking about a 1 or 2 frames jitter?

I have a minor jitter, there is no network involved.

I aforementioned example all PTS's are calculated automatically. Where
do I insert my own video PTS? I assume it is in the write_video_frame
function, but is it before the call to avcodec_encode_video() or
after? Do I set the codec PTS or the packet, or both?

Here's (I think) the relevant piece of code:

// encode the image
int out_size = avcodec_encode_video(c, pVideoOut, iVideoOutSize, stPicture);
// if zero size, it means the image was buffered
if (out_size > 0) {
  AVPacket pkt;
  av_init_packet(&pkt);
  if (c->coded_frame->pts != AV_NOPTS_VALUE)
    pkt.pts = av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);
}

Thanks,

Mike
_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user

Reply via email to