ExoPlayer 不从文件播放

ExoPlayer not playing from file

我有一个 ExoPlayer 设置 HlsRendererBuilder。 到目前为止,我一直在将 Uri 传递给服务器上的 m3u8 流文件。它工作得很好。 现在我可以选择将视频下载到您的 phone 并从存储中播放。我已成功从给定的 link 下载文件,并将其存储在应用程序的私有文件夹中。请求并批准访问外部存储的所有权限。 在这种情况下,我从我下载的文件中传递一个 Uri。 Uri 看起来像这样:file:///storage/emulated/0/video/file.mp4。当我开始播放时,文件从未加载过。我在日志中没有收到任何异常或错误。谁能帮我建议一种方法?如果需要,我会提供代码片段,但不确定哪部分有用。

我有 ExoPlayer.Listener 记录了我的玩家状态。

  1. 当我进行流式传输时,我会获得各种状态,从空闲 -> 缓冲 -> 就绪 -> 缓冲...等等,基于互联网连接或媒体是否结束 ec.
  2. 当我播放存储的文件时,我只进入 IDLE 状态,没有其他任何反应。我一直黑屏,直到 finish() activity。

当我尝试从本地存储播放流文件时,我确实遇到了一个 FileNotFound 异常,它无法找到流文件中列出的媒体的下一部分文件。我认为问题出在播放器设置中?不确定...

由于您正在使用 HlsRendererBuilder,我认为您应该传递 .m3u8 播放列表文件。我基于我在 DashRendererBuilder 方面的经验,但我相信 HlsRendererBuilder 的工作方式非常相似。渲染器可能正在尝试解析包含多个 .mp4(或 .ts)文件的播放列表,但您只提供了一个 .mp4 文件。

尝试下载您的 .m3u8 文件中列出的所有文件,包括您的播放列表文件,然后将 URIfile:///storage/emulated/0/video/movie.m3u8 传递给您的渲染器。

希望对您有所帮助!

您需要为本地 (video/audio) 文件使用不同的 RendererBuilder

ExtractorRendererBuilder 是你应该看的东西。