[FFmpeg-user] mp4 opus invalid extradata size (missing header)

Juan Navarro juan.navarro at gmx.es
Thu Sep 19 12:49:51 EEST 2019


On 3/9/19 18:38, Juan Navarro wrote:
> Hi,
>
> I'm trying to record a plain RTP stream, both with GStreamer and with
> FFmpeg, with either H.264 or VP8 video codecs, and OPUS audio in all
> cases.
>
> I got this working for VP8+OPUS (WEBM) with GStreamer and FFmpeg, and
> H.264+OPUS (MP4) with GStreamer, but _not_ FFmpeg. After some testing I
> was able to isolate the issue to recording OPUS audio with FFmpeg into
> MP4 container (a somewhat uncommon combination I know, but afaik MP4
> should be technically able to store OPUS, and it works great with
> GStreamer so it is definitely possible).
>
> FFmpeg is missing some extradata, and after the recording is done (after
> pressing 'q'), no moov or any other kind of header is written to the MP4
> file. However, I guess there is actual OPUS audio in the file, as the
> file takes several 100s KB.
>
> FFmpeg version is today's Git master. Report logs, and input SDP files,
> are attached to this email (with full command line and output, as per
> the '-report' option).
>
> For example, trying to load the file with VLC 3.0.7 shows up this:
>
>    VLC media player 3.0.7 Vetinari (revision 3.0.7-0-g86cee31)
>    [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f12acc16500] invalid size 0 in stsd
>    [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f12acc16500] error reading header
>    TagLib: MP4: Invalid atom size
>    Qt: Session management error: None of the authentication protocols
>    specified are supported
>    QApplication: invalid style override passed, ignoring it.
>    [00007f12800049e0] mp4 demux error: MP4 plugin discarded (no
>    moov,foov,moof box)
>    [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f1280000c80] invalid size 0 in stsd
>    [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f1280000c80] error reading header
>    [00007f12800049e0] avcodec demux error: Could not open output.mp4:
>    Unknown error 1094995529
>    TagLib: MP4: Invalid atom size
>
>
> For reference, these commands are used for my tests:
>
> WORKS
>
>    ffmpeg \
>         -protocol_whitelist file,rtp,udp \
>         -fflags +genpts \
>         -i recording/input-vp8.sdp \
>         -map 0:a:0 -c:a copy \
>         -f webm -flags +global_header \
>         -y recording/output-ffmpeg-opus.webm
>
>
> WORKS
>
>    gst-launch-1.0 --eos-on-shutdown \
>         filesrc location=recording/input-h264.sdp \
>             ! sdpdemux timeout=0 name=demux \
>         mp4mux name=mux ! queue \
>             ! filesink location=recording/output-gstreamer-opus.mp4 \
>         demux. ! queue \
>             ! rtpopusdepay \
>             ! opusparse \
>             ! mux.
>
>
> FAILS ("no moov" errors during playback)
>
>    ffmpeg \
>         -protocol_whitelist file,rtp,udp \
>         -fflags +genpts \
>         -i recording/input-h264.sdp \
>         -map 0:a:0 -c:a copy \
>         -f mp4 -strict experimental \
>         -y recording/output-ffmpeg-opus.mp4
>
> Relevant output (full log in attached files):
>
>    Press [q] to stop, [?] for help
>    # Press 'q' after some time recording...
>    [mp4 @ 0x75d2580] invalid extradata size=   0.0kbits/s speed= 1.4x
>    Error writing trailer of recording/output-ffmpeg-opus.mp4: Invalid
>    data found when processing input
>
>
> The RTP transport is provided by a media server (mediasoup), but the
> actual encoded media comes straight from a Chrome WebRTC connection
> (mediasoup just receives it and relays as plain RTP).
>
> Do I need to add some '-flags', '-bsf', or '-movflags' to make this work?
>
> Juan


On 19/9/19 11:45, Juan Navarro wrote:
> Hi, could anyone shed a bit of light here?
> I'm pretty sure it should be possible to receive an H.264 RTP stream and
> store as-is into an MP4 file, given that gst-launch is being able to
> do it.
>
> Maybe I need something akin to the "h264parse" element that's used in
> the GStreamer pipeline? Does FFmpeg apply such parser automatically as
> part of its internal processing?
>
> Thanks,
> Juan
> _______________________________________________
> ffmpeg-user mailing list
> ffmpeg-user at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-user
>
> To unsubscribe, visit link above, or email
> ffmpeg-user-request at ffmpeg.org with subject "unsubscribe".


Sorry I thought the email would get inserted a link to read the topic on
the web, but it's not the case and it's been a while since the first email.
So for reference I'm including the original text.



More information about the ffmpeg-user mailing list