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

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

官方文档

添加依赖

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

dependencies {
    implementation("androidx.media3:media3-ui:1.1.0")
    implementation("androidx.media3:media3-session:1.1.0")
    implementation("androidx.media3:media3-exoplayer:1.1.0")
}

添加PlayerView

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

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.media3.ui.PlayerView
        android:id="@+id/play_view"
        android:layout_width="match_parent"
        android:layout_height="320dp"
        app:layout_constraintTop_toTopOf="parent"
        app:resize_mode="fill"
        app:show_buffering="always"
        app:use_controller="false" />
        
</androidx.constraintlayout.widget.ConstraintLayout>

一些可配置参数如下:

插图参数:

控制器参数:

PlayerView参数:

播放视频

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

class Media3ExampleActivity : AppCompatActivity() {

    private lateinit var binding: LayoutMedia3ExampleActivityBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = LayoutMedia3ExampleActivityBinding.inflate(layoutInflater)
        setContentView(binding.root)
        binding.includeTitle.tvTitle.text = "Media3 Example"
        // 创建ExoPlayer,配置到PlayerView中
        binding.playView.player = ExoPlayer.Builder(this)
            .build()
        binding.playView.player?.run {
            // 设置播放监听
            addListener(object : Player.Listener {
                override fun onIsPlayingChanged(isPlaying: Boolean) {
                    super.onIsPlayingChanged(isPlaying)
                    // 播放状态变化回调
                }

                override fun onPlaybackStateChanged(playbackState: Int) {
                    super.onPlaybackStateChanged(playbackState)
                    when (playbackState) {
                        Player.STATE_IDLE -> {
                            //播放器停止时的状态
                        }

                        Player.STATE_BUFFERING -> {
                            // 正在缓冲数据
                        }

                        Player.STATE_READY -> {
                            // 可以开始播放
                        }

                        Player.STATE_ENDED -> {
                            // 播放结束
                        }
                    }

                }

                override fun onPlayerError(error: PlaybackException) {
                    super.onPlayerError(error)
                    // 获取播放错误信息
                }
            })
            // 设置重复模式
            // Player.REPEAT_MODE_ALL 无限重复
            // Player.REPEAT_MODE_ONE 重复一次
            // Player.REPEAT_MODE_OFF 不重复
            repeatMode = Player.REPEAT_MODE_ALL
            // 设置当缓冲完毕后直接播放视频
            playWhenReady = true
        }
        binding.btnPlaySingleVideo.setOnClickListener {
            binding.playView.player?.run {
                // 停止之前播放的视频
                stop()
                //设置单个资源
                setMediaItem(MediaItem.fromUri("https://minigame.vip/Uploads/images/2021/09/18/1631951892_page_img.mp4"))
                // 开始缓冲
                prepare()
            }
        }
        binding.btnPlayMultiVideo.setOnClickListener {
            binding.playView.player?.run {
                // 停止之前播放的视频
                stop()
                // 设置多个资源,当一个视频播完后自动播放下一个
                setMediaItems(arrayListOf(
                    MediaItem.fromUri("https://minigame.vip/Uploads/images/2021/09/18/1631951892_page_img.mp4"),
                    MediaItem.fromUri("https://storage.googleapis.com/exoplayer-test-media-1/mp4/dizzy-with-tx3g.mp4")
                ))
                // 开始缓冲
                prepare()
            }
        }
    }

    override fun onResume() {
        super.onResume()
        // 恢复播放
        binding.playView.onResume()
    }

    override fun onPause() {
        super.onPause()
        // 暂停播放
        binding.playView.onPause()
    }

    override fun onDestroy() {
        super.onDestroy()
        // 释放播放器资源
        binding.playView.player?.release()
        binding.playView.player = null
    }
}

效果如图:

示例

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

ExampleDemo github

ExampleDemo gitee

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

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

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android中,播放视频可以使用MediaPlayer类或者VideoView控件来实现。下面是使用MediaPlayer类播放视频的步骤: 1. 导入MediaPlayer类:在Java文件中导入MediaPlayer类,可以通过import android.media.MediaPlayer;语句实现。 2. 创建MediaPlayer对象:使用MediaPlayer类的构造函数创建一个MediaPlayer对象。 3. 设置数据源:通过setDataSource()方法设置要播放视频文件的路径或者URL。 4. 准备播放:调用prepare()或者prepareAsync()方法准备视频播放。 5. 开始播放:调用start()方法开始播放视频。 6. 监听播放状态:可以通过设置MediaPlayer.OnCompletionListener、MediaPlayer.OnErrorListener等监听器来监听视频播放的状态。 7. 停止播放:调用stop()方法停止视频播放。 8. 释放资源:调用release()方法释放MediaPlayer对象所占用的资源。 除了使用MediaPlayer类,还可以使用VideoView控件来播放视频。VideoView是一个继承自SurfaceView的控件,它封装了MediaPlayer类的一些功能,使用起来更加简单。使用VideoView播放视频的步骤如下: 1. 在布局文件中添加VideoView控件:在XML布局文件中添加一个VideoView控件。 2. 设置视频路径:通过调用setVideoPath()方法设置要播放视频文件的路径或者URL。 3. 开始播放:调用start()方法开始播放视频。 4. 监听播放状态:可以通过设置VideoView的OnCompletionListener、OnErrorListener等监听器来监听视频播放的状态。 5. 停止播放:调用stopPlayback()方法停止视频播放。 这是Android播放视频的基本步骤,你可以根据具体需求进行相应的扩展和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值