如何解决如何在 PlaybackTransportControlGlue android TV 上动态更改字幕
我正在为 Android TV 构建视频播放器应用。我正在使用 Exoplayer 的 Leanback 依赖项,如 https://developer.android.com/training/tv/playback/transport-controls 中所述。 到目前为止,我已经能够显示静态的视频标题,但是我需要显示一个动态的字幕,它会在视频播放发生变化时发生变化。我该怎么做? 下图显示了视频播放器的外观。我使用了一个字幕短语作为它应该出现的位置的占位符。
解决方法
我能够解决问题。我在 VideoSupportFragment 类 Player.EventListener 中添加了一个侦听器。 这样:
class VideoFragment(mediaItems: Map<String,Any>) : VideoSupportFragment(),Player.EventListener {
private var playerAdapter: ExoPlayerAdapter? = null
private var _mediaItems: Map<String,Any>? = null
private lateinit var mMediaPlayerGlue: VideoMediaPlayerGlue<ExoPlayerAdapter>
private var mItems: List<*>? = null
init {
_mediaItems = mediaItems
}
private val mHost: VideoSupportFragmentGlueHost = VideoSupportFragmentGlueHost(this)
private fun playWhenReady(glue: PlaybackGlue) {
if (glue.isPrepared) {
glue.play()
} else {
glue.addPlayerCallback(object : PlaybackGlue.PlayerCallback() {
override fun onPreparedStateChanged(glue: PlaybackGlue) {
if (glue.isPrepared) {
glue.removePlayerCallback(this);
glue.play()
}
}
})
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val mediaSource = _mediaItems?.get("media_source") as Map<*,*>
playerAdapter = ExoPlayerAdapter(activity!!,_mediaItems!!)
mMediaPlayerGlue =
VideoMediaPlayerGlue(activity,playerAdapter!!)
mMediaPlayerGlue.host = mHost;
mMediaPlayerGlue.isControlsOverlayAutoHideEnabled = true
mItems = mediaSource["media_items"] as List<*>
mMediaPlayerGlue.title = mediaSource["title"] as CharSequence?
mMediaPlayerGlue.playerAdapter.setDataSource()
mMediaPlayerGlue.isSeekEnabled = true
playerAdapter?.player?.addListener(this);
playWhenReady(mMediaPlayerGlue)
}
override fun onPause() {
super.onPause()
playerAdapter?.player?.pause()
}
override fun onResume() {
super.onResume()
playerAdapter?.player?.play()
}
override fun onDestroy() {
super.onDestroy()
playerAdapter?.player?.removeListener(this);
}
override fun onMediaItemTransition(mediaItem: MediaItem?,reason: Int) {
if (mItems?.size!! > 1){
val item : Map<*,*> = mItems!![playerAdapter?.player?.currentWindowIndex!!] as Map<*,*>
mMediaPlayerGlue.subtitle = item["subtitle"] as String
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。