首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用FFMPEG对HLS进行编码的结果使DTS下降

使用FFMPEG对HLS进行编码的结果使DTS下降
EN

Stack Overflow用户
提问于 2012-07-16 11:39:07
回答 3查看 6.3K关注 0票数 2

我正试图为HTS直播流编码视频,但在使用mediastreamvalidator(纵隔验证器)验证该流时遇到了问题。(我的测试文件:http://dominicansinteractive.idoms.org/media/9536/playlist.m3u8)

产出如下:

代码语言:javascript
复制
--------------------------------------------------------------------------------
http://dominicansinteractive.idoms.org/media/9536/199/prog_index.m3u8
--------------------------------------------------------------------------------

Playlist Validation: 

    OK

Segments:

segment_00000.ts:

    ERROR: (-1) Decreasing DTS were detected in track 0
    ERROR: (-1) Decreasing DTS were detected in track 1

    Average segment duration: 8.07 seconds
    Average segment bitrate: 2155094.67 bps
    Average segment structural overhead: 206525.83 bps (9.58 %)

第二部分似乎没有问题:

代码语言:javascript
复制
[mpegts @ 0x1d78120] Format mpegts probed with size=2048 and score=100
[mpegts @ 0x1d78120] stream=0 stream_type=1b pid=100 prog_reg_desc=
[mpegts @ 0x1d78120] stream=1 stream_type=f pid=101 prog_reg_desc=
[mpegts @ 0x1d78120] File position before avformat_find_stream_info() is 0
[h264 @ 0x1d7c1c0] Current profile doesn't provide more RBSP data in PPS, skipping
[h264 @ 0x1d7c1c0] no picture 
[h264 @ 0x1d7c1c0] Current profile doesn't provide more RBSP data in PPS, skipping
   Last message repeated 3 times
[mpegts @ 0x1d78120] max_analyze_duration 5000000 reached at 5013333
[mpegts @ 0x1d78120] File position after avformat_find_stream_info() is 0

对于HLS来说,这似乎是一个严重的问题,所以我正在寻找解决这个问题的方法。

当我在编码文件上查看FFMPEG时(电子邮件底部的编码器输出/命令):

代码语言:javascript
复制
ffmpeg -loglevel 99 -i encoded.ts 
ffmpeg version N-37783-gdf3a96c Copyright (c) 2000-2012 the FFmpeg developers
 built on Jul  4 2012 07:44:52 with gcc 4.4.5
 configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-libfaac --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libvpx --enable-libfaac --enable-nonfree
 libavutil      51. 63.100 / 51. 63.100
 libavcodec     54. 32.100 / 54. 32.100
 libavformat    54. 14.100 / 54. 14.100
 libavdevice    54.  0.100 / 54.  0.100
 libavfilter     3.  0.101 /  3.  0.101
 libswscale      2.  1.100 /  2.  1.100
 libswresample   0. 15.100 /  0. 15.100
 libpostproc    52.  0.100 / 52.  0.100
[mpegts @ 0x2023120] Format mpegts probed with size=2048 and score=100
[mpegts @ 0x2023120] stream=0 stream_type=1b pid=100 prog_reg_desc=
[mpegts @ 0x2023120] stream=1 stream_type=f pid=101 prog_reg_desc=
[mpegts @ 0x2023120] File position before avformat_find_stream_info() is 0
[h264 @ 0x20271c0] Current profile doesn't provide more RBSP data in PPS, skipping
[h264 @ 0x20271c0] no picture 
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 143280 in que
   Last message repeated 6 times
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 158640 in que
   Last message repeated 7 times
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 175920 in que
   Last message repeated 7 times
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 193200 in que
   Last message repeated 7 times
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 210480 in que
   Last message repeated 7 times
[h264 @ 0x20271c0] Current profile doesn't provide more RBSP data in PPS, skipping
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 227760 in que
   Last message repeated 7 times
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 245040 in que
   Last message repeated 7 times
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 262320 in que
   Last message repeated 7 times
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 279600 in que
   Last message repeated 7 times
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 296880 in que
   Last message repeated 7 times
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 314160 in que
   Last message repeated 7 times
[h264 @ 0x20271c0] Current profile doesn't provide more RBSP data in PPS, skipping
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 331440 in que
   Last message repeated 7 times
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 348720 in que
   Last message repeated 7 times
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 366000 in que
   Last message repeated 7 times
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 383280 in que
   Last message repeated 7 times
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 400560 in que
   Last message repeated 7 times
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 417840 in que
   Last message repeated 6 times
[h264 @ 0x20271c0] Current profile doesn't provide more RBSP data in PPS, skipping
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 433200 in que
   Last message repeated 6 times
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 448560 in que
   Last message repeated 7 times
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 465840 in que
   Last message repeated 6 times
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 481200 in que
   Last message repeated 7 times
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 498480 in que
   Last message repeated 7 times
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 515760 in que
   Last message repeated 7 times
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 533040 in que
   Last message repeated 6 times
[h264 @ 0x20271c0] Current profile doesn't provide more RBSP data in PPS, skipping
[mpegts @ 0x2023120] first_dts 124080 not matching first dts 548400 in que
   Last message repeated 7 times
[mpegts @ 0x2023120] max_analyze_duration 5000000 reached at 5000000
[mpegts @ 0x2023120] File position after avformat_find_stream_info() is 0

And when at the first segmented file:
ffmpeg -loglevel 99 -i segment_00000.ts 
ffmpeg version N-37783-gdf3a96c Copyright (c) 2000-2012 the FFmpeg developers
 built on Jul  4 2012 07:44:52 with gcc 4.4.5
 configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-libfaac --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libvpx --enable-libfaac --enable-nonfree
 libavutil      51. 63.100 / 51. 63.100
 libavcodec     54. 32.100 / 54. 32.100
 libavformat    54. 14.100 / 54. 14.100
 libavdevice    54.  0.100 / 54.  0.100
 libavfilter     3.  0.101 /  3.  0.101
 libswscale      2.  1.100 /  2.  1.100
 libswresample   0. 15.100 /  0. 15.100
 libpostproc    52.  0.100 / 52.  0.100
[mpegts @ 0x1a0b120] Format mpegts probed with size=2048 and score=100
[mpegts @ 0x1a0b120] stream=0 stream_type=1b pid=100 prog_reg_desc=
[mpegts @ 0x1a0b120] stream=1 stream_type=f pid=101 prog_reg_desc=
[mpegts @ 0x1a0b120] File position before avformat_find_stream_info() is 0
[mpegts @ 0x1a0b120] Invalid timestamps stream=0, pts=1920, dts=8589929312, size=2355
[mpegts @ 0x1a0b120] Invalid timestamps stream=0, pts=16320, dts=8589932912, size=3203
[h264 @ 0x1a0f1c0] Current profile doesn't provide more RBSP data in PPS, skipping
[h264 @ 0x1a0f1c0] no picture 
[h264 @ 0x1a0f1c0] Current profile doesn't provide more RBSP data in PPS, skipping
   Last message repeated 3 times
[mpegts @ 0x1a0b120] max_analyze_duration 5000000 reached at 5013333
[mpegts @ 0x1a0b120] File position after avformat_find_stream_info() is 0

此问题不发生在基线配置文件中,而是在MAIN中。

我用于编码的命令是:

代码语言:javascript
复制
ffmpeg, -i, [path]/test.mov, -y, -f, mpegts, -acodec, aac, -strict, -2, -ar, 48000, -b:a, 128000, -s, 960x540, -vcodec, libx264, -b:v, 1200000, -aspect, 960:540, -r, 25, -level, 3.1, -vprofile, main, -flags, +loop, -cmp, +chroma, -partitions, +parti4x4+partp8x8+partb8x8, -subq, 5, -trellis, 1, -refs, 1, -coder, 0, -me_range, 16, -keyint_min, 25, -sc_threshold, 40, -i_qfactor, 0.71, -bt, 200k, -maxrate, 1200000, -bufsize, 1200000, -rc_eq, 'blurCplx^(1-qComp)', -qcomp, 0.6, -qmin, 10, -qmax, 51, -qdiff, 4, -level, 30, -g, 30, -async, 2, [path]/encoded.ts

08:40:29,843 DEBUG ~ FFMPEG(1):   libavutil      51. 63.100 / 51. 63.100
08:40:29,843 DEBUG ~ FFMPEG(1):   libavcodec     54. 32.100 / 54. 32.100
08:40:29,843 DEBUG ~ FFMPEG(1):   libavformat    54. 14.100 / 54. 14.100
08:40:29,843 DEBUG ~ FFMPEG(1):   libavdevice    54.  0.100 / 54.  0.100
08:40:29,843 DEBUG ~ FFMPEG(1):   libavfilter     3.  0.101 /  3.  0.101
08:40:29,844 DEBUG ~ FFMPEG(1):   libswscale      2.  1.100 /  2.  1.100
08:40:29,844 DEBUG ~ FFMPEG(1):   libswresample   0. 15.100 /  0. 15.100
08:40:29,844 DEBUG ~ FFMPEG(1):   libpostproc    52.  0.100 / 52.  0.100
08:40:30,033 DEBUG ~ FFMPEG(1): Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '[path]/test.mov':
08:40:30,033 DEBUG ~ FFMPEG(1):   Metadata:
08:40:30,033 DEBUG ~ FFMPEG(1):     major_brand     : qt  
08:40:30,033 DEBUG ~ FFMPEG(1):     minor_version   : 537199360
08:40:30,035 DEBUG ~ FFMPEG(1):     compatible_brands: qt  
08:40:30,035 DEBUG ~ FFMPEG(1):     creation_time   : 2011-12-05 10:54:24
08:40:30,036 DEBUG ~ FFMPEG(1):     timecode        : 00:00:00:00
08:40:30,036 DEBUG ~ FFMPEG(1):   Duration: 00:00:24.20, start: 0.000000, bitrate: 9912 kb/s
08:40:30,037 DEBUG ~ FFMPEG(1):     Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1920x1080, 9777 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc
08:40:30,037 DEBUG ~ FFMPEG(1):     Metadata:
08:40:30,037 DEBUG ~ FFMPEG(1):       creation_time   : 2011-12-05 10:56:28
08:40:30,037 DEBUG ~ FFMPEG(1):       handler_name    : Apple Video Media Handler
08:40:30,038 DEBUG ~ FFMPEG(1):     Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, s16, 129 kb/s
08:40:30,038 DEBUG ~ FFMPEG(1):     Metadata:
08:40:30,038 DEBUG ~ FFMPEG(1):       creation_time   : 2011-12-05 10:56:28
08:40:30,038 DEBUG ~ FFMPEG(1):       handler_name    : Apple Sound Media Handler
08:40:30,038 DEBUG ~ FFMPEG(1):     Stream #0:2(eng): Data: none (tmcd / 0x64636D74)
08:40:30,038 DEBUG ~ FFMPEG(1):     Metadata:
08:40:30,038 DEBUG ~ FFMPEG(1):       creation_time   : 2011-12-05 10:56:28
08:40:30,039 DEBUG ~ FFMPEG(1):       handler_name    : Time Code Media Handler
08:40:30,039 DEBUG ~ FFMPEG(1):       timecode        : 00:00:00:00
08:40:30,092 DEBUG ~ FFMPEG(1): [graph 0 input from stream 0:0 @ 0x1c17180] w:1920 h:1080 pixfmt:yuv420p tb:1/25 fr:25/1 sar:0/1 sws_param:flags=2
08:40:30,092 DEBUG ~ FFMPEG(1): [output stream 0:0 @ 0x1c033a0] No opaque field provided
08:40:30,110 DEBUG ~ FFMPEG(1): [scaler for output stream 0:0 @ 0x1c18040] w:1920 h:1080 fmt:yuv420p sar:0/1 -> w:960 h:540 fmt:yuv420p sar:0/1 flags:0x4
08:40:30,110 DEBUG ~ FFMPEG(1): [graph 1 input from stream 0:1 @ 0x1c53440] tb:1/48000 samplefmt:s16 samplerate:48000 chlayout:0x3
08:40:30,110 DEBUG ~ FFMPEG(1): -async is forwarded to lavfi similarly to -af aresample=min_comp=0.001:min_hard_comp=0.100000:max_soft_comp=0.000042.
08:40:30,122 DEBUG ~ FFMPEG(1): [graph 1 aresample for input stream 0:1 @ 0x1c36880] chl:stereo fmt:s16 r:48000Hz -> chl:stereo fmt:flt r:48000Hz
08:40:30,142 DEBUG ~ FFMPEG(1): [libx264 @ 0x1be3cc0] using SAR=1/1
08:40:30,142 DEBUG ~ FFMPEG(1): [libx264 @ 0x1be3cc0] frame MB size (60x34) > level limit (1620)
08:40:30,142 DEBUG ~ FFMPEG(1): [libx264 @ 0x1be3cc0] DPB size (4 frames, 3133440 bytes) > level limit (3 frames, 3110400 bytes)
08:40:30,142 DEBUG ~ FFMPEG(1): [libx264 @ 0x1be3cc0] MB rate (51000) > level limit (40500)
08:40:30,170 DEBUG ~ FFMPEG(1): [libx264 @ 0x1be3cc0] using cpu capabilities: MMX2 SSE2Slow SlowCTZ
08:40:30,182 DEBUG ~ FFMPEG(1): [libx264 @ 0x1be3cc0] profile Main, level 3.0
08:40:30,235 DEBUG ~ FFMPEG(1): [mpegts @ 0x1be3540] muxrate VBR, pcr every 2 pkts, sdt every 200, pat/pmt every 40 pkts
08:40:30,235 DEBUG ~ FFMPEG(1): Output #0, mpegts, to '[path]/encoded.ts':
08:40:30,235 DEBUG ~ FFMPEG(1):   Metadata:
08:40:30,235 DEBUG ~ FFMPEG(1):     major_brand     : qt  
08:40:30,235 DEBUG ~ FFMPEG(1):     minor_version   : 537199360
08:40:30,235 DEBUG ~ FFMPEG(1):     compatible_brands: qt  
08:40:30,235 DEBUG ~ FFMPEG(1):     timecode        : 00:00:00:00
08:40:30,235 DEBUG ~ FFMPEG(1):     encoder         : Lavf54.14.100
08:40:30,235 DEBUG ~ FFMPEG(1):     Stream #0:0(eng): Video: h264, yuv420p, 960x540 [SAR 1:1 DAR 16:9], q=10-51, 1200 kb/s, 90k tbn, 25 tbc
08:40:30,235 DEBUG ~ FFMPEG(1):     Metadata:
08:40:30,235 DEBUG ~ FFMPEG(1):       creation_time   : 2011-12-05 10:56:28
08:40:30,235 DEBUG ~ FFMPEG(1):       handler_name    : Apple Video Media Handler
08:40:30,236 DEBUG ~ FFMPEG(1):     Stream #0:1(eng): Audio: aac, 48000 Hz, stereo, flt, 128 kb/s
08:40:30,236 DEBUG ~ FFMPEG(1):     Metadata:
08:40:30,236 DEBUG ~ FFMPEG(1):       creation_time   : 2011-12-05 10:56:28
08:40:30,236 DEBUG ~ FFMPEG(1):       handler_name    : Apple Sound Media Handler
08:40:30,236 DEBUG ~ FFMPEG(1): Stream mapping:
08:40:30,236 DEBUG ~ FFMPEG(1):   Stream #0:0 -> #0:0 (h264 -> libx264)
08:40:30,236 DEBUG ~ FFMPEG(1):   Stream #0:1 -> #0:1 (aac -> aac)

[...]

08:40:55,398 DEBUG ~ FFMPEG(1): video:3121kB audio:359kB subtitle:0 global headers:0kB muxing overhead 11.132085%
08:40:55,407 DEBUG ~ FFMPEG(1): [libx264 @ 0x1be3cc0] frame I:21    Avg QP:21.57  size: 88153
08:40:55,407 DEBUG ~ FFMPEG(1): [libx264 @ 0x1be3cc0] frame P:233   Avg QP:22.74  size:  5560
08:40:55,407 DEBUG ~ FFMPEG(1): [libx264 @ 0x1be3cc0] frame B:351   Avg QP:27.45  size:   141
08:40:55,407 DEBUG ~ FFMPEG(1): [libx264 @ 0x1be3cc0] consecutive B-frames: 21.7%  2.0%  3.0% 73.4%
08:40:55,407 DEBUG ~ FFMPEG(1): [libx264 @ 0x1be3cc0] mb I  I16..4: 54.5%  0.0% 45.5%
08:40:55,422 DEBUG ~ FFMPEG(1): [libx264 @ 0x1be3cc0] mb P  I16..4:  4.7%  0.0%  1.3%  P16..4: 24.6%  3.5%  0.8%  0.0%  0.0%    skip:65.1%
08:40:55,422 DEBUG ~ FFMPEG(1): [libx264 @ 0x1be3cc0] mb B  I16..4:  0.1%  0.0%  0.1%  B16..8:  0.5%  0.1%  0.0%  direct: 0.6%  skip:98.6%  L0:32.3% L1:47.1% BI:20.6%
08:40:55,422 DEBUG ~ FFMPEG(1): [libx264 @ 0x1be3cc0] coded y,uvDC,uvAC intra: 59.4% 5.8% 0.4% inter: 5.4% 3.0% 0.0%
08:40:55,422 DEBUG ~ FFMPEG(1): [libx264 @ 0x1be3cc0] i16 v,h,dc,p: 58% 16% 21%  4%
08:40:55,422 DEBUG ~ FFMPEG(1): [libx264 @ 0x1be3cc0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 20% 21% 17%  5% 10%  7%  5%  5% 10%
08:40:55,422 DEBUG ~ FFMPEG(1): [libx264 @ 0x1be3cc0] i8c dc,h,v,p: 94%  3%  3%  0%
08:40:55,422 DEBUG ~ FFMPEG(1): [libx264 @ 0x1be3cc0] Weighted P-Frames: Y:13.7% UV:3.4%
08:40:55,422 DEBUG ~ FFMPEG(1): [libx264 @ 0x1be3cc0] kb/s:1056.61

分段是:

代码语言:javascript
复制
ffmpeg, -i,[path]encoded.ts, -y, -c, copy, -flags, global_header, -map, 0, -f, segment, -segment_time, 10, -segment_list, [path]/fileList.txt, -segment_format, mpegts, [path]/segment_%05d.ts]

任何帮助都是非常感谢的!

EN

回答 3

Stack Overflow用户

发布于 2012-11-12 03:12:57

报告的错误是合法的。实际上,TS文件是左、右被破坏的。

问题文件(segment_00000.ts)有H.264的PID 0x100和AAC在0x0101。PCR_PID设置为0x0100,这是AVC流。

在文件偏移量564处,它有以下TS数据包:

代码语言:javascript
复制
47 41 00 30 
07 50 FF FF F5 B0 7E 00 
00 00 01 E0 0D D8 80 C0 0A 31 00 01 0F 01 1F FF FF D6 C1 00

第二条为adaptation_field,信号为2576978793600。第三行是PES包,它在27 The滴答中发出信号PTS = 576000和DTS = 2576978793600。

由于PTS远离PCR,我们可以说这个TS数据包被破坏了。

在文件偏移9212处,PCR为576000,PTS为2736000,DTS为576000。现在,我们有这些观察。

  1. PCR/PTS/DTS现在有一些合理的值,但是.
  2. 与以前的DTS相比,新的DTS更早,因此报告了错误。
  3. PCR与DTS相同,反映了T底流误差.

不幸的是,我不熟悉ffmpeg,所以我不知道如何修复它。但是,通过查看这个输出文件,我得到的印象是,正在使用的TS复用器还没有达到最高的质量。

票数 4
EN

Stack Overflow用户

发布于 2012-07-30 18:04:11

http://developer.android.com/guide/appendix/media-formats.html

推荐用于所有视频质量的视频编解码器是H.264基线配置文件(实际上非常糟糕),因此可能是因为上述原因,或者更好地说,是因为这些格式、内容等内部存在某种类型的不兼容。

票数 1
EN

Stack Overflow用户

发布于 2014-12-29 15:22:08

对于HLS,您应该使用hls muxer (-f hls),而不是泛型段muxer。通用段muxer并不真正生成与HLS兼容的TS文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11503491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档