AAC initialization error due MPEG-TS parsing issue
- Dominant language
- Java
- Stars
- 21.9k
- Forks
- 6k
- PR merge metrics
- No merged PRs in 30d
Description
### [REQUIRED] Issue description
I'm getting `IllegalStateException` when `OMX.google.aac.decoder` or _ffmpeg_ decoder is initializing for specific MPEG-TS.
```
period=0]com.google.android.exoplayer2.ExoPlaybackException: com.google.android.exoplayer2.ext.ffmpeg.FfmpegDecoderException: Initialization failed.
at com.google.android.exoplayer2.BaseRenderer.createRendererException(BaseRenderer.java:333)
at com.google.android.exoplayer2.audio.SimpleDecoderAudioRenderer.maybeInitDecoder(SimpleDecoderAudioRenderer.java:601)
at com.google.android.exoplayer2.audio.SimpleDecoderAudioRenderer.onInputFormatChanged(SimpleDecoderAudioRenderer.java:642)
at com.google.android.exoplayer2.audio.SimpleDecoderAudioRenderer.render(SimpleDecoderAudioRenderer.java:236)
at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:789)
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:384)
at android.os.Handler.dispatchMessage(Handler.java:101)
at android.os.Looper.loop(Looper.java:164)
at android.os.HandlerThread.run(HandlerThread.java:65)
Caused by: com.google.android.exoplayer2.ext.ffmpeg.FfmpegDecoderException: Initialization failed.
at com.google.android.exoplayer2.ext.ffmpeg.FfmpegDecoder.(FfmpegDecoder.java:78)
at com.google.android.exoplayer2.ext.ffmpeg.FfmpegAudioRenderer.createDecoder(FfmpegAudioRenderer.java:117)
at com.google.android.exoplayer2.ext.ffmpeg.FfmpegAudioRenderer.createDecoder(FfmpegAudioRenderer.java:35)
at com.google.android.exoplayer2.audio.SimpleDecoderAudioRenderer.maybeInitDecoder(SimpleDecoderAudioRenderer.java:594)
... 7 common frames omitted
```
```
D/EventLogger: downstreamFormat [eventTime=2.24, mediaPos=0.00, window=0, period=0, id=354/4165, mimeType=audio/mp4a-latm, codecs=mp4a.40.2, channels=0, sample_rate=48000]
I/OMXClient: Treble IOmx obtained
V/AVUtils: AVUtils::getComponentRole
I/AmAVUtils: AmAVUtils::isAudioExtendFormat input = audio/mp4a-latm
I/ACodec: codec does not support config priority (err -2147483648)
I/ACodec: codec does not support config operating rate (err -2147483648)
D/EventLogger: decoderInitialized [eventTime=2.28, mediaPos=0.00, window=0, period=0, audio, OMX.google.aac.decoder]
D/EventLogger: decoderInputFormat [eventTime=2.28, mediaPos=0.00, window=0, period=0, audio, id=354/4165, mimeType=audio/mp4a-latm, codecs=mp4a.40.2, channels=0, sample_rate=48000]
E/ACodec: [OMX.google.aac.decoder] ERROR(0x80001001)
E/ACodec: signalError(omxError 0x80001001, internalError -2147483648)
E/MediaCodec: Codec reported err 0x80001001, actionCode 0, while in state 6
E/ExoPlayerImplInternal: Renderer error: index=1, type=audio, format=Format(354/4165, null, null, audio/mp4a-latm, mp4a.40.2, -1, null, [-1, -1, -1.0], [0, 48000]), rendererSupport=YES
com.google.android.exoplayer2.ExoPlaybackException: java.lang.IllegalStateException
at com.google.android.exoplayer2.BaseRenderer.createRendererException(BaseRenderer.java:333)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:826)
at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:789)
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:384)
at android.os.Handler.dispatchMessage(Handler.java:101)
at android.os.Looper.loop(Looper.java:164)
at android.os.HandlerThread.run(HandlerThread.java:65)
Caused by: java.lang.IllegalStateException
at android.media.MediaCodec.native_dequeueInputBuffer(Native Method)
at android.media.MediaCodec.dequeueInputBuffer(MediaCodec.java:2559)
at com.google.android.exoplayer2.mediacodec.SynchronousMediaCodecAdapter.dequeueInputBufferIndex(SynchronousMediaCodecAdapter.java:41)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.feedInputBuffer(MediaCodecRenderer.java:1191)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:813)
at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:789)
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:384)
at android.os.Handler.dispatchMessage(Handler.java:101)
at android.os.Looper.loop(Looper.java:164)
at android.os.HandlerThread.run(HandlerThread.java:65)
```
Most probably track info is incorrectly parsed from MPEG-TS. Format looks incorrect (channels number?):
```
id=354/4165, mimeType=audio/mp4a-latm, codecs=mp4a.40.2, channels=0, sample_rate=48000
```
From MediaInfo:
```
Audio
ID : 4165 (0x1045)
Menu ID : 354 (0x162)
Format : AAC LC
Format/Info : Advanced Audio Codec Low Complexity
Format version : Version 2
Muxing mode : ADTS
Codec ID : 15-2
Duration : 33 s 664 ms
Bit rate mode : Variable
Channel(s) : 2 channels
Channel layout : L R
Sampling rate : 48.0 kHz
Frame rate : 46.875 FPS (1024 SPF)
Compression mode : Lossy
Delay relative to video : -80 ms
```
Same stream and local file plays well in VLC and mplayer (using ffmpeg):
```
Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
AUDIO: 48000 Hz, 2 ch, floatle, 0.0 kbit/0.00% (ratio: 0->384000)
Selected audio codec: [ffaac] afm: ffmpeg (FFmpeg AAC (MPEG-2/MPEG-4 Audio))
```
### [REQUIRED] Reproduction steps
Play provided video in demo player
### [REQUIRED] Link to test content
* https://drive.google.com/open?id=1RReOjRDVONMg_pVOgKQRBSurdie9xFZF
### [REQUIRED] A full bug report captured from the device
This is not device-specific, but here it is:
* https://drive.google.com/open?id=1EEYH0BmvWU0qiBmPSU3W5g7WocREBfAW
### [REQUIRED] Version of ExoPlayer being used
* 67b29bbe3956ff9764921c7e71302d3ee464709d
```Init 7341500 [ExoPlayerLib/2.11.3] [once, MIBOX3, Xiaomi, 26]```
### [REQUIRED] Device(s) and version(s) of Android being used
```Init 7341500 [ExoPlayerLib/2.11.3] [once, MIBOX3, Xiaomi, 26]```
Contributor guide
Assessment
This issue has not been assessed yet.