Android ExoPlayer 如何监听视频时长并在每一秒执行我们想要的操作?

标签 android kotlin media-player exoplayer exoplayer2.x

我正在使用 ExoPlayer 从服务器流式传输视频,我想在视频的特定秒内显示对话框,所以我想听 ExoPlayer 持续时间并获取当前播放的秒数,以及是否是我想要的时间停止播放器并显示对话框。 由于视频正在流式传输,我无法使用 Handler 获得第二个视频,因为如果用户互联网质量低或者用户更改播放器 SeekBar 等,视频可能会停止。 那么解决办法是什么呢? 谢谢

最佳答案

ExoPlayeer 目前不提供进度更新监听器 - 引用的原因是它会占用太多 CPU 来继续引发进度事件。请参阅此处关于 ExoPlayer 问题跟踪器的讨论:

相反,建议构建您自己的处理程序来轮询玩家并使用player.getCurrentPosition()查询当前位置。

这样您就可以控制检查的频率 - 例如每秒。

无论任何流媒体或缓冲问题如何,当您检查实际播放位置而不是下载状态时,这都将起作用。

如果您的问题是您正在寻找特定点,例如时间 = 20 秒,并且流式传输错误意味着实际播放从 18 秒跳到 22 秒,则解决此问题的常用方法是检查代码中的“>= 20 秒”。

顺便说一句,如果您不需要实际停止视频,而只想在视频中的给定时间戳处显示文本,那么您还可以使用单独的字幕或字幕轨道。

关于Android ExoPlayer 如何监听视频时长并在每一秒执行我们想要的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65039639/

相关文章:

kotlin - Kotlin 中的类委托(delegate)

kotlin - 如何在Kotlin中取消初始化Lateinit

ios - 如何在应用程序中使用 swift 流式传输 mp3 文件?

background - (UWP) 如何像 Groove 一样激活 "Taskbar Miniplayer"

android - 旧 API 是否有类似于 FLAG_ACTIVITY_NEW_DOCUMENT 的内容?

android - 通过使用 Intent 在 Activity 之间传递值

android - 如何在jetpack compose中释放位图

android - 如何设置标签的左右填充

kotlin - Kotlin停顿/崩溃编译器中的大型列表文字

ios - 播放视频 iPad Ios6