首页 > 解决方案 > UnrecognizedInputFormatException:没有可用的提取器可以读取流

问题描述

我有一个要使用 ExoPlayer(在 Android 上)查看的默认 .mp4 文件。我用这个小视频:

http://techslides.com/demos/sample-videos/small.mp4

在应用程序中,我得到一个 base64 字符串,即视频。当我在本网站粘贴上述视频时:

https://base64.guru/converter/encode/video

它显示的 Base64 值与应用程序中接收到的值相同,但是会引发以下错误。

player.playFromBytes(currentVideoBase64?.toByteArray()!!)

override fun playFromBytes(byteArray: ByteArray) {
    val mediaSource = createMediaSourceFromByteArray(byteArray)
    exoPlayer.prepare(mediaSource)
    exoPlayer.playWhenReady = true
}

private fun createMediaSourceFromByteArray(data: ByteArray): MediaSource {
    val byteArrayDataSource = ByteArrayDataSource(data)
    val factory = DataSource.Factory { byteArrayDataSource }
    val mediaSource = ProgressiveMediaSource.Factory(factory, DefaultExtractorsFactory())
            .createMediaSource(Uri.EMPTY)

    return Objects.requireNonNull(mediaSource, "MediaSource cannot be null")
}

错误信息:

2019-09-18 18:09:59.970 18009-18743/ E/ExoPlayerImplInternal: Source error.
    com.google.android.exoplayer2.source.UnrecognizedInputFormatException: None of the available extractors (MatroskaExtractor, FragmentedMp4Extractor, Mp4Extractor, Mp3Extractor, AdtsExtractor, Ac3Extractor, TsExtractor, FlvExtractor, OggExtractor, PsExtractor, WavExtractor, AmrExtractor, Ac4Extractor) could read the stream.
        at com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractorHolder.selectExtractor(ProgressiveMediaPeriod.java:1059)
        at com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:947)
        at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:381)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:764)

更新:使用Base64.getDecoder().decode(currentVideoBase64)它有效,但仅适用于 Android O 及更高版本。

标签: androidexoplayerexoplayer2.x

解决方案


推荐阅读