当前位置:   article > 正文

Android Media3 (一)— 简单播放视频

android media3

App开发中偶尔会需要播放视频,JetPack Media3是目前官方主推的视频播放库,使用ExoPlayer作为默认播放器,让开发人员可以轻松的实现播放视频和音频功能。本文简单介绍下如何使用Media3库播放视频。

官方文档

添加依赖

在app module下的build.gradle中添加代码,如下:
 

  1. dependencies {
  2. implementation("androidx.media3:media3-ui:1.1.0")
  3. implementation("androidx.media3:media3-session:1.1.0")
  4. implementation("androidx.media3:media3-exoplayer:1.1.0")
  5. }

添加PlayerView

在布局文件中添加PlayerView,承载视频播放器,代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent">
  6. <androidx.media3.ui.PlayerView
  7. android:id="@+id/play_view"
  8. android:layout_width="match_parent"
  9. android:layout_height="320dp"
  10. app:layout_constraintTop_toTopOf="parent"
  11. app:resize_mode="fill"
  12. app:show_buffering="always"
  13. app:use_controller="false" />
  14. </androidx.constraintlayout.widget.ConstraintLayout>

一些可配置参数如下:

插图参数:

控制器参数:

PlayerView参数:

播放视频

创建ExoPlayer配置到PlayerView中,设置好要播放的资源后就可以播放视频,代码如下:

  1. class Media3ExampleActivity : AppCompatActivity() {
  2. private lateinit var binding: LayoutMedia3ExampleActivityBinding
  3. override fun onCreate(savedInstanceState: Bundle?) {
  4. super.onCreate(savedInstanceState)
  5. binding = LayoutMedia3ExampleActivityBinding.inflate(layoutInflater)
  6. setContentView(binding.root)
  7. binding.includeTitle.tvTitle.text = "Media3 Example"
  8. // 创建ExoPlayer,配置到PlayerView中
  9. binding.playView.player = ExoPlayer.Builder(this)
  10. .build()
  11. binding.playView.player?.run {
  12. // 设置播放监听
  13. addListener(object : Player.Listener {
  14. override fun onIsPlayingChanged(isPlaying: Boolean) {
  15. super.onIsPlayingChanged(isPlaying)
  16. // 播放状态变化回调
  17. }
  18. override fun onPlaybackStateChanged(playbackState: Int) {
  19. super.onPlaybackStateChanged(playbackState)
  20. when (playbackState) {
  21. Player.STATE_IDLE -> {
  22. //播放器停止时的状态
  23. }
  24. Player.STATE_BUFFERING -> {
  25. // 正在缓冲数据
  26. }
  27. Player.STATE_READY -> {
  28. // 可以开始播放
  29. }
  30. Player.STATE_ENDED -> {
  31. // 播放结束
  32. }
  33. }
  34. }
  35. override fun onPlayerError(error: PlaybackException) {
  36. super.onPlayerError(error)
  37. // 获取播放错误信息
  38. }
  39. })
  40. // 设置重复模式
  41. // Player.REPEAT_MODE_ALL 无限重复
  42. // Player.REPEAT_MODE_ONE 重复一次
  43. // Player.REPEAT_MODE_OFF 不重复
  44. repeatMode = Player.REPEAT_MODE_ALL
  45. // 设置当缓冲完毕后直接播放视频
  46. playWhenReady = true
  47. }
  48. binding.btnPlaySingleVideo.setOnClickListener {
  49. binding.playView.player?.run {
  50. // 停止之前播放的视频
  51. stop()
  52. //设置单个资源
  53. setMediaItem(MediaItem.fromUri("https://minigame.vip/Uploads/images/2021/09/18/1631951892_page_img.mp4"))
  54. // 开始缓冲
  55. prepare()
  56. }
  57. }
  58. binding.btnPlayMultiVideo.setOnClickListener {
  59. binding.playView.player?.run {
  60. // 停止之前播放的视频
  61. stop()
  62. // 设置多个资源,当一个视频播完后自动播放下一个
  63. setMediaItems(arrayListOf(
  64. MediaItem.fromUri("https://minigame.vip/Uploads/images/2021/09/18/1631951892_page_img.mp4"),
  65. MediaItem.fromUri("https://storage.googleapis.com/exoplayer-test-media-1/mp4/dizzy-with-tx3g.mp4")
  66. ))
  67. // 开始缓冲
  68. prepare()
  69. }
  70. }
  71. }
  72. override fun onResume() {
  73. super.onResume()
  74. // 恢复播放
  75. binding.playView.onResume()
  76. }
  77. override fun onPause() {
  78. super.onPause()
  79. // 暂停播放
  80. binding.playView.onPause()
  81. }
  82. override fun onDestroy() {
  83. super.onDestroy()
  84. // 释放播放器资源
  85. binding.playView.player?.release()
  86. binding.playView.player = null
  87. }
  88. }

效果如图:

示例

演示代码已在示例Demo中添加。

ExampleDemo github

ExampleDemo gitee

原文 Android Media3 (一)- 简单播放视频

★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。

见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/299202
推荐阅读
相关标签
  

闽ICP备14008679号