> Marco — I empathize with your difficulties, I had similar. All I can pass on 
> is my experience. My use case was real-time webcam capture, encoding, and 
> streaming frames to a server — I had sync and playback problems too. I 
> inquired on this mailing list, and was told setting pts / dts would correct 
> the problem. Weeks of testing didn’t prove that to be true in my case. The 
> only way to make syncing and playback work was that you absolutely had to 
> provide whatever # of frames was set in the codec’s time_base to the encoder 
> *whether you received them or not*. In other words, if the time base 
> indicated 30fps, you couldn’t provide 15fps with proper pts and dts (double 
> duration). Playback (on any number of video players) would try to process 
> half the frames at 30fps, and thus the video played at double the speed (half 
> the proper time).
>
> I had this exact scenario — I was receiving exact pts / dts from the capture 
> source, but feeding that to the encoder didn’t work. The only way I could get 
> this to work was to force-feed 30 fps to the encoder. In other words, if 
> receiving 15 fps from the source, I had to feed each frame to the encoder 
> twice with modified pts / dts so that the encoder got its 30fps. Again, I was 
> working real-time, so if you are not, then perhaps your situation is 
> different.
>
> That’s the only light I can shed on experience with FFmpeg and pts / dts — I 
> read all the recommended docs on it, read through source code, and though I 
> tried every way I knew how, fixing those two things only doesn’t solve all 
> sync and playback issues. I know (well) that others will dispute this. But at 
> the end of the day, I produced code which proved otherwise, and posted it to 
> this list, and that was never demonstrated to be wrong. And for what its 
> worth, I had several people contact me off-list after I posted this to 
> confirm they were seeing the same behavior in their code. So take it for what 
> it is — if there is another explanation as to why this is, I am unaware, but 
> if one does surface, suffice to say I’ll be as interested as you.

If this code is sufficiently minimal and self-contained, and can
reproduce this problem, can you post it again?

>
> I don’t know if that helps, but that’s the best I can do to help. At the very 
> least, I hope it leads to a good direction to getting things solved.
>
> Good Luck.
>
> Brad
>

Wow, thanks a lot for such a long Mail. It motivated me :D Its just so 
frustrating that you only can do some try&error ... to pinpoint the error. wish 
you maybe have to fix with try&error again... and on top of that i'm a 
video&audio newbie, i have to research a lot.


Im not sure if i can provide the code, because its a Class in my Environment, 
wish would need some rewriting or QT C++ Framework.
Thats how my pts/dts for audio gets calculated, while the audiostream is 
running with 1/48000.
...
audioFrame->pts = samples_count; 
samples_count += dst_nb_samples; (1024,944,.. see below)
ret = 
avcodec_encode_audio2(audioStream->codec,&encoderPacket,audioFrame,&got_packet);
...
encoderPacket.pts = av_rescale_q_rnd(encoderPacket.pts, 
audioCodecCtx->time_base,audioStream->time_base,(AVRounding)(AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX));
encoderPacket.dts = av_rescale_q_rnd(encoderPacket.dts, 
audioCodecCtx->time_base,audioStream->time_base,(AVRounding)(AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX));


Im now trying ffprobe out, so that i can print out the frames and pts/dts 
afterwards.

While Audio frames have different durations but all the same samples and video 
frames always have the same duration/durationtime.
I understand that video frames with a constant framerate (25fps), should 
increase with 0.04. 

But when im seeing these values... I'm kinda wondering how much of difference 
between video/audio are okay. (And how the QT player gets asynchron after 4min 
and not already from the start....)

From the look of it ~ 2 audio frames for each video frame.

audio : 0:00:00.021333 * 2 = 0:00:00.042667
video : 0:00:00.040000

I kinda remembering, that the audios frame arent always the same... and that 
they are more floating not like a imageframe in video which is static.
But still the audio has a overhead. The difference of the last Frames are not 
to high:

audio:
pkt_pts_time=0:20:23.816667
pkt_dts_time=0:20:23.816667

video:
pkt_pts_time=0:20:23.760000
pkt_dts_time=0:20:23.760000


ffprobeoutput:

....
....
[FRAME]
media_type=video
key_frame=0
pkt_pts=10240
pkt_pts_time=0:00:00.800000
pkt_dts=10240
pkt_dts_time=0:00:00.800000
pkt_duration=512
pkt_duration_time=0:00:00.040000
pkt_pos=100085
pkt_size=3265
width=1024
height=576
pix_fmt=yuv420p
sample_aspect_ratio=N/A
pict_type=P
coded_picture_number=20
display_picture_number=0
interlaced_frame=0
top_field_first=0
repeat_pict=0
reference=0
[/FRAME]
[FRAME]
media_type=audio
key_frame=1
pkt_pts=43008
pkt_pts_time=0:00:00.896000
pkt_dts=43008
pkt_dts_time=0:00:00.896000
pkt_duration=944
pkt_duration_time=0:00:00.019667
pkt_pos=111691
pkt_size=251
sample_fmt=fltp
nb_samples=1024
channels=2
channel_layout=stereo
[/FRAME]
[FRAME]
media_type=audio
key_frame=1
pkt_pts=43952
pkt_pts_time=0:00:00.915667
pkt_dts=43952
pkt_dts_time=0:00:00.915667
pkt_duration=1024
pkt_duration_time=0:00:00.021333
pkt_pos=111942
pkt_size=252
sample_fmt=fltp
nb_samples=1024
channels=2
channel_layout=stereo
[/FRAME]
[FRAME]
media_type=video
key_frame=0
pkt_pts=10752
pkt_pts_time=0:00:00.840000
pkt_dts=10752
pkt_dts_time=0:00:00.840000
pkt_duration=512
pkt_duration_time=0:00:00.040000
pkt_pos=103845
pkt_size=3528
width=1024
height=576
pix_fmt=yuv420p
sample_aspect_ratio=N/A
pict_type=P
coded_picture_number=21
display_picture_number=0
interlaced_frame=0
top_field_first=0
repeat_pict=0
reference=0
[/FRAME]
....
....
....
[FRAME]
media_type=audio
key_frame=1
pkt_pts=58743200
pkt_pts_time=0:20:23.816667
pkt_dts=58743200
pkt_dts_time=0:20:23.816667
pkt_duration=2016
pkt_duration_time=0:00:00.042000
pkt_pos=169394958
pkt_size=266
sample_fmt=fltp
nb_samples=1024
channels=2
channel_layout=stereo
[/FRAME]
[FRAME]
media_type=video
key_frame=0
pkt_pts=15664128
pkt_pts_time=0:20:23.760000
pkt_dts=15664128
pkt_dts_time=0:20:23.760000
pkt_duration=512
pkt_duration_time=0:00:00.040000
pkt_pos=169392212
pkt_size=2188
width=1024
height=576
pix_fmt=yuv420p
sample_aspect_ratio=N/A
pict_type=P
coded_picture_number=30594
display_picture_number=0
interlaced_frame=0
top_field_first=0
repeat_pict=0
reference=0
[/FRAME]




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

Reply via email to