#8436 closed defect (invalid)
ffmpeg sets opus audio to stereo in SDP even though it is mono
Reported by: | rudolfs.bundulis | Owned by: | |
---|---|---|---|
Priority: | minor | Component: | undetermined |
Version: | unspecified | Keywords: | opus sdp |
Cc: | Blocked By: | ||
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | no |
Description
Summary of the bug:
ffmpeg sets a=rtpmap:98 opus/48000/2 indicating a stereo track
in RTSP SDP when the source is actually mono.
How to reproduce:
The input file has been attached (Big buck bunny with a mono audio track that has silence).
% fmpeg -i mono_opus_sample.mp4 -c:v h264 -c:a opus -strict -2 -rtsp_transport tcp -f rtsp rtsp://localhost:554/app/live ffmpeg version 4.2.1 built on macOS 10.15
Here is the output from ffmpeg with -loglevel panic, which shows the invalid SDP:
[rtsp @ 0x7fb9ea805800] SDP: v=0 o=- 0 0 IN IP4 127.0.0.1 s=No Name c=IN IP4 127.0.0.1 t=0 0 a=tool:libavformat 58.29.100 m=video 0 RTP/AVP 96 a=rtpmap:96 H264/90000 a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QADazZQUH7DhAAAAMAEAAAAwPA8UKZYA==,aOvjyyLA; profile-level-id=64000D a=control:streamid=0 m=audio 0 RTP/AVP 97 b=AS:48 a=rtpmap:97 opus/48000/2 # This track should be mono a=control:streamid=1
If not forcing opus (and defaulting to aac), the entry seems correct:
ffmpeg -i mono_opus_sample.mp4 -c:v h264 -rtsp_transport tcp -f rtsp rtsp://localhost:554/app/live
The SDP then is:
[rtsp @ 0x7fd58c013800] SDP: v=0 o=- 0 0 IN IP4 127.0.0.1 s=No Name c=IN IP4 127.0.0.1 t=0 0 a=tool:libavformat 58.29.100 m=video 0 RTP/AVP 96 a=rtpmap:96 H264/90000 a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QADazZQUH7DhAAAAMAEAAAAwPA8UKZYA==,aOvjyyLA; profile-level-id=64000D a=control:streamid=0 m=audio 0 RTP/AVP 97 b=AS:69 a=rtpmap:97 MPEG4-GENERIC/48000/1 # Mono, as it should be a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=118856E500 a=control:streamid=1
Attachments (1)
Change History (9)
by , 5 years ago
Attachment: | mono_opus_sample.mp4 added |
---|
comment:1 by , 5 years ago
Version: | unspecified → 4.2 |
---|
comment:2 by , 5 years ago
Version: | 4.2 → unspecified |
---|
Is the issue reproducible with current FFmpeg git head?
Please provide the command line you tested together with the complete, uncut console output to make this a valid ticket.
comment:3 by , 5 years ago
Ok, I'll retest with git head and provide feedback as well as the full output (I pasted the rtsp output since it perfectly showed the issue, but I'll provide the full output from git head).
comment:4 by , 5 years ago
./ffmpeg -i /Users/rudolfs/Downloads/mono_opus_sample.mp4 -c:v h264 -c:a opus -strict -2 -rtsp_transport tcp -f rtsp rtsp://localhost:554/app/live -loglevel verbose ffmpeg version N-96159-gb0d0d7e4d0 Copyright (c) 2000-2019 the FFmpeg developers built with Apple clang version 11.0.0 (clang-1100.0.33.16) configuration: --prefix=/usr/local --enable-gpl --enable-libx264 --enable-libopus libavutil 56. 37.100 / 56. 37.100 libavcodec 58. 65.100 / 58. 65.100 libavformat 58. 35.101 / 58. 35.101 libavdevice 58. 9.101 / 58. 9.101 libavfilter 7. 69.101 / 7. 69.101 libswscale 5. 6.100 / 5. 6.100 libswresample 3. 6.100 / 3. 6.100 libpostproc 55. 6.100 / 55. 6.100 Routing option strict to both codec and muxer layer [h264 @ 0x7feb79002c00] Reinit context to 320x240, pix_fmt: yuv420p Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/rudolfs/Downloads/mono_opus_sample.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf58.29.100 Duration: 00:00:02.07, start: 0.000000, bitrate: 107 kb/s Stream #0:0(und): Audio: opus (Opus / 0x7375704F), 48000 Hz, mono, fltp, delay 120, 48 kb/s (default) Metadata: handler_name : SoundHandler Stream #0:1(und): Video: h264 (High), 1 reference frame (avc1 / 0x31637661), yuv420p(left), 320x240 [SAR 4:3 DAR 16:9], 48 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default) Metadata: handler_name : GPAC ISO Video Handler Matched encoder 'libx264' for codec 'h264'. Stream mapping: Stream #0:1 -> #0:0 (h264 (native) -> h264 (libx264)) Stream #0:0 -> #0:1 (opus (native) -> opus (native)) Press [q] to stop, [?] for help [h264 @ 0x7feb78829a00] Reinit context to 320x240, pix_fmt: yuv420p [graph_1_in_0_0 @ 0x7feb76d089c0] tb:1/48000 samplefmt:fltp samplerate:48000 chlayout:0x4 [graph 0 input from stream 0:1 @ 0x7feb76d0f7c0] w:320 h:240 pixfmt:yuv420p tb:1/15360 fr:30/1 sar:4/3 sws_param:flags=2 [libx264 @ 0x7feb78815e00] using SAR=4/3 [libx264 @ 0x7feb78815e00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2 [libx264 @ 0x7feb78815e00] profile High, level 1.3 [libx264 @ 0x7feb78815e00] 264 - core 155 r2917 0a84d98 - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=7 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00 [tcp @ 0x7feb76d13780] Starting connection attempt to 127.0.0.1 port 554 [tcp @ 0x7feb76d13780] Successfully connected to 127.0.0.1 port 554 [rtsp @ 0x7feb78817a00] SDP: v=0 o=- 0 0 IN IP4 127.0.0.1 s=No Name c=IN IP4 127.0.0.1 t=0 0 a=tool:libavformat 58.35.101 m=video 0 RTP/AVP 96 a=rtpmap:96 H264/90000 a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QADazZQUH7DhAAAAMAEAAAAwPA8UKZYA==,aOvjyyLA; profile-level-id=64000D a=control:streamid=0 m=audio 0 RTP/AVP 97 b=AS:48 a=rtpmap:97 opus/48000/2 a=control:streamid=1 Output #0, rtsp, to 'rtsp://localhost:554/app/live': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf58.35.101 Stream #0:0(und): Video: h264 (libx264), 1 reference frame, yuv420p(left), 320x240 [SAR 4:3 DAR 16:9], q=-1--1, 30 fps, 90k tbn, 30 tbc (default) Metadata: handler_name : GPAC ISO Video Handler encoder : Lavc58.65.100 libx264 Side data: cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A Stream #0:1(und): Audio: opus, 48000 Hz, mono, fltp, delay 120, 48 kb/s (default) Metadata: handler_name : SoundHandler encoder : Lavc58.65.100 opus No more output streams to write to, finishing. frame= 62 fps=0.0 q=-1.0 Lsize=N/A time=00:00:02.00 bitrate=N/A speed=22.9x video:12kB audio:12kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown Input file #0 (/Users/rudolfs/Downloads/mono_opus_sample.mp4): Input stream #0:0 (audio): 101 packets read (12221 bytes); 101 frames decoded (96840 samples); Input stream #0:1 (video): 62 packets read (12460 bytes); 62 frames decoded; Total: 163 packets (24681 bytes) demuxed Output file #0 (rtsp://localhost:554/app/live): Output stream #0:0 (video): 62 frames encoded; 62 packets muxed (11900 bytes); Output stream #0:1 (audio): 807 frames encoded (96840 samples); 101 packets muxed (12221 bytes); Total: 163 packets (24121 bytes) muxed [libx264 @ 0x7feb78815e00] frame I:1 Avg QP: 3.56 size: 65 [libx264 @ 0x7feb78815e00] frame P:26 Avg QP:20.19 size: 371 [libx264 @ 0x7feb78815e00] frame B:35 Avg QP:17.63 size: 43 [libx264 @ 0x7feb78815e00] consecutive B-frames: 16.1% 22.6% 9.7% 51.6% [libx264 @ 0x7feb78815e00] mb I I16..4: 100.0% 0.0% 0.0% [libx264 @ 0x7feb78815e00] mb P I16..4: 3.1% 0.1% 1.0% P16..4: 2.3% 1.0% 1.1% 0.0% 0.0% skip:91.4% [libx264 @ 0x7feb78815e00] mb B I16..4: 0.0% 0.0% 0.0% B16..8: 0.5% 0.3% 0.3% direct: 0.2% skip:98.7% L0:47.0% L1:47.4% BI: 5.6% [libx264 @ 0x7feb78815e00] 8x8 transform intra:0.6% inter:29.8% [libx264 @ 0x7feb78815e00] coded y,uvDC,uvAC intra: 8.7% 14.2% 13.0% inter: 0.9% 1.7% 1.1% [libx264 @ 0x7feb78815e00] i16 v,h,dc,p: 92% 1% 7% 0% [libx264 @ 0x7feb78815e00] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 0% 6% 38% 12% 0% 25% 6% 12% 0% [libx264 @ 0x7feb78815e00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 50% 21% 12% 3% 3% 5% 2% 2% 2% [libx264 @ 0x7feb78815e00] i8c dc,h,v,p: 88% 4% 8% 1% [libx264 @ 0x7feb78815e00] Weighted P-Frames: Y:15.4% UV:11.5% [libx264 @ 0x7feb78815e00] ref P L0: 83.1% 4.8% 6.9% 5.1% [libx264 @ 0x7feb78815e00] ref B L0: 80.1% 7.2% 12.8% [libx264 @ 0x7feb78815e00] kb/s:43.40 [opus @ 0x7feb78818000] Average Intensity Stereo band: 21.0 [opus @ 0x7feb78818000] Dual Stereo used: 0.00% [AVIOContext @ 0x7feb76e00840] Statistics: 27752 bytes read, 0 seeks
This is the output from git head, as you can see the issue is still present - the stream is listed as mono:
Stream #0:0(und): Audio: opus (Opus / 0x7375704F), 48000 Hz, mono, fltp, delay 120, 48 kb/s (default)
but advertised as stereo in sdp:
a=rtpmap:97 opus/48000/2
follow-up: 6 comment:5 by , 5 years ago
Did you see a05f5052fef3b3743fab7846da12861d8a8098ec?
Is the comment wrong?
comment:6 by , 5 years ago
Replying to cehoyos:
Did you see a05f5052fef3b3743fab7846da12861d8a8098ec?
Is the comment wrong?
Thanks for the link, I looked at the commit and then at https://tools.ietf.org/html/rfc7587 and yeah under paragraph 7 it has:
The media subtype ("opus") goes in SDP "a=rtpmap" as the encoding name. The RTP clock rate in "a=rtpmap" MUST be 48000, and the number of channels MUST be 2.
so the comment is correct, will close the issue.
comment:7 by , 5 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
comment:8 by , 5 years ago
Keywords: | rtsp removed |
---|
Big buck bunny with a silent opus mono audio track