您的位置:首页 > 教育 > 培训 > 邀请函制作软件app有哪些_茂名模板建站哪家好_矿产网站建设价格_网络服务提供者知道或者应当知道

邀请函制作软件app有哪些_茂名模板建站哪家好_矿产网站建设价格_网络服务提供者知道或者应当知道

2025/3/15 21:35:23 来源:https://blog.csdn.net/g984160547/article/details/146093650  浏览:    关键词:邀请函制作软件app有哪些_茂名模板建站哪家好_矿产网站建设价格_网络服务提供者知道或者应当知道
邀请函制作软件app有哪些_茂名模板建站哪家好_矿产网站建设价格_网络服务提供者知道或者应当知道

目录

1. 引言

2. 添加依赖

3. 初始化ExoPlayer并播放视频

3.1 XML 布局

3.2 初始化ExoPlayer

4. 控制播放

5. 监听播放状态

6. 播放网络流(HLS / DASH / RTSP)

7. ExoPlayer 进阶

7.1 手动切换功能

7.2 DRM 保护

8. 释放播放器资源

9. 从旧版迁移指南

10. 总结

相关推荐


1. 引言

        Android Media3 是 Google 推出的新一代媒体处理框架,ExoPlayer 作为其核心组件,提供了比传统 MediaPlayer 更强大的功能和更高的灵活性。Media3 ExoPlayer 的主要优势包括:

  • 支持 HLS、DASH、SmoothStreaming 等现代流媒体协议

  • 高度可定制的播放器架构

  • 自适应码率切换(ABR)优化

  • 完善的 DRM 支持

  • 改进的音频焦点处理

2. 添加依赖

        首先,在build.gradle(模块级)中添加 Media3 ExoPlayer 依赖:

dependencies {//这里版本过高需要升级 SDK 至34 ,JDK 要 17def media3_version = "1.2.0"// 核心库implementation "androidx.media3:media3-exoplayer:$media3_version"// UI 组件implementation "androidx.media3:media3-ui:$media3_version"// 可选 DASH 支持implementation "androidx.media3:media3-exoplayer-dash:$media3_version"// 可选 HLS 支持implementation "androidx.media3:media3-exoplayer-hls:$media3_version"// 可选,支持 RTSPimplementation 'androidx.media3:media3-exoplayer-rtsp:$media3_versio' 
}

这里版本过高需要升级 SDK 至34 ,JDK 要 17,否则会报如下错误:

Dependency 'androidx.media3:media3-ui:1.2.0' requires libraries and applications that
      depend on it to compile against version 34 or later of the Android APIs.

如果不想使用高版本可以使用1.0.0。

3. 初始化ExoPlayer并播放视频

使用ExoPlayer播放视频需要以下几个关键步骤:

  1. 初始化播放器
  2. 加载新闻
  3. 绑定到PlayerView
  4. 控制播放

3.1 XML 布局

        在activity_main.xml 参数PlayerView

    <androidx.media3.ui.PlayerViewandroid:id="@+id/playerView"app:resize_mode="zoom"android:layout_width="match_parent"android:layout_height="match_parent"/>

3.2 初始化ExoPlayer

        在MainActivity.kt(或MainActivity.java)中创建ExoPlayer并加载视频:

class ExoPlayerActivity : BaseActivity<ActivityExoplayerBinding>() {private var player: ExoPlayer? = null;override fun getLayoutID(): Int {return R.layout.activity_exoplayer}override fun init() {initExoPlayer()}private fun initExoPlayer() {player = ExoPlayer.Builder(this).build().also { exoPlayer ->mBind.playerView.player = exoPlayer//加载 raw 资源,网络资源替换Uri即可。val mediaItem: MediaItem = MediaItem.fromUri("android.resource://" + packageName + "/" + R.raw.sv_ad_video)exoPlayer.setMediaItem(mediaItem)exoPlayer.prepare()exoPlayer.playWhenReady = true}}override fun onDestroy() {super.onDestroy()// 确保在Activity销毁时释放播放器资源player?.release()player = null}
}

4. 控制播放

    ExoPlayer 提供了一系列方法来控制播放状态:

player?.play()         // 播放
player?.pause()        // 暂停
player?.seekTo(20000)  // 跳转到 20 秒
player?.stop()         // 停止
player?.release()      // 释放资源

5. 监听播放状态

        您可以监听ExoPlayer播放状态,如播放错误、缓冲状态等:

        player?.addListener(object : Player.Listener {override fun onPlaybackStateChanged(state: Int) {when (state) {ExoPlayer.STATE_READY -> {println("播放器已准备好")}ExoPlayer.STATE_BUFFERING -> {println("正在缓冲")}ExoPlayer.STATE_ENDED -> {println("播放完成")}}}override fun onPlayerError(error: PlaybackException) {println("播放错误: ${error.message}")}})

6. 播放网络流(HLS / DASH / RTSP)

    ExoPlayer 支持 HTTP Live Streaming (HLS) 和 DASH 等流媒体格式。只需更改MediaItem即可:

// HLS 直播流
val mediaItem = MediaItem.fromUri("https://www.example.com/sample.m3u8") 
player?.setMediaItem(mediaItem)
player?.prepare()
player?.play()

7. ExoPlayer 进阶

7.1 手动切换功能

        如果视频流支持多种权限,可以手动选择播放质量:

val trackSelector = DefaultTrackSelector(this).apply {parameters = buildUponParameters().setMaxVideoSizeSd().build()
}
player = ExoPlayer.Builder(this).setTrackSelector(trackSelector).build()

7.2 DRM 保护

ExoPlayer也支持DRM(如Widevine),您可以这样加载受DRM保护的内容:

val drmSessionManager = DefaultDrmSessionManager.Builder().setKeyRequestParameters(mapOf("Content-Type" to "application/json")).build()
val mediaItem = MediaItem.Builder().setUri(videoUri).setDrmUuid(C.WIDEVINE_UUID).setDrmSessionManager(drmSessionManager).build()
player?.setMediaItem(mediaItem)

8. 释放播放器资源

        当ActivityFragment关闭时,需要释放ExoPlayer,避免内存泄漏:

    override fun onDestroy() {super.onDestroy()// 确保在Activity/Fragment销毁时释放播放器资源player?.release()player = null}

   内存管理

  •  在 onPause() 时暂停播放

  •  在 onStop() 时释放播放器资源

  •  使用 Player.STATE_IDLE 检测非常规状态

9. 从旧版迁移指南

主要变化点:

旧版 (com.google.android.exoplayer)新版 (androidx.media3)
SimpleExoPlayerExoPlayer
DefaultTrackSelector保持不变
PlayerViewPlayerView
MediaSourceMediaItem

10. 总结

功能代码示例
初始化播放器ExoPlayer.Builder(this).build()
播放本地视频MediaItem.fromUri("file:///path/to/video.mp4")
播放网络文学MediaItem.fromUri("https://www.example.com/sample.m3u8")
监听播放状态player.addListener(Player.Listener { ... })
自定义 UIPlayerControlView
手动切换DefaultTrackSelector()
DRM 支持setDrmUuid(C.WIDEVINE_UUID)
下载资源player.release()

    Media3 ExoPlayer 通过模块化设计和持续更新,为 Android 开发者提供了更现代、更强大的媒体播放解决方案。本文示例已实现基本播放功能,开发者可根据需求扩展实现:

  • 字幕渲染

  • 多音轨切换

  • 播放速度控制

  • 自定义 UI 皮肤

  • 离线缓存管理

相关推荐

OkHttp深度解析:请求流程、分发器机制、拦截器工作及TCP连接复用-CSDN博客文章浏览阅读1.6k次,点赞78次,收藏64次。OkHttp是一个高效的HTTP客户端库,其请求流程包括创建OkHttpClient实例、Request对象,通过Call对象执行请求,并可选择同步或异步方式处理响应。OkHttp分发器负责调配请求任务,维护请求队列和线程池,确保请求有序执行。拦截器机制基于责任链模式,允许用户自定义请求和响应的处理逻辑。此外,OkHttp通过连接池机制复用TCP连接,提高性能并减少资源消耗。这些特性使得OkHttp成为处理HTTP请求的强大工具,广泛应用于各种Java和Android项目中。 https://shuaici.blog.csdn.net/article/details/144860202Android内存优化指南:从数据结构到5R法则的全面策略_android 内存管理指南-CSDN博客文章浏览阅读1.5k次,点赞68次,收藏62次。Android内存优化涉及多个方面,从选择合适的数据结构如ArrayMap和SparseArray以减少内存占用,到避免使用内存开销大的枚举类型。谨慎使用多进程和large heap选项,同时充分利用NDK进行内存管理。图片优化是关键,通过采样、缓存和格式转换等方式减少内存占用。此外,遵循5R法则——释放、回收、减少、重用和检查,确保资源得到有效管理。这些策略共同构成了一套全面的Android内存优化方案,有助于提升应用性能和用户体验。_android 内存管理指南 https://shuaici.blog.csdn.net/article/details/145811726

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com