我使用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文件在没有比特率搜索设置的情况下工作-也许它在在中间进行了一些转换。