android - 与 ViewPager 一起使用时,如何在 Exoplayer 中播放或暂停视频?
问题描述
我正在尝试在ViewPager中使用Exoplayer。只有当我通过单击用于显示视频的缩略图打开它时,它才会播放。但是当我通过滚动到达页面时它不会播放。
我尝试使用 Lambda在onPageSelected()和VPAdapter的onScrolled()seekTo(0, 0)
方法中调用& ,但没有成功。playWhenReady = true
playWhenReady = false
这是我用于 viewPager 的适配器。
class MediaVPAdapter(
val context: Context,
@LayoutRes val layoutRes: Int,
val medias: List<MediaFiles> = listOf()
) : PagerAdapter() {
private var player: SimpleExoPlayer? = null
override fun isViewFromObject(view: View, o: Any): Boolean {
return view == o
}
override fun getCount() = medias.size
override fun instantiateItem(container: ViewGroup, position: Int): Any {
return LayoutInflater.from(context).inflate(layoutRes, container, false).apply {
if (medias.isNotEmpty()) {
when (medias[position].mediaType) {
MediaType.PHOTO -> {
// Display the Image
}
MediaType.VIDEO -> {
ssImageView.makeInvisible(true)
exoPlayerView.makeVisible()
player = ExoPlayerFactory.newSimpleInstance(
DefaultRenderersFactory(context),
DefaultTrackSelector(),
DefaultLoadControl()
)
if (medias[position].uri != null)
initPlayer(this, medias[position].uri!!)
}
null -> {
}
}
}
container.addView(this, 0)
}
}
private fun initPlayer(view: View, uri: Uri) {
Timber.i("initPlayer: uri: $uri")
with(view) {
player!!.let {
exoPlayerView.player = it
it.prepare(buildMediaSource(uri), true, false)
it.playWhenReady = false
}
}
}
private fun buildMediaSource(uri: Uri) = ExtractorMediaSource.Factory(
DefaultDataSourceFactory(context, Util.getUserAgent(context, context.getString(R.string.app_name)))
)
.setExtractorsFactory(DefaultExtractorsFactory())
.createMediaSource(uri)
override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
releasePlayer()
}
private fun releasePlayer() {
if (player != null) {
playWhenReady = false
player!!.release()
player = null
}
}
}
val mediaAdapter = MediaVPAdapter(
this,
R.layout.fragment_media,
true,
medias?.toList() ?: listOf()
)
vpMedia.adapter = mediaAdapter
vpMedia.currentItem = position ?: 0
vpMedia.offscreenPageLimit = 1
如果我单击视频,则可以播放所选视频,但是当我滚动到其他项目时,它们都没有播放。当我尝试切换播放/暂停按钮时,只有按钮在切换。
解决方案
据我所知,您的代码错过了setPlayWhenReady侦听器。您应该通过添加initPlayer方法it.setPlayWhenReady(playWhenReady)
来修复它。
推荐阅读
- excel - 替换一列中的多个元素
- python - 如何从 KITTI 数据集计算相机的焦距
- javascript - 如何在 vue js 中打印 HTML、CSS 代码而不将它们呈现为 HTML 元素和 CSS 属性?
- java - 通过Java中的restTemplate从rest webservice获取垃圾值
- jquery - HTTP404:未找到 - 服务器未找到与请求的 URI(统一资源标识符)匹配的任何内容,其中我的页面有一个母版页
- android - 为什么我不能调用片段视图的 onClick 属性
- php - Laravel - Laratrust - 重命名权限名称
- cursive - 草书在注释行中向前/向后导航单词
- php - 找不到类 Google_Client()
- haskell - 以下类型的 Functor 实例是什么: newtype F2 xa = F2 ((a -> x) -> a)