Ticket #1572 (closed defect: fixed)
HLS input destroys DTS/PTS information
| Reported by: | crtmpserver | Owned by: | |
|---|---|---|---|
| Priority: | normal | Component: | avformat |
| Version: | git-master | Keywords: | hls |
| Cc: | Blocked By: | ||
| Blocking: | Reproduced by developer: | yes | |
| Analyzed by developer: | no |
Description (last modified by cehoyos) (diff)
When using an HLS as input, ffmpeg does not preserve the DTS timestamps which are usually present whenever B-frames are present. For simplicity, I chosen flv output because is very easy to eye-ball the resulted file in a hex editor and determine if a file has or has not dts timestamps.
How to reproduce:
method 1 (DTS timestamps are destroyed/absent)
% ffmpeg -i http://rtmpd.com/assets/11/test.m3u8 -an -vcodec copy /tmp/a.flv
method 2 (DTS timestamps are preserved/present)
% ffmpeg -i http://rtmpd.com/assets/11/all.ts -an -vcodec copy /tmp/a.flv
Observations:
- all.ts input file is nothing more nothing less than all the chunks concatenated from test.m3u8. Basically, identical content. Logically speaking, both methods should generate proper DTS timestamps (I don't expect them to be identical, but at least present). Why? because both methods are in the end falling back on mpegts demuxer. I think the problem is somewhere in libavformat/hls.c
- I removed the audio track for simplicity
- ffplay will playback just fine both resulted files (flv files). However, flash player - the primary consumer of those files - will choke on the one with bogus DTS. And it makes sense, because the file is not adhering to the FLV specs.
My ffmpeg version is:
ffmpeg version 0.11.1.git built on Jul 24 2012 04:23:34 with llvm-gcc 4.2.1 (LLVM build 2336.9.00) configuration: --enable-libx264 --enable-libfaac --enable-gpl --enable-nonfree --enable-libmp3lame --enable-shared --disable-filter=mp --prefix=/Users/shiretu/work/ffmpeg_bin libavutil 51. 65.100 / 51. 65.100 libavcodec 54. 44.100 / 54. 44.100 libavformat 54. 20.100 / 54. 20.100 libavdevice 54. 2.100 / 54. 2.100 libavfilter 3. 3.100 / 3. 3.100 libswscale 2. 1.100 / 2. 1.100 libswresample 0. 15.100 / 0. 15.100 libpostproc 52. 0.100 / 52. 0.100
Change History
comment:2 Changed 8 months ago by michael
testing current git master, both flv files generated contain some frames with dts != pts. Does this problem still occur? and if so, please show an example of bad dts values. Note you can easily see them, with -fdebug ts -debug_ts



sorry about "fly". It should be FLV. The spellchecker ...