1. 配置参数
1.1 AndroidManifest.xml 文件添加网络权限
1.2 http 明文请求设置
android:usesCleartextTraffic="true"
1.3 activity 配置屏幕变化,不重新加载 Activity
//屏幕方向发生变更 - 用户旋转设备/屏幕布局发生变更/当前屏幕尺寸发生变更
1.4 开启协程引用库
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.0-alpha03'
1.5.视频渲染 Surface View 或者 Texture View
2. 布局文件 activity_main.xml
3. 使用 VideoView, MainActivity.kt
class MainActivity : AppCompatActivity() {private lateinit var videoView: VideoViewprivate var savePosition: Int = 0override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// 26.51val progressBar = findViewById(R.id.progressBar)val progressBar2 = findViewById(R.id.progressBar2)//val videoPath = "android.resource://$packageName/${R.raw.red}"val videoPath = "https://media.w3.org/2010/05/sintel/trailer.mp4"videoView = findViewById(R.id.videoView)videoView.setVideoPath(videoPath)//设置导航控制布局videoView.setMediaController(MediaController(this))videoView.setOnPreparedListener {//Log.i("MyTag", "$it")//it.seekTo(3000)//duration 视频总的长度progressBar2.visibility = INVISIBLEprogressBar.max = it.durationit.isLooping = true//循环播放if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {it.playbackParams = PlaybackParams().apply {speed = 1f //倍数播放// pitch = 0.7f //变声,提高音调 尖锐,减少低沉}}it.seekTo(savePosition)//it.start()}lifecycleScope.launch {while (true) {if (videoView.isPlaying) {progressBar.progress = videoView.currentPosition}delay(500)}}//videoView.start()}override fun onPause() {super.onPause()savePosition = videoView.currentPosition}
}
4. 效果图
