2012-07-16 1 views
2

HTS 라이브 스트리밍을위한 비디오를 인코딩하려고하지만 Apple Media Validator (mediastreamvalidator)를 사용하여 스트림의 유효성을 검사하는 데 문제가 있습니다. (내 테스트 파일 : http://dominicansinteractive.idoms.org/media/9536/playlist.m3u8)FFMPEG를 사용하여 HLS 인코딩을하면 DTS가 감소합니다.

출력은 다음과 같습니다

[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 

이 보인다 :

-------------------------------------------------------------------------------- 
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 %) 

두 번째 세그먼트가 문제가하지 않는 것 HLS에 심각한 문제가 될 수 있으므로이 문제를 해결할 수있는 방법이 있는지 찾고 있습니다.

내가 (이메일 하단의 엔코더 출력/명령) 얻을 인코딩 된 파일에서 FFMPEG을 찾고 :

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 

이 문제는베이스 라인 프로파일로 발생하지만 주요으로하지 않습니다.

내가 인코딩에 사용하는 명령은 다음과 같습니다 분할의 경우

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 

은 다음과 같습니다

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] 

어떤 도움이 정말 감사하겠습니다!

답변

1

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

모든 비디오 품질에 대한

권장 비디오 코덱 때문에 호환성의 몇 가지 유형의 고 말했다 H.264베이스 라인 그래서 아마이 때문에 위의 이유 제안 (실제로 매우 나쁘다) 프로필, 또는 더 나은 해당 형식, 내용 등을 포함합니다.

+0

나는 그것이 그럴 수 있다고 생각하지만, 매우 만족스럽지 않습니다. h264 메일 링리스트 나 ffmpeg 메일 링리스트에 대한 추가 제안 사항이 있으니, 곧 알게 될지도 모르지만 누군가가 알고있는 지식이 좀 더 깊이 조사하는 데 관심이 있는지 알아보기 위해 현상금이 나옵니다. –

4

Apple Media Validator에서보고 된 오류는 합법입니다. 실제로 TS 파일은 왼쪽과 오른쪽으로 나뉩니다.

문제 파일 (segment_00000.ts)에는 PID 0x100에 H.264가 있고 0x0101에 AAC가 있습니다. PCR_PID는 AVC 스트림 인 0x0100으로 설정된다. 파일에서

564 옵셋은 다음 TS 패킷을 가지고 두번째 라인 PCR = 2576978793600. 제 3 선 신호하는 내에 adaptation_field이다

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 

하는 PTS = 576,000 및 DTS = 2,576,978,793,600 신호 PES 패킷 인 27Mhz 틱.

PTS가 PCR에서 벗어나므로이 TS 패킷이 손상되었다고 말할 수 있습니다.

다음 PCR은 파일 오프셋 9212에서 신호를 보내고 PCR은 576000, PTS는 2736000, DTS는 576000입니다. 이제 우리는 이러한 관찰을합니다.

  1. PCR/PTS/DTS는 이제 어느 정도 합리적인 값을 가지고 있지만 ... 이전 DTS에 비해
  2. 이 새로운 DTS 이전이다, 따라서 애플 미디어 검사기가 오류를보고합니다.
  3. PCR은 DTS와 동일하며 T-STD 언더 플로 오류를 나타냅니다.

불행히도, 나는 ffmpeg에 익숙하지 않아서 어떻게 고쳐야할지 모르겠다. 그러나이 출력 파일을 보면 사용중인 TS 멀티플렉서가 최고 품질이 아니라는 인상을 받았습니다.

0

HLS의 경우 일반 세그먼트 다중 화기가 아닌 hls muxer (-f hls)를 사용해야합니다. 일반 세그먼트 muxer는 실제로 HLS와 호환되는 TS 파일을 생성하지 않습니다.