簡體   English   中英

Android ExoPlayer - 無法使用 MediaItem 從本地存儲加載音頻

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM