1 简介
ExoPlayer是android非常流行的开源播放器框架,它以其出色的兼容性,在很大程度上已取代了android系统的媒体播放器,成为媒体类应用软件的标配。
初次使用ExoPlayer,涉及的类比较多,会觉得使用比较复杂;但实际上,ExoPlayer并不是给初级用户使用的,它提供了更高级的定制能力,可以支持比Android原生库更高级的媒体支持能力;甚至,用户还可以自己定义插件,支持不同的媒体格式。
更神奇的地方在于,Exoplayer这些组件并不是一整个的库,而是提供了不同的maven坐标,供客户端组合使用, 如HLS、dash、rtsp, 甚至还提供了一些依赖三方库的插件,如okhttp、ffmpeg、av1、vp9。
这篇文章并不是Exoplayer的使用文档,而是通过分析ExoPlayer的工程组织和扩展机制,了解其中组件化的思想和插件机制的奥妙。
2 基本知识
先看一段Exoplayer中的使用样例源码,涉及了很多类
mediaItems = createMediaItems(intent);
if (mediaItems.isEmpty()) {
return false;
}
lastSeenTracks = Tracks.EMPTY;
ExoPlayer.Builder playerBuilder =
new ExoPlayer.Builder(/* context= */ this)
.setMediaSourceFactory(createMediaSourceFactory());
setRenderersFactory(
playerBuilder, intent.getBooleanExtra(IntentUtil.PREFER_EXTENSION_DECODERS_EXTRA, false));
player = playerBuilder.build();
player.setTrackSelectionParameters(trackSelectionParameters);
player.addListener(new PlayerEventListener());
player.addAnalyticsListener(new EventLogger());
涉及到的一些重要的单元或类:
- MediaItem: 播放的单元,一般是一个文件或url
- Track: 轨道,如视频轨道,音频轨道,字幕等; 音频可能有多个,可以选择不同的语言; 字幕也有可能有多个,可以选择不同的语言的字幕
- MediaSource: 代表可以被ExoPlayer播放的媒

ExoPlayer是Android流行的开源播放器,具备出色的兼容性和高度定制性。它允许用户自定义插件以支持不同媒体格式,并通过工厂模式创建组件。文章探讨了ExoPlayer的组件化架构、扩展库(如vp9)的编译与使用,以及其优雅的组件装配方式,展示了其核心组件如MediaSource、Renderer和Decoder的工作原理。
最低0.47元/天 解锁文章

966

被折叠的 条评论
为什么被折叠?



