谷歌官方推荐的ExoPlayer的基本使用

简介

在日常开发中,自然少不了使用播放器,特别是现在短视频流行的情况下,几乎所有的App都有播放视频的功能,一提到播放器,相信很多开发者都知道GSYPlayer和IjkPlayer。这两款开源的播放器功能强大,能满足日常开发需要。但是需要引入第三方依赖,加载一些很多不必要的资源,我们现在的App由于历史原因还有很多不同的播放器,导致包体积直线上升。

使用过GSYPlayer的小伙伴都知道,这个播放器是支持切换内核的。一个是ijkPlayer内核和一个ExoPlayer的内核。其实认真了解ExoPlayer的小伙伴都知道,使用ExoPlayer更简单,更方便。毕竟 谷歌出品,必属精品!下面我们就来介绍一下怎么使用ExoPlayer?

基本使用

ExoPlayer最新版本是media3,这里使用的版本较低,主要是因为主线App的targetSDK版本是30,一旦超过了2.15.1就必须升级Android SDK版本。话不多说,直接上代码。

引入依赖

arduino 复制代码
 implementation 'com.google.android.exoplayer:exoplayer:2.15.1'

创建ExoPlayer

scss 复制代码
       val loadControl = DefaultLoadControl.Builder()
            .setPrioritizeTimeOverSizeThresholds(true)//缓冲时时间优先级高于大小
            .setBufferDurationsMs(MIN_BUFFER_MS, MAX_BUFFER_MS, PLAYBACK_BUFFER_MS, REBUFFER_MS)
            .build()
        if (mPlayer == null){
            mPlayer = activity?.let { SimpleExoPlayer.Builder(activity).setLoadControl(loadControl).build() }
        }
        //重复模式
        mPlayer?.repeatMode = Player.REPEAT_MODE_ALL
        //设置seekto参数
        mPlayer?.setSeekParameters(SeekParameters.EXACT)
        //设置监听
        mPlayer?.setVideoFrameMetadataListener(this)
        mPlayer?.addListener(this)

设置视频资源

ini 复制代码
  list.forEach {
     val newMediaItem = MediaItem.Builder()
        .setUri(it.path)
        .build()
        mPlayer?.addMediaItem(newMediaItem)
        }

      mPlayer?.playWhenReady = true
      mPlayer?.prepare()

播放视频

scss 复制代码
  mPlayer?.play()

暂停视频

scss 复制代码
  mPlayer?.pause()

停止播放

scss 复制代码
  mPlayer?.stop()

绑定Surface/SurfaceView/TextureView

scss 复制代码
//绑定surface
mPlayer?.setVideoSurface(surface)
//绑定surfaceView
mPlayer?.setVideoSurfaceView(surfaceView)
//绑定TextureView
mPlayer?.setVideoSurfaceView(textureView)

seekTo

scss 复制代码
//seekto指定时间
mPlayer?.seekTo(time)
//seekto指定视频的时间
mPlayer?.seekTo(currentIndex,time)

指定区间播放

scss 复制代码
  MediaItem.Builder()
                .setUri(it.path)
                .setClipStartPositionMs(it.imageStartTime)
                .setClipEndPositionMs(it.imageEndTime)
                .build()

优点:使用简单,谷歌出品,懂得都懂。最低支持API 14,支持的格式丰富。

缺点:需要自己计算视频播放进度。

总结

ExoPlayer不仅支持单个视频播放,也支持视频列表播放,切换下一个视频和指定时间段播放视频等丰富的功能。ExoPlayer还提供了UI框架,小编这里使用surface是因为需要自定义渲染效果。

小编在使用过程中踩了很多坑,如果读者在使用ExoPlayer的过程中,遇到无法解决的问题可以私信小编。

相关推荐
黑码哥几秒前
ViewHolder设计模式深度剖析:iOS开发者掌握Android列表性能优化的实战指南
android·ios·性能优化·跨平台开发·viewholder
亓才孓12 分钟前
[JDBC]元数据
android
独行soc23 分钟前
2026年渗透测试面试题总结-17(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
金融RPA机器人丨实在智能31 分钟前
Android Studio开发App项目进入AI深水区:实在智能Agent引领无代码交互革命
android·人工智能·ai·android studio
科技块儿33 分钟前
利用IP查询在智慧城市交通信号系统中的应用探索
android·tcp/ip·智慧城市
独行soc1 小时前
2026年渗透测试面试题总结-18(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
王码码20352 小时前
Flutter for OpenHarmony 实战之基础组件:第二十七篇 BottomSheet — 动态底部弹窗与底部栏菜单
android·flutter·harmonyos
2501_915106322 小时前
app 上架过程,安装包准备、证书与描述文件管理、安装测试、上传
android·ios·小程序·https·uni-app·iphone·webview
vistaup2 小时前
OKHTTP 默认构建包含 android 4.4 的TLS 1.2 以及设备时间不对兼容
android·okhttp
常利兵2 小时前
ButterKnife在Android 35 + Gradle 8.+环境下的适配困境与现代化迁移指南
android