Opened 10 years ago
Last modified 10 years ago
#5993 new defect
Not written DecoderSpecificInfo with aac_adtstoasc bsf and empty_moov flags
| Reported by: | miyukki | Owned by: | |
|---|---|---|---|
| Priority: | normal | Component: | undetermined |
| Version: | git-master | Keywords: | |
| Cc: | Blocked By: | ||
| Blocking: | Reproduced by developer: | no | |
| Analyzed by developer: | no |
Description
Summary of the bug:
Not written DecoderSpecificInfo in esds atom box in MP4 with set aac_adtstoasc bsf and empty_moov flags.
- mov_init() disable a AVFMT_FLAG_AUTO_BSF flag if FF_MOV_FLAG_EMPTY_MOOV flag set.
https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/movenc.c#L5556-L5559
- Did not called aac_adtstoasc_filter.c in first_frame_done process.
https://github.com/FFmpeg/FFmpeg/blob/master/libavcodec/aac_adtstoasc_bsf.c#L78-L121
- Write esds header without DecoderSpecificInfo before first_frame_done process when disable AVFMT_FLAG_AUTO_BSF. Then player couldn't be played audio.
How to reproduce:
% ffmpeg -i source.ts -f mp4 -vcodec copy -acodec copy -bsf:a aac_adtstoasc dest.mp4 # video and audio could be played % ffmpeg -i source.ts -f mp4 -vcodec copy -acodec copy -bsf:a aac_adtstoasc -movflags empty_moov dest.mp4 # audio couldn't be played! ffmpeg built on 1f5630af51f24d79053b6bef5b8b3ba93d637306 player for test is VLC 2.2.4
Attachments (3)
Change History (7)
comment:1 by , 10 years ago
| Component: | ffmpeg → undetermined |
|---|
by , 10 years ago
by , 10 years ago
by , 10 years ago
| Attachment: | dest_empty_moov.mp4 added |
|---|
follow-up: 3 comment:2 by , 10 years ago
Reproduce terminal with completely output:
➜ tmp ffmpeg -i source.ts -f mp4 -vcodec copy -acodec copy -bsf:a aac_adtstoasc dest.mp4
ffmpeg version 3.1.4 Copyright (c) 2000-2016 the FFmpeg developers
built with Apple LLVM version 7.3.0 (clang-703.0.31)
configuration: --prefix=/usr/local/Cellar/ffmpeg/3.1.4 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libxvid --enable-libfreetype --enable-libvorbis --enable-libvpx --enable-libass --enable-libfdk-aac --enable-libopus --enable-libx265 --enable-libwebp --disable-lzma --enable-nonfree --enable-vda
libavutil 55. 28.100 / 55. 28.100
libavcodec 57. 48.101 / 57. 48.101
libavformat 57. 41.100 / 57. 41.100
libavdevice 57. 0.101 / 57. 0.101
libavfilter 6. 47.100 / 6. 47.100
libavresample 3. 0. 0 / 3. 0. 0
libswscale 4. 1.100 / 4. 1.100
libswresample 2. 1.100 / 2. 1.100
libpostproc 54. 0.100 / 54. 0.100
Input #0, mpegts, from 'source.ts':
Duration: 00:00:09.33, start: 5488.084122, bitrate: 484 kb/s
Program 1
Stream #0:0[0x102]: Data: timed_id3 (ID3 / 0x20334449)
Stream #0:1[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 426x240, 25 fps, 25 tbr, 90k tbn, 6k tbc
Stream #0:2[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 97 kb/s
[mp4 @ 0x7fd7bc803c00] Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead.
Last message repeated 1 times
Output #0, mp4, to 'dest.mp4':
Metadata:
encoder : Lavf57.41.100
Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 426x240, q=2-31, 25 fps, 25 tbr, 90k tbn, 90k tbc
Stream #0:1: Audio: aac (LC) ([64][0][0][0] / 0x0040), 44100 Hz, stereo, 97 kb/s
Stream mapping:
Stream #0:1 -> #0:0 (copy)
Stream #0:2 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame= 233 fps=0.0 q=-1.0 Lsize= 507kB time=00:00:09.33 bitrate= 445.4kbits/s speed= 447x
video:393kB audio:108kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.249113%
➜ tmp ffmpeg -i source.ts -f mp4 -vcodec copy -acodec copy -bsf:a aac_adtstoasc -movflags empty_moov dest_empty_moov.mp4
ffmpeg version 3.1.4 Copyright (c) 2000-2016 the FFmpeg developers
built with Apple LLVM version 7.3.0 (clang-703.0.31)
configuration: --prefix=/usr/local/Cellar/ffmpeg/3.1.4 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libxvid --enable-libfreetype --enable-libvorbis --enable-libvpx --enable-libass --enable-libfdk-aac --enable-libopus --enable-libx265 --enable-libwebp --disable-lzma --enable-nonfree --enable-vda
libavutil 55. 28.100 / 55. 28.100
libavcodec 57. 48.101 / 57. 48.101
libavformat 57. 41.100 / 57. 41.100
libavdevice 57. 0.101 / 57. 0.101
libavfilter 6. 47.100 / 6. 47.100
libavresample 3. 0. 0 / 3. 0. 0
libswscale 4. 1.100 / 4. 1.100
libswresample 2. 1.100 / 2. 1.100
libpostproc 54. 0.100 / 54. 0.100
Input #0, mpegts, from 'source.ts':
Duration: 00:00:09.33, start: 5488.084122, bitrate: 484 kb/s
Program 1
Stream #0:0[0x102]: Data: timed_id3 (ID3 / 0x20334449)
Stream #0:1[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 426x240, 25 fps, 25 tbr, 90k tbn, 6k tbc
Stream #0:2[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 97 kb/s
[mp4 @ 0x7f9839809400] Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead.
Last message repeated 1 times
Output #0, mp4, to 'dest_empty_moov.mp4':
Metadata:
encoder : Lavf57.41.100
Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 426x240, q=2-31, 25 fps, 25 tbr, 90k tbn, 90k tbc
Stream #0:1: Audio: aac (LC) ([64][0][0][0] / 0x0040), 44100 Hz, stereo, 97 kb/s
Stream mapping:
Stream #0:1 -> #0:0 (copy)
Stream #0:2 -> #0:1 (copy)
Press [q] to stop, [?] for help
[mp4 @ 0x7f9839809400] Estimating the duration of the last packet in a fragment, consider setting the duration field in AVPacket instead.
frame= 233 fps=0.0 q=-1.0 Lsize= 505kB time=00:00:09.33 bitrate= 443.0kbits/s speed= 643x
video:393kB audio:108kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.701421%
Show esds atom box using mp4dump command that is included Bento4.
➜ tmp mp4dump dest.mp4 | grep -A12 esds
[esds] size=12+39
[ESDescriptor] size=5+34
es_id = 2
stream_priority = 0
[DecoderConfig] size=5+20
stream_type = 5
object_type = 64
up_stream = 0
buffer_size = 0
max_bitrate = 97157
avg_bitrate = 95114
DecoderSpecificInfo = 12 10
[Descriptor:06] size=5+1
➜ tmp mp4dump dest_empty_moov.mp4 | grep -A11 esds
[esds] size=12+32
[ESDescriptor] size=5+27
es_id = 2
stream_priority = 0
[DecoderConfig] size=5+13
stream_type = 5
object_type = 64
up_stream = 0
buffer_size = 0
max_bitrate = 97157
avg_bitrate = 0
[Descriptor:06] size=5+1
comment:3 by , 10 years ago
Replying to miyukki:
ffmpeg version 3.1.4 Copyright (c) 2000-2016 the FFmpeg developers
This looks different from your original report.
comment:4 by , 10 years ago
Oops sorry, I tried run it with system ffmpeg.
The terminal output with built on 1f5630af51f24d79053b6bef5b8b3ba93d637306
➜ ffmpeg git:(master) ✗ ./ffmpeg -i source.ts -f mp4 -vcodec copy -acodec copy -bsf:a aac_adtstoasc dest.mp4
ffmpeg version N-82759-g1f5630a Copyright (c) 2000-2016 the FFmpeg developers
built with Apple LLVM version 7.3.0 (clang-703.0.31)
configuration: --enable-gpl --enable-libx264
libavutil 55. 41.101 / 55. 41.101
libavcodec 57. 66.109 / 57. 66.109
libavformat 57. 58.101 / 57. 58.101
libavdevice 57. 2.100 / 57. 2.100
libavfilter 6. 68.100 / 6. 68.100
libswscale 4. 3.101 / 4. 3.101
libswresample 2. 4.100 / 2. 4.100
libpostproc 54. 2.100 / 54. 2.100
Input #0, mpegts, from 'source.ts':
Duration: 00:00:09.33, start: 5488.084122, bitrate: 484 kb/s
Program 1
Stream #0:0[0x102]: Data: timed_id3 (ID3 / 0x20334449)
Stream #0:1[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(progressive), 426x240, 25 fps, 25 tbr, 90k tbn, 6k tbc
Stream #0:2[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp,97 kb/s
Output #0, mp4, to 'dest.mp4':
Metadata:
encoder : Lavf57.58.101
Stream #0:0: Video: h264 (Main) ([33][0][0][0] / 0x0021), yuv420p(progressive), 426x240, q=2-31, 25 fps, 25 tbr, 90k tbn, 90k tbc
Stream #0:1: Audio: aac (LC) ([64][0][0][0] / 0x0040), 44100 Hz, stereo, fltp, 97 kb/s
Stream mapping:
Stream #0:1 -> #0:0 (copy)
Stream #0:2 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame= 233 fps=0.0 q=-1.0 Lsize= 507kB time=00:00:09.31 bitrate= 446.5kbits/s speed=783x
video:393kB audio:108kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.249113%
➜ ffmpeg git:(master) ✗ ./ffmpeg -i source.ts -f mp4 -vcodec copy -acodec copy -bsf:a aac_adtstoasc -movflags empty_moov dest_empty_moov.mp4
ffmpeg version N-82759-g1f5630a Copyright (c) 2000-2016 the FFmpeg developers
built with Apple LLVM version 7.3.0 (clang-703.0.31)
configuration: --enable-gpl --enable-libx264
libavutil 55. 41.101 / 55. 41.101
libavcodec 57. 66.109 / 57. 66.109
libavformat 57. 58.101 / 57. 58.101
libavdevice 57. 2.100 / 57. 2.100
libavfilter 6. 68.100 / 6. 68.100
libswscale 4. 3.101 / 4. 3.101
libswresample 2. 4.100 / 2. 4.100
libpostproc 54. 2.100 / 54. 2.100
Input #0, mpegts, from 'source.ts':
Duration: 00:00:09.33, start: 5488.084122, bitrate: 484 kb/s
Program 1
Stream #0:0[0x102]: Data: timed_id3 (ID3 / 0x20334449)
Stream #0:1[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(progressive), 426x240, 25 fps, 25 tbr, 90k tbn, 6k tbc
Stream #0:2[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp,97 kb/s
Output #0, mp4, to 'dest_empty_moov.mp4':
Metadata:
encoder : Lavf57.58.101
Stream #0:0: Video: h264 (Main) ([33][0][0][0] / 0x0021), yuv420p(progressive), 426x240, q=2-31, 25 fps, 25 tbr, 90k tbn, 90k tbc
Stream #0:1: Audio: aac (LC) ([64][0][0][0] / 0x0040), 44100 Hz, stereo, fltp, 97 kb/s
Stream mapping:
Stream #0:1 -> #0:0 (copy)
Stream #0:2 -> #0:1 (copy)
Press [q] to stop, [?] for help
[mp4 @ 0x7fe0a4003400] Estimating the duration of the last packet in a fragment, consider setting the duration field in AVPacket instead.
frame= 233 fps=0.0 q=-1.0 Lsize= 505kB time=00:00:09.31 bitrate= 444.1kbits/s speed=821x
video:393kB audio:108kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.701421%
➜ ffmpeg git:(master) ✗ mp4dump dest.mp4 | grep -A12 esds
[esds] size=12+39
[ESDescriptor] size=5+34
es_id = 2
stream_priority = 0
[DecoderConfig] size=5+20
stream_type = 5
object_type = 64
up_stream = 0
buffer_size = 0
max_bitrate = 97846
avg_bitrate = 95114
DecoderSpecificInfo = 12 10
[Descriptor:06] size=5+1
➜ ffmpeg git:(master) ✗ mp4dump dest_empty_moov.mp4 | grep -A11 esds
[esds] size=12+32
[ESDescriptor] size=5+27
es_id = 2
stream_priority = 0
[DecoderConfig] size=5+13
stream_type = 5
object_type = 64
up_stream = 0
buffer_size = 0
max_bitrate = 97846
avg_bitrate = 0
[Descriptor:06] size=5+1



Please provide the command line that produces the failing output file together with the complete, uncut console output and a short input file to make this a valid ticket.