I investigated more and was able to fully recreate the issue in a "lab setting". It seems that the C920 is producing invalid PTS values in the output H264 stream. What is, however, more interesting is that ffplay is somehow able to compensate for it if "treated right".

My initial setup is running the following command and capturing video of a high-speed timer running on my screen:

ffmpeg -r 30 -f v4l2 -s 1920x1080 -vcodec h264 -i /dev/v4l/by-id/*HD_Pro_Webcam_C920* \
  -c:v copy -f matroska - | \
tee stdin.mkv | \
strace -ttt -ff -o ffplay.trace -s 65536 ffplay -i -

The result is the (incomplete, no index at the end) stdin.mkv [1], a perfect smooth video on my screen produced by ffplay, and a bunch of tracefiles [2.1]. As described in the previous email [3], if I attempt to play stdin.mkv with anything (including ffplay itself via `ffplay -i stdin.mkv`) I get micro-freezes every ~2.5 sec as can be seen in the playback of [1] on vimeo.

My questions:
1) The PTS of the stream is clearly mangled. If I look at it via ffprobe and calculate the PTS differences I end up with [2.2]. Is there a way to rewrite the PTS alone without recoding, using a stable clocksource? I tried in various combinations the following options - nothing seem to change the outcome (is it due to -c:v copy, affecting even input-side flags?):
(input side): -re, -ts abs, -ts mono2abs
(output side): -fflags genpts

2) (the more interesting question) I want to understand what exactly causes ffplay to process the apparently broken stream. I took the strace of the reader thread, and after some manipulation ended up with a "read schedule" as seen in [2.3]. Then I wrote a simple "delayed cat" program that reads out [1] as per the schedule - it can be found in [2.4]. The result is:

Hang every ~2.5 secs: `cat stdin.mkv | ffplay -i -`
Smooth no-hang video: `./scheduler | ffplay -i -`

If anyone has any ideas - please do share ;)

[1] 7Mb SHA1 649434a5aa0082f81cfc447af173203a970fda84, downloadable from https://vimeo.com/114550042 (you need to login to vimeo to see the "download original" link)

[2.1] https://gist.github.com/ribasushi/fab13b785c3c6e1b70a3#file-strace_results

[2.2] https://gist.github.com/ribasushi/fab13b785c3c6e1b70a3#file-ptsdeltas

[2.3] https://gist.github.com/ribasushi/fab13b785c3c6e1b70a3#file-read_schedule

[2.4] https://gist.github.com/ribasushi/fab13b785c3c6e1b70a3#file-scheduler

[3] http://lists.mplayerhq.hu/pipermail/ffmpeg-user/2014-December/024507.html


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

Reply via email to