前言
ExoPlayer 是一个由 Google 开发的用于 Android 平台的开源媒体播放库。
ExoPlayer 旨在提供比 Android 系统自带的 MediaPlayer 更强大、更灵活的媒体播放功能。它可以播放本地和网络上的各种音频和视频文件,并且支持多种常见的媒体格式和协议。
支持常见的音频格式如 MP3、AAC、FLAC 等,视频格式如 MP4、MKV、WebM 等。此外,还支持 DASH(Dynamic Adaptive Streaming over HTTP)、HLS(HTTP Live Streaming)等自适应流媒体格式,能够根据网络状况自动调整播放质量。
支持 HTTP、HTTPS、RTSP 等多种网络协议,方便从不同的网络源获取媒体资源。
添加依赖
1 2 3 4 5 6
| dependencies { implementation('androidx.media3:media3-exoplayer:1.8.0') implementation('androidx.media3:media3-exoplayer-hls:1.8.0') }
|
封装组件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.viewinterop.AndroidView import androidx.core.net.toUri import androidx.media3.common.MediaItem import androidx.media3.exoplayer.ExoPlayer import androidx.media3.ui.PlayerView
@Composable fun ZExoplayerComp(resourceUrl: String) { val context = LocalContext.current
val exoPlayer = remember { ExoPlayer.Builder(context).build().apply { val mediaItem = MediaItem.fromUri(resourceUrl.toUri()) setMediaItem(mediaItem) prepare() playWhenReady = true
} }
DisposableEffect(Unit) { onDispose { exoPlayer.release() } }
AndroidView(factory = { ctx -> PlayerView(ctx).apply { player = exoPlayer setBackgroundColor(android.graphics.Color.TRANSPARENT) } }, modifier = Modifier.fillMaxSize()) }
|
报错
java.lang.IllegalStateException: java.lang.ClassNotFoundException: androidx.media3.exoplayer.hls.HlsMediaSource$Factory
添加依赖
1
| implementation('androidx.media3:media3-exoplayer-hls:1.8.0')
|