[FFmpeg-trac] #3180(avformat:open): flv demuxer does not decode the aac audio properly

FFmpeg trac at avcodec.org
Fri Nov 29 11:33:05 CET 2013


#3180: flv demuxer does not decode the aac audio properly
------------------------------------+------------------------------------
             Reporter:  merbanan    |                    Owner:
                 Type:  defect      |                   Status:  open
             Priority:  normal      |                Component:  avformat
              Version:  git-master  |               Resolution:
             Keywords:  flv aac     |               Blocked By:
             Blocking:              |  Reproduced by developer:  1
Analyzed by developer:  0           |
------------------------------------+------------------------------------
Changes (by cehoyos):

 * status:  new => open
 * component:  undetermined => avformat
 * version:  unspecified => git-master
 * keywords:   => flv aac
 * reproduced:  0 => 1


Old description:

> ./ffmpeg -i rtmpt_stream2.flv
> ffmpeg version N-58535-g58010e5 Copyright (c) 2000-2013 the FFmpeg
> developers
>   built on Nov 28 2013 21:28:49 with gcc 4.8 (Ubuntu/Linaro
> 4.8.1-10ubuntu9)
>   configuration:
>   libavutil      52. 55.100 / 52. 55.100
>   libavcodec     55. 44.100 / 55. 44.100
>   libavformat    55. 21.102 / 55. 21.102
>   libavdevice    55.  5.102 / 55.  5.102
>   libavfilter     3. 91.100 /  3. 91.100
>   libswscale      2.  5.101 /  2.  5.101
>   libswresample   0. 17.104 /  0. 17.104
> Input #0, flv, from 'rtmpt_stream2.flv':
>   Metadata:
>     Encoder         : Omnia A/XE
>     StreamTitle     :
>     StreamUrl       :
>   Duration: 00:00:11.87, start: 0.000000, bitrate: 35 kb/s
>     Stream #0:0: Audio: aac, 44100 Hz, mono, fltp, 32 kb/s
> At least one output file must be specified
>
> FFmpeg identifies the channels by parsing the aac extra data which
> indicates that the file is a mono stream.
>

> ./ffmpeg -i rtmpt_stream2.flv out.wav
> ffmpeg version N-58535-g58010e5 Copyright (c) 2000-2013 the FFmpeg
> developers
>   built on Nov 28 2013 21:28:49 with gcc 4.8 (Ubuntu/Linaro
> 4.8.1-10ubuntu9)
>   configuration:
>   libavutil      52. 55.100 / 52. 55.100
>   libavcodec     55. 44.100 / 55. 44.100
>   libavformat    55. 21.102 / 55. 21.102
>   libavdevice    55.  5.102 / 55.  5.102
>   libavfilter     3. 91.100 /  3. 91.100
>   libswscale      2.  5.101 /  2.  5.101
>   libswresample   0. 17.104 /  0. 17.104
> Input #0, flv, from 'rtmpt_stream2.flv':
>   Metadata:
>     Encoder         : Omnia A/XE
>     StreamTitle     :
>     StreamUrl       :
>   Duration: 00:00:11.87, start: 0.000000, bitrate: 35 kb/s
>     Stream #0:0: Audio: aac, 44100 Hz, mono, fltp, 32 kb/s
> File 'out.wav' already exists. Overwrite ? [y/N] y
> Output #0, wav, to 'out.wav':
>   Metadata:
>     StreamUrl       :
>     StreamTitle     :
>     ISFT            : Lavf55.21.102
>     Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz,
> mono, s16, 705 kb/s
> Stream mapping:
>   Stream #0:0 -> #0:0 (aac -> pcm_s16le)
> Press [q] to stop, [?] for help
> [aac @ 0x1f8b440] Parametric Stereo signaled to be not-present but was
> found in the bitstream.
>     Last message repeated 248 times
> size=    1036kB time=00:00:11.91 bitrate= 712.3kbits/s
> video:0kB audio:1036kB subtitle:0 global headers:0kB muxing overhead
> 0.007541%
>
> Decoding it shows that the aac stream contains parametric stereo.
>
> The onMetaData indicates that this stream actually contains a stereo
> stream.
>
> File onMetaData block
> DEBUG: Property: <Name:           duration, NUMBER:    0.00>
> DEBUG: Property: <Name:      audiodatarate, NUMBER:    32.00>
> DEBUG: Property: <Name:    audiosamplerate, NUMBER:    44100.00>
> DEBUG: Property: <Name:    audiosamplesize, NUMBER:    16.00>
> DEBUG: Property: <Name:             stereo, BOOLEAN:    TRUE>
> DEBUG: Property: <Name:       audiocodecid, NUMBER:    10.00>
> DEBUG: Property: <Name:            Encoder, STRING:    Omnia A/XE>
> DEBUG: Property: <Name:        StreamTitle, STRING:    >
> DEBUG: Property: <Name:          StreamUrl, STRING:    >
>

> So the suggestion is to change the demuxer to replace the aac extra data
> with a valid version. The replace condition should be based on codec,
> data rate and stereo flag.

New description:

 {{{
 ./ffmpeg -i rtmpt_stream2.flv
 ffmpeg version N-58535-g58010e5 Copyright (c) 2000-2013 the FFmpeg
 developers
   built on Nov 28 2013 21:28:49 with gcc 4.8 (Ubuntu/Linaro
 4.8.1-10ubuntu9)
   configuration:
   libavutil      52. 55.100 / 52. 55.100
   libavcodec     55. 44.100 / 55. 44.100
   libavformat    55. 21.102 / 55. 21.102
   libavdevice    55.  5.102 / 55.  5.102
   libavfilter     3. 91.100 /  3. 91.100
   libswscale      2.  5.101 /  2.  5.101
   libswresample   0. 17.104 /  0. 17.104
 Input #0, flv, from 'rtmpt_stream2.flv':
   Metadata:
     Encoder         : Omnia A/XE
     StreamTitle     :
     StreamUrl       :
   Duration: 00:00:11.87, start: 0.000000, bitrate: 35 kb/s
     Stream #0:0: Audio: aac, 44100 Hz, mono, fltp, 32 kb/s
 At least one output file must be specified

 FFmpeg identifies the channels by parsing the aac extra data which
 indicates that the file is a mono stream.


 ./ffmpeg -i rtmpt_stream2.flv out.wav
 ffmpeg version N-58535-g58010e5 Copyright (c) 2000-2013 the FFmpeg
 developers
   built on Nov 28 2013 21:28:49 with gcc 4.8 (Ubuntu/Linaro
 4.8.1-10ubuntu9)
   configuration:
   libavutil      52. 55.100 / 52. 55.100
   libavcodec     55. 44.100 / 55. 44.100
   libavformat    55. 21.102 / 55. 21.102
   libavdevice    55.  5.102 / 55.  5.102
   libavfilter     3. 91.100 /  3. 91.100
   libswscale      2.  5.101 /  2.  5.101
   libswresample   0. 17.104 /  0. 17.104
 Input #0, flv, from 'rtmpt_stream2.flv':
   Metadata:
     Encoder         : Omnia A/XE
     StreamTitle     :
     StreamUrl       :
   Duration: 00:00:11.87, start: 0.000000, bitrate: 35 kb/s
     Stream #0:0: Audio: aac, 44100 Hz, mono, fltp, 32 kb/s
 File 'out.wav' already exists. Overwrite ? [y/N] y
 Output #0, wav, to 'out.wav':
   Metadata:
     StreamUrl       :
     StreamTitle     :
     ISFT            : Lavf55.21.102
     Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, mono,
 s16, 705 kb/s
 Stream mapping:
   Stream #0:0 -> #0:0 (aac -> pcm_s16le)
 Press [q] to stop, [?] for help
 [aac @ 0x1f8b440] Parametric Stereo signaled to be not-present but was
 found in the bitstream.
     Last message repeated 248 times
 size=    1036kB time=00:00:11.91 bitrate= 712.3kbits/s
 video:0kB audio:1036kB subtitle:0 global headers:0kB muxing overhead
 0.007541%
 }}}
 Decoding it shows that the aac stream contains parametric stereo.

 The onMetaData indicates that this stream actually contains a stereo
 stream.

 File onMetaData block
 DEBUG: Property: <Name:           duration, NUMBER:    0.00>
 DEBUG: Property: <Name:      audiodatarate, NUMBER:    32.00>
 DEBUG: Property: <Name:    audiosamplerate, NUMBER:    44100.00>
 DEBUG: Property: <Name:    audiosamplesize, NUMBER:    16.00>
 DEBUG: Property: <Name:             stereo, BOOLEAN:    TRUE>
 DEBUG: Property: <Name:       audiocodecid, NUMBER:    10.00>
 DEBUG: Property: <Name:            Encoder, STRING:    Omnia A/XE>
 DEBUG: Property: <Name:        StreamTitle, STRING:    >
 DEBUG: Property: <Name:          StreamUrl, STRING:    >


 So the suggestion is to change the demuxer to replace the aac extra data
 with a valid version. The replace condition should be based on codec, data
 rate and stereo flag.

--

--
Ticket URL: <https://trac.ffmpeg.org/ticket/3180#comment:1>
FFmpeg <http://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list