[FFmpeg-trac] #4340(undetermined:new): aac_adtstoasc adds extradata too late for dash muxer
FFmpeg
trac at avcodec.org
Sun Mar 1 22:04:22 CET 2015
#4340: aac_adtstoasc adds extradata too late for dash muxer
-------------------------------------+-------------------------------------
Reporter: oromit | Type: defect
Status: new | Priority: normal
Component: | Version: git-
undetermined | master
Keywords: dash aac | Blocked By:
aac_adtstoasc | Reproduced by developer: 0
Blocking: |
Analyzed by developer: 0 |
-------------------------------------+-------------------------------------
Commandline i'm testing with:
{{{
ffmpeg -v debug -i "$(livestreamer --stream-url
"http://www.twitch.tv/somerandomstream" best)" -bsf:a aac_adtstoasc -c
copy -f dash stream.mpd
}}}
Twitch is using HLS with h264 and aac, basicaly every input that makes the
mp4 muxer hard-request the aac_adtstoasc filter will reproduce the issue.
This results in the dash mpd containing the following codec for the audio
stream: mp4a.40
As far as i'm aware, that's not a valid codec for aac, it should be:
mp4a.40.2
After looking into why it's missing the final .2, when reading the
dashenc.c file, i found that it extracts that value from the codec
extradata(See line 137 in libavformat/dashenc.c).
This extradata should be added by the aac_adtstoasc bitstream filter. I
added some debug outputs, to see in which order stuff is happening, and i
found this:
{{{
[dash @ 0x2ebe4c0] Representation 0 init segment will be written to: init-
stream0.m4s
[dash @ 0x2ebe4c0] Representation 1 init segment will be written to: init-
stream1.m4s
(I added this one) [dash @ 0x2ebe4c0] Generating tag-data for mp4a
(this one) [dash @ 0x2ebe4c0] extradata NOT big enough: 0
[AVIOContext @ 0x2fb5560] Statistics: 0 seeks, 1 writeouts
[dash @ 0x2ebe4c0] Manifest written to: stream.mpd
Output #0, dash, to 'stream.mpd':
Metadata:
encoder : Lavf56.23.106
Stream #0:0, 0, 1/12800: Video: h264 ([33][0][0][0] / 0x0021),
yuv420p(left), 1920x1080 (0x0), 1/25, q=2-31, 25 fps, 25 tbr, 12800 tbn,
25 tbc
Stream #0:1, 0, 1/44100: Audio: aac ([64][0][0][0] / 0x0040), 44100
Hz, stereo, 210 kb/s
Stream mapping:
Stream #0:1 -> #0:0 (copy)
Stream #0:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
(this one) [NULL @ 0x2ed7640] In AAC ADTS Bitstream filter function!
(and this one) [NULL @ 0x2ed7640] Generated AAC extradata with size of 2
}}}
So the dash dash_write_header function is called before the aac bitstream
filter was able to do its job of adding the extradata, and as it only
calculates the codec information once, it is now stuck with a wrong codec
string.
I'm not sure where the problem is located here. It could be the dash
muxer, which does not check for the extradata existing/changing at a later
point.
But it could also be the dash muxer beeing initialized too early, before
the aac bsf could add the extradata.
--
Ticket URL: <https://trac.ffmpeg.org/ticket/4340>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list