Android Kotlin 使用 ExoPlayer 实现视频循环播放
Android Kotlin 使用 ExoPlayer 实现视频循环播放
要实现 ExoPlayer 的重复播放,可以使用 setRepeatMode 方法来设置重复模式为 Player.REPEAT_MODE_ALL。以下是一个使用 Androidx Kotlin 实现 ExoPlayer 重复播放的示例代码:
首先,在你的布局文件中添加一个用于显示视频的 SurfaceView 或 TextureView:
<SurfaceView
android:id="@+id/surface_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
然后,在你的 Activity 或 Fragment 中初始化 ExoPlayer 并设置重复模式:
// 导入相关的包
import com.google.android.exoplayer2.SimpleExoPlayer
import com.google.android.exoplayer2.DefaultLoadControl
import com.google.android.exoplayer2.DefaultRenderersFactory
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory
import com.google.android.exoplayer2.util.Util
import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory
import com.google.android.exoplayer2.source.ExtractorMediaSource
import com.google.android.exoplayer2.source.LoopingMediaSource
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector
// 在你的 Activity 或 Fragment 中定义一个 ExoPlayer 实例
private lateinit var player: SimpleExoPlayer
// 在 onCreate 方法或其他合适的地方初始化 ExoPlayer
private fun initExoPlayer() {
// 创建 DefaultTrackSelector 实例
val trackSelector = DefaultTrackSelector()
// 创建 DefaultRenderersFactory 实例
val renderersFactory = DefaultRenderersFactory(this)
// 创建 DefaultLoadControl 实例
val loadControl = DefaultLoadControl()
// 创建 DefaultDataSourceFactory 实例
val dataSourceFactory = DefaultDataSourceFactory(
this,
Util.getUserAgent(this, "YourApplicationName")
)
// 创建 DefaultExtractorsFactory 实例
val extractorsFactory = DefaultExtractorsFactory()
// 创建 ExtractorMediaSource 实例
val mediaSource = ExtractorMediaSource.Factory(dataSourceFactory)
.setExtractorsFactory(extractorsFactory)
.createMediaSource(uri)
// 创建 LoopingMediaSource 实例
val loopingMediaSource = LoopingMediaSource(mediaSource)
// 创建 SimpleExoPlayer 实例
player = ExoPlayerFactory.newSimpleInstance(
this,
renderersFactory,
trackSelector,
loadControl
)
// 设置重复模式为 REPEAT_MODE_ALL
player.repeatMode = Player.REPEAT_MODE_ALL
// 准备播放视频
player.prepare(loopingMediaSource)
// 将 SurfaceView 与 ExoPlayer 关联
player.setVideoSurfaceView(surfaceView)
}
// 在 onStart 方法中开始播放视频
override fun onStart() {
super.onStart()
player.playWhenReady = true
}
// 在 onStop 方法中停止播放视频
override fun onStop() {
super.onStop()
player.playWhenReady = false
}
// 在 onDestroy 方法中释放 ExoPlayer 资源
override fun onDestroy() {
super.onDestroy()
player.release()
}
在上面的代码中,我们使用了 LoopingMediaSource 来实现视频的循环播放。LoopingMediaSource 接受一个 MediaSource 作为参数,然后将其循环播放。
请注意,上述代码中的 uri 是视频文件的 URI,你需要将其替换为你自己的视频文件 URI。
这样就完成了 ExoPlayer 的重复播放功能的实现。希望对你有帮助!
原文地址: https://www.cveoy.top/t/topic/qhMy 著作权归作者所有。请勿转载和采集!