[英]Android ExoPlayer - cannot load audio from local storage with MediaItem
我正在使用 ExoPlayer 2.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: Handler (android.os.Handler) {5b7060e} 向死線程上的處理程序發送消息 java.lang.IllegalStateException: Handler (android.os.Handler) {5b7060e} 在 android 的死線程上向處理程序發送消息.os.MessageQueue.enqueueMessage(MessageQueue.java:560) 在 android.os.Handler.enqueueMessage(Handler.java:778) 在 android.os.Handler.sendMessageAtTime(Handler.java:727) 在 android.os.Handler。 sendMessageDelayed(Handler.java:697) at android.os.Handler.sendMessage(Handler.java:635) at android.os.Message.sendToTarget(Message.java:468) at com.google.android.exoplayer2.ExoPlayerImplInternal.prepare (ExoPlayerImplInternal.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 文件在沒有比特率搜索設置的情況下工作 - 也許它會在中間進行一些轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.