Android ExoPlayer-无法使用MediaItem从本地存储加载音频



我使用ExoPlayer2.14.1来播放短音频文件,方法是:

val player = SimpleExoPlayer.Builder(context, fftAudioRendererFactory).build()
player.setMediaItem(MediaItem.fromUri(uri))
player.prepare()

当我从URL(https://...myfile.aac(加载音频时,它会正确播放。但是,当我尝试从本地存储中的文件加载相同的音频时

/data/user/0/my.app.name/cache/audios/myfile.aac

无法加载该文件。我收到以下警告:

MessageQueue:处理程序(android.os.Handler({5b7060e}发送消息到死线程上的处理程序java.lang.IollegalStateException:处理程序(android.os.Handler({5b7060e}在死线程上向处理程序发送消息在android.os.MessageQueue.enqueeMessage(MessageQueue.java:560(在android.os.Handler.enqueeMessage(Handler.java:778(在android.os.Handler.sendMessageAtTime(Handler.java:727(在android.os.Handler.sendMessageDelayed(Handler.java:697(在android.os.Handler.sendMessage(Handler.java:635(在android.os.Message.sendToTarget(Message.java:468(网址:com.google.android.eextlayer2.ExoPlayerImplInternal.prepare(ExoPlayer ImplInternal.java:283(

我尝试了不同的文件URI,如file:/file:///,但没有任何帮助。有什么建议吗?

解决了它!

正如ExoPlayer文档所说,对于.aac文件,有必要设置恒定的比特率搜索。为了做到这一点,我必须使用ExtractorsFactory参数创建SimpleExoPlayer,如下所示:

private val extractorsFactory = DefaultExtractorsFactory().setConstantBitrateSeekingEnabled(true)
private val player = SimpleExoPlayer.Builder(context, extractorsFactory).build()

由于某些原因,从url(https(加载的aac文件在没有比特率搜索设置的情况下工作-也许它在在中间进行了一些转换。

相关内容

  • 没有找到相关文章

最新更新