如何将字节数组数据流式传输到 androidx.media3.exoplayer 中?

问题描述 投票:0回答:1

在我的Android应用程序中,它需要播放从其他应用程序接收到的视频流。视频流以字节数组格式接收。我正在使用 androidx.media3.exoplayer 进行视频播放。我搜索了很多将字节数组数据流式传输到 Exo 播放器的示例代码,但我找不到任何解决方案。下面的方法用于设置字节数组数据给播放器,

@OptIn(UnstableApi::class)
private suspend fun prepareExoPlayerFromByteArray(data: ByteArray) {

    if(data.isNotEmpty()) {
        Log.d(TAG, ">> Data is not empty $data")
        val extractorFactory = ExtractorsFactory { arrayOf(Ac3Extractor()) }
        val dsf = CustomDataSourceFactory(data)
        dsf.createDataSource()
        val mediasourceFactory = ProgressiveMediaSource.Factory(dsf,
            extractorFactory
        )
        withContext(Dispatchers.Main) {
            exoPlayer = ExoPlayer.Builder(this@MainActivity, mediasourceFactory).build()
            exoPlayer!!.setMediaItem(MediaItem.fromUri(Uri.EMPTY))
            // Prepare the player.
            exoPlayer!!.prepare()
            // Start the playback.
            exoPlayer!!.play()
        }

    } else {
        Log.d(TAG, ">> Data is empty $data")
    }
}

我的目的是仅初始化 Exo-player 的实例一次,之后必须在接收时将字节数组数据设置给播放器。上面的代码崩溃了,

播放错误 androidx.media3.exoplayer.ExoPlaybackException:源错误 androidx.media3.exoplayer.ExoPlayerImplInternal.handleIoException(ExoPlayerImplInternal.java:701) androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:671) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loopOnce(Looper.java:201) 在 android.os.Looper.loop(Looper.java:288) 在 android.os.HandlerThread.run(HandlerThread.java:67) 引起原因:androidx.media3.common.ParserException:在准备完成之前加载已完成。{contentIsMalformed=true,dataType=1} 在 androidx.media3.exoplayer.source.ProgressiveMediaPeriod.maybeThrowPrepareError(ProgressiveMediaPeriod.java:247) 在 androidx.media3.exoplayer.source.MaskingMediaPeriod.maybeThrowPrepareError(MaskingMediaPeriod.java:157) 在 androidx.media3.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:1096)

如果有人知道将自定义数据源设置到 Exo-player 的正确解决方案,请分享确切的源代码...

android kotlin exoplayer live-streaming
1个回答
0
投票

我试图在这里插入代码,但我不知道为什么要插入这个问题。我附上了一张 Google 表格,请在这里找到您的答案。谢谢

https://docs.google.com/document/d/1Bnsm3AnAyQaIsHMJpgRvTcu-oRJUBigIpB2wpISYQgs/edit?usp=sharing

© www.soinside.com 2019 - 2024. All rights reserved.