Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Opening huge (<4GB) MKV files fails #641

Closed
ened opened this issue Jul 22, 2015 · 14 comments
Closed

Opening huge (<4GB) MKV files fails #641

ened opened this issue Jul 22, 2015 · 14 comments

Comments

@ened
Copy link
Contributor

ened commented Jul 22, 2015

Given I open a file with these specs (via ffmpeg -i):

ffmpeg version 2.6.3 Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.3 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-libfreetype --enable-libtheora --enable-libvorbis --enable-libvpx --enable-librtmp --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libass --enable-ffplay --enable-libspeex --enable-libschroedinger --enable-libfdk-aac --enable-libopus --enable-frei0r --enable-libopenjpeg --disable-decoder=jpeg2000 --extra-cflags='-I/usr/local/Cellar/openjpeg/1.5.1_1/include/openjpeg-1.5 ' --enable-nonfree --enable-vda
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, matroska,webm, from 'SampleFile.mkv':
  Metadata:
    title           : SampleFile
    creation_time   : 2015-05-06 13:56:42
    ENCODER         : Lavf55.12.0
  Duration: 01:38:38.04, start: 0.000000, bitrate: 5335 kb/s
    Chapter #0:0: start 0.000000, end 550.675000
    Metadata:
      title           : Chapter 1
    Chapter #0:1: start 550.675000, end 845.636000
    Metadata:
      title           : Chapter 2
    Chapter #0:2: start 845.636000, end 1499.999000
    Metadata:
      title           : Chapter 3
    Chapter #0:3: start 1499.999000, end 2194.984000
    Metadata:
      title           : Chapter 4
    Chapter #0:4: start 2194.984000, end 2849.180000
    Metadata:
      title           : Chapter 5
    Chapter #0:5: start 2849.180000, end 3599.513000
    Metadata:
      title           : Chapter 6
    Chapter #0:6: start 3599.513000, end 4225.555000
    Metadata:
      title           : Chapter 7
    Chapter #0:7: start 4225.555000, end 4661.740000
    Metadata:
      title           : Chapter 8
    Chapter #0:8: start 4661.740000, end 5274.686000
    Metadata:
      title           : Chapter 9
    Chapter #0:9: start 5274.686000, end 5918.037000
    Metadata:
      title           : Chapter 10
    Stream #0:0: Video: mpeg4 (Simple Profile), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 24k tbc (default)
    Stream #0:1(eng): Audio: aac (LC), 48000 Hz, stereo, fltp (default)
    Metadata:
      title           : Stereo
    Stream #0:2(ger): Audio: aac (LC), 48000 Hz, stereo, fltp
    Metadata:
      title           : Stereo
    Stream #0:3(fre): Audio: aac (LC), 48000 Hz, stereo, fltp
    Metadata:
      title           : Stereo
    Stream #0:4(spa): Audio: aac (LC), 48000 Hz, stereo, fltp
    Metadata:
      title           : Stereo
    Stream #0:5(eng): Subtitle: subrip
    Metadata:
      title           : SUB_ENG
    Stream #0:6(ger): Subtitle: subrip
    Metadata:
      title           : SUB_GER
    Stream #0:7(spa): Subtitle: subrip
    Metadata:
      title           : SUB_SPA
    Stream #0:8(fre): Subtitle: subrip
    Metadata:
      title           : SUB_FRE
At least one output file must be specified

The file size is 3946839747 bytes.

Then ExoPlayer (85e0bca) will crash like this:

07-22 05:44:48.449    5893-3860/com.company.productmediacodectest E/ExoPlayerImplInternal﹕ Internal track renderer error.
    com.google.android.exoplayer.ExoPlaybackException: com.google.android.exoplayer.extractor.ExtractorSampleSource$UnrecognizedInputFormatException: None of the extractors [com.google.android.exoplayer.extractor.webm.WebmExtractor@41f42138, com.google.android.exoplayer.extractor.mp4.FragmentedMp4Extractor@41db8130, com.google.android.exoplayer.extractor.mp4.Mp4Extractor@41db8300, com.google.android.exoplayer.extractor.mp3.Mp3Extractor@41db8438, com.google.android.exoplayer.extractor.ts.AdtsExtractor@41db8500, com.google.android.exoplayer.extractor.ts.TsExtractor@41db8618] could read the stream.
            at com.google.android.exoplayer.MediaCodecTrackRenderer.maybeThrowError(MediaCodecTrackRenderer.java:782)
            at com.google.android.exoplayer.ExoPlayerImplInternal.incrementalPrepareInternal(ExoPlayerImplInternal.java:274)
            at com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:197)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:193)
            at android.os.HandlerThread.run(HandlerThread.java:61)
            at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)
     Caused by: com.google.android.exoplayer.extractor.ExtractorSampleSource$UnrecognizedInputFormatException: None of the extractors [com.google.android.exoplayer.extractor.webm.WebmExtractor@41f42138, com.google.android.exoplayer.extractor.mp4.FragmentedMp4Extractor@41db8130, com.google.android.exoplayer.extractor.mp4.Mp4Extractor@41db8300, com.google.android.exoplayer.extractor.mp3.Mp3Extractor@41db8438, com.google.android.exoplayer.extractor.ts.AdtsExtractor@41db8500, com.google.android.exoplayer.extractor.ts.TsExtractor@41db8618] could read the stream.
            at com.google.android.exoplayer.extractor.ExtractorSampleSource$ExtractorHolder.selectExtractor(ExtractorSampleSource.java:784)
            at com.google.android.exoplayer.extractor.ExtractorSampleSource$ExtractingLoadable.load(ExtractorSampleSource.java:715)
            at com.google.android.exoplayer.upstream.Loader$LoadTask.run(Loader.java:209)
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:848)

This used to be ok at ExoPlayer 1.4.0 - at least it would start before crashing with something else.

Initialisation code:

final ExtractorSampleSource sampleSource = new ExtractorSampleSource(uri,
        new ContentDataSource(this), new DefaultAllocator(65534), 10485760);

final TrackRenderer videoRenderer = new MediaCodecVideoTrackRenderer(sampleSource, MediaCodec.VIDEO_SCALING_MODE_SCALE_TO_FIT);
final TrackRenderer audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource);
final TrackRenderer subtitleRenderer = new TextTrackRenderer(sampleSource, new TextRenderer() {
    @Override
    public void onCues(final List<Cue> list) {
    }
}, Looper.myLooper(), new TtmlParser(), new WebvttParser());

exoPlayer = ExoPlayer.Factory.newInstance(numRenderers);
exoPlayer.addListener(new ExoPlayer.Listener() {
    @Override
    public void onPlayerStateChanged(final boolean playWhenReady, final int playbackState) {
    }

    @Override
    public void onPlayWhenReadyCommitted() {
    }

    @Override
    public void onPlayerError(final ExoPlaybackException e) {
    }
});
exoPlayer.sendMessage(videoRenderer, MediaCodecVideoTrackRenderer.MSG_SET_SURFACE, new Surface(surface));
exoPlayer.prepare(videoRenderer, audioRenderer, subtitleRenderer);
exoPlayer.setPlayWhenReady(true);

@ojw28 do you require a sample clip?

@ojw28
Copy link
Contributor

ojw28 commented Jul 22, 2015

Hi. We just added format detection to automatically determine/check the container type. It appears your sample isn't being detected as MKV (or anything else, for that matter). You can debug by:

  1. Modify your code to explicitly pass a WebmExtractor as the final argument when creating the ExtractorSampleSource. This will make it so that MKV/WebM are the only formats being checked.
  2. Add some debugging to extractor.webm.Sniffer to determine why the sniff method is returning false. It should return true.

@ojw28
Copy link
Contributor

ojw28 commented Jul 22, 2015

It's plausible that the change referenced above may have fixed this issue for you, although this is just a guess! Let us know if it's resolved. If it's not, please debug as above and/or provide the front of the file so that we can do so ourselves (the first couple of MBs of the file should be sufficient).

@ened
Copy link
Contributor Author

ened commented Jul 23, 2015

Sent a sample file to your olly.exoplayer@gmail.com address in step 1. Will try to find time for a bit more in-depth debugging.

@ojw28
Copy link
Contributor

ojw28 commented Jul 23, 2015

The sample file you that you sent doesn't appear to fail in the way mentioned at the top of this issue. At least for me, sniffing appears to complete successfully (with or without the recent change ref'd above). Is the sample the exact head of the file for which you encountered the issue?

@ened
Copy link
Contributor Author

ened commented Jul 23, 2015

Yes, definitely. I used dd to get the head of the file.

I did some debugging on opening the huge file.. it seems the input length will always stay "0" in ExtractorSampleSource:710, which is because ContentDataSource:79 uses FileInputStream.available() to estimate the number of bytes but definitely should not do that as there is no guarantee the method returns the actual size. Instead, we should use File.length.

@ojw28
Copy link
Contributor

ojw28 commented Jul 23, 2015

So you're accessing the file through a content:// URI? Presumably the same video will work fine if you access it through a file:// URI, in that case and if that's the problem, since FileDataSource does use File.length?

I'm not sure you can use File.length in the content:// URI case. If you look at how available() is implemented for FileInputStream, it should work correctly. Although in this case the file is greater than 2^31 bytes long, and so is larger than what available() can return, which is probably why you see 0. The correct thing to do would probably be to convert 0 to C.LENGTH_UNBOUNDED.

@ened
Copy link
Contributor Author

ened commented Jul 23, 2015

No. I'm passing a file:/// URL:
screen shot 2015-07-23 at 19 06 02

@ojw28
Copy link
Contributor

ojw28 commented Jul 23, 2015

I'm confused. If you're using file:///, why are you using ContentDataSource (as opposed to FileDataSource)? If you use DefaultUriDataSource, which automatically chooses the correct one to use, it should be selecting FileDataSource for file:/// URIs.

@ened
Copy link
Contributor Author

ened commented Jul 23, 2015

Ok true.. and there is the problem. Switching to FileDataSource opens the file.
I'm wondering if we should support auto-selection of DataSources, just as it works with the Extractors to prevent such issue, but this could be another topic.

Thanks for your help.

@ened ened closed this as completed Jul 23, 2015
@ojw28
Copy link
Contributor

ojw28 commented Jul 23, 2015

Well, you should just use DefaultUriDataSource. It auto-selects the correct implementation to delegate to.

The specific problem you were hitting is that ContentDataSource (and AssetDataSource), return incorrect length when accessing content larger than 2^31. We should fix that for ContentDataSource. For AssetDataSource it's unnecessary, because anyone shipping an apk larger than 2^31 bytes is crazy (I doubt this is even possible).

@ojw28 ojw28 reopened this Jul 23, 2015
@ojw28
Copy link
Contributor

ojw28 commented Jul 23, 2015

By the way, have you made any modifications to get the video playing for this file, or are you seeing audio only playback (this relates loosely to #631).

@ened
Copy link
Contributor Author

ened commented Jul 23, 2015

Right I'm seeing Audio only, however a) I'm I can only test on a engineer build Android device in this hour b) this used to work before. Will check again tomorrow early morning and let you know.

@ojw28
Copy link
Contributor

ojw28 commented Jul 23, 2015

This should work (with video) on the latest dev.

@ojw28 ojw28 closed this as completed Jul 23, 2015
@ened
Copy link
Contributor Author

ened commented Jul 24, 2015

I'm seeing errors like this now:

07-24 11:01:05.316    4374-5916/com.company.mediacodectest E/dalvikvm﹕ Could not find class 'android.media.MediaCodec$CodecException', referenced from method com.google.android.exoplayer.MediaCodecTrackRenderer$DecoderInitializationException.getDiagnosticInfoV21
07-24 11:01:05.321    4374-5916/com.company.mediacodectest E/ExoPlayerImplInternal﹕ Internal track renderer error.
    com.google.android.exoplayer.ExoPlaybackException: com.google.android.exoplayer.MediaCodecTrackRenderer$DecoderInitializationException: Decoder init failed: OMX.MTK.AUDIO.DECODER.AAC, MediaFormat(audio/mp4a-latm, -1, -1, -1, -1.0, 2, 48000, 5918037000, -1, -1)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.notifyAndThrowDecoderInitError(MediaCodecTrackRenderer.java:387)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.maybeInitCodec(MediaCodecTrackRenderer.java:374)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.onInputFormatChanged(MediaCodecTrackRenderer.java:739)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.readFormat(MediaCodecTrackRenderer.java:511)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.doSomeWork(MediaCodecTrackRenderer.java:492)
            at com.google.android.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:417)
            at com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:205)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:193)
            at android.os.HandlerThread.run(HandlerThread.java:61)
            at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)
     Caused by: com.google.android.exoplayer.MediaCodecTrackRenderer$DecoderInitializationException: Decoder init failed: OMX.MTK.AUDIO.DECODER.AAC, MediaFormat(audio/mp4a-latm, -1, -1, -1, -1.0, 2, 48000, 5918037000, -1, -1)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.maybeInitCodec(MediaCodecTrackRenderer.java:374)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.onInputFormatChanged(MediaCodecTrackRenderer.java:739)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.readFormat(MediaCodecTrackRenderer.java:511)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.doSomeWork(MediaCodecTrackRenderer.java:492)
            at com.google.android.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:417)
            at com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:205)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:193)
            at android.os.HandlerThread.run(HandlerThread.java:61)
            at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)
     Caused by: java.lang.IllegalStateException
            at android.media.MediaCodec.getBuffers(Native Method)
            at android.media.MediaCodec.getInputBuffers(MediaCodec.java:547)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.maybeInitCodec(MediaCodecTrackRenderer.java:371)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.onInputFormatChanged(MediaCodecTrackRenderer.java:739)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.readFormat(MediaCodecTrackRenderer.java:511)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.doSomeWork(MediaCodecTrackRenderer.java:492)
            at com.google.android.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:417)
            at com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:205)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:193)
            at android.os.HandlerThread.run(HandlerThread.java:61)
            at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)
07-24 11:01:05.322    4374-4374/com.company.mediacodectest E/com.company.videoformattest.PlayerActivity﹕ errors: Error in ExoPlayer
    com.google.android.exoplayer.ExoPlaybackException: com.google.android.exoplayer.MediaCodecTrackRenderer$DecoderInitializationException: Decoder init failed: OMX.MTK.AUDIO.DECODER.AAC, MediaFormat(audio/mp4a-latm, -1, -1, -1, -1.0, 2, 48000, 5918037000, -1, -1)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.notifyAndThrowDecoderInitError(MediaCodecTrackRenderer.java:387)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.maybeInitCodec(MediaCodecTrackRenderer.java:374)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.onInputFormatChanged(MediaCodecTrackRenderer.java:739)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.readFormat(MediaCodecTrackRenderer.java:511)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.doSomeWork(MediaCodecTrackRenderer.java:492)
            at com.google.android.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:417)
            at com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:205)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:193)
            at android.os.HandlerThread.run(HandlerThread.java:61)
            at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)
     Caused by: com.google.android.exoplayer.MediaCodecTrackRenderer$DecoderInitializationException: Decoder init failed: OMX.MTK.AUDIO.DECODER.AAC, MediaFormat(audio/mp4a-latm, -1, -1, -1, -1.0, 2, 48000, 5918037000, -1, -1)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.maybeInitCodec(MediaCodecTrackRenderer.java:374)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.onInputFormatChanged(MediaCodecTrackRenderer.java:739)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.readFormat(MediaCodecTrackRenderer.java:511)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.doSomeWork(MediaCodecTrackRenderer.java:492)
            at com.google.android.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:417)
            at com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:205)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:193)
            at android.os.HandlerThread.run(HandlerThread.java:61)
            at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)
     Caused by: java.lang.IllegalStateException
            at android.media.MediaCodec.getBuffers(Native Method)
            at android.media.MediaCodec.getInputBuffers(MediaCodec.java:547)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.maybeInitCodec(MediaCodecTrackRenderer.java:371)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.onInputFormatChanged(MediaCodecTrackRenderer.java:739)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.readFormat(MediaCodecTrackRenderer.java:511)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.doSomeWork(MediaCodecTrackRenderer.java:492)
            at com.google.android.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:417)
            at com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:205)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:193)
            at android.os.HandlerThread.run(HandlerThread.java:61)
            at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)

And when trying again, this error pops up:

07-24 11:06:21.152    4374-6729/com.company.mediacodectest E/ACodec﹕ Unable to instantiate decoder 'OMX.MTK.AUDIO.DECODER.AAC'.
07-24 11:06:21.152    4374-6729/com.company.mediacodectest E/MediaCodec﹕ Codec reported an error. (omx error 0x80001003, internalError -2147483648)
07-24 11:06:21.153    4374-6724/com.company.mediacodectest E/ACodec﹕ OMX/mediaserver died, signalling error!
07-24 11:06:21.154    4374-6723/com.company.mediacodectest E/MediaCodec﹕ Codec reported an error. (omx error 0x8000100d, internalError -32)
07-24 11:06:21.176    4374-6707/com.company.mediacodectest E/ExoPlayerImplInternal﹕ Internal track renderer error.
    com.google.android.exoplayer.ExoPlaybackException: com.google.android.exoplayer.MediaCodecTrackRenderer$DecoderInitializationException: Decoder init failed: OMX.MTK.AUDIO.DECODER.AAC, MediaFormat(audio/mp4a-latm, -1, -1, -1, -1.0, 2, 48000, 5918037000, -1, -1)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.notifyAndThrowDecoderInitError(MediaCodecTrackRenderer.java:387)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.maybeInitCodec(MediaCodecTrackRenderer.java:374)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.onInputFormatChanged(MediaCodecTrackRenderer.java:739)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.readFormat(MediaCodecTrackRenderer.java:511)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.doSomeWork(MediaCodecTrackRenderer.java:492)
            at com.google.android.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:417)
            at com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:205)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:193)
            at android.os.HandlerThread.run(HandlerThread.java:61)
            at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)
     Caused by: com.google.android.exoplayer.MediaCodecTrackRenderer$DecoderInitializationException: Decoder init failed: OMX.MTK.AUDIO.DECODER.AAC, MediaFormat(audio/mp4a-latm, -1, -1, -1, -1.0, 2, 48000, 5918037000, -1, -1)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.maybeInitCodec(MediaCodecTrackRenderer.java:374)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.onInputFormatChanged(MediaCodecTrackRenderer.java:739)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.readFormat(MediaCodecTrackRenderer.java:511)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.doSomeWork(MediaCodecTrackRenderer.java:492)
            at com.google.android.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:417)
            at com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:205)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:193)
            at android.os.HandlerThread.run(HandlerThread.java:61)
            at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)
     Caused by: java.io.IOException: Failed to allocate component instance
            at android.media.MediaCodec.native_setup(Native Method)
            at android.media.MediaCodec.<init>(MediaCodec.java:213)
            at android.media.MediaCodec.createByCodecName(MediaCodec.java:207)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.maybeInitCodec(MediaCodecTrackRenderer.java:360)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.onInputFormatChanged(MediaCodecTrackRenderer.java:739)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.readFormat(MediaCodecTrackRenderer.java:511)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.doSomeWork(MediaCodecTrackRenderer.java:492)
            at com.google.android.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:417)
            at com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:205)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:193)
            at android.os.HandlerThread.run(HandlerThread.java:61)
            at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)
07-24 11:06:21.177    4374-4374/com.company.mediacodectest E/com.company.videoformattest.PlayerActivity﹕ errors: Error in ExoPlayer
    com.google.android.exoplayer.ExoPlaybackException: com.google.android.exoplayer.MediaCodecTrackRenderer$DecoderInitializationException: Decoder init failed: OMX.MTK.AUDIO.DECODER.AAC, MediaFormat(audio/mp4a-latm, -1, -1, -1, -1.0, 2, 48000, 5918037000, -1, -1)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.notifyAndThrowDecoderInitError(MediaCodecTrackRenderer.java:387)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.maybeInitCodec(MediaCodecTrackRenderer.java:374)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.onInputFormatChanged(MediaCodecTrackRenderer.java:739)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.readFormat(MediaCodecTrackRenderer.java:511)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.doSomeWork(MediaCodecTrackRenderer.java:492)
            at com.google.android.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:417)
            at com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:205)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:193)
            at android.os.HandlerThread.run(HandlerThread.java:61)
            at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)
     Caused by: com.google.android.exoplayer.MediaCodecTrackRenderer$DecoderInitializationException: Decoder init failed: OMX.MTK.AUDIO.DECODER.AAC, MediaFormat(audio/mp4a-latm, -1, -1, -1, -1.0, 2, 48000, 5918037000, -1, -1)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.maybeInitCodec(MediaCodecTrackRenderer.java:374)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.onInputFormatChanged(MediaCodecTrackRenderer.java:739)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.readFormat(MediaCodecTrackRenderer.java:511)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.doSomeWork(MediaCodecTrackRenderer.java:492)
            at com.google.android.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:417)
            at com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:205)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:193)
            at android.os.HandlerThread.run(HandlerThread.java:61)
            at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)
     Caused by: java.io.IOException: Failed to allocate component instance
            at android.media.MediaCodec.native_setup(Native Method)
            at android.media.MediaCodec.<init>(MediaCodec.java:213)
            at android.media.MediaCodec.createByCodecName(MediaCodec.java:207)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.maybeInitCodec(MediaCodecTrackRenderer.java:360)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.onInputFormatChanged(MediaCodecTrackRenderer.java:739)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.readFormat(MediaCodecTrackRenderer.java:511)
            at com.google.android.exoplayer.MediaCodecTrackRenderer.doSomeWork(MediaCodecTrackRenderer.java:492)
            at com.google.android.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:417)
            at com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:205)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:193)
            at android.os.HandlerThread.run(HandlerThread.java:61)
            at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)

(a little different trace).

That almost looks like an issue with the MTK OMX implementation, except that the standard MediaPlayer works. Also ExoPlayer seems to work well for some of the Matroska test files as before (test2.mkv/test5.mkv play).

Per discussion I changed the init of the sampleSource to:

final ExtractorSampleSource sampleSource = new ExtractorSampleSource(uri,
    new DefaultUriDataSource(this, "com/product"), new DefaultAllocator(65534), 10485760);

@google google locked and limited conversation to collaborators Jun 28, 2017
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

2 participants