媒体播放现状
从手机到车载,在很多地方还是有很大的不同。针对多媒体的场景Android车机目前大部分结构大致结构如下图:
从以上图看出的问题:
- 各个音视频APP单独实现播控界面,播放链路不一致,使用的底层播放器和音频焦点管理逻辑也不一样,一方面导致界面显示和交互的一致性较差,另外播控相关的碎片化bug较多,各个模块的开发能力复用较少;
- 每个模块都要单独接入媒体中心,新应用适配有一定接入联调成本,且存在连接时序、重连上的稳定性问题;
- RSD播控需要集成每个模块提供的aar开发包,各模块间耦合和复用较差,部分没有提供aar的比如carplay、在线音乐这些rsd的播控功能缺失。
播放器优化构想
目标:
- 统一的媒体播放架构,包括播控UI、会话管理、播放接口、音频焦点部分。每个播放器的差异只存在于媒体列表和最终的播放接口;
- 逐步去除媒体中心模块作为媒体同步的核心,改用基于Android原生mediasession,通过mediasession解耦各模块,同时提高复用和稳定性。
- 第三方媒体播放应用,实现原生的mediasession无需其他适配,即可满足方控、Mini播放器、PSD、RSD的同步播控功能。
最终如下图所示:
具体实现说明
-
媒体播放库选用AndroidX中的Media3,各个媒体库的对比见:Media3调研 。
-
架构上可以分为client/server端,其中server端可以支持多进程;
-
架构上也是一个分层的,分为UI、mediacontroller、sessionservice、player这4层,UI和mediacontroller在client端,sessionservice和player在server端;
主要类图如下:
原生media3 player接口描述:https://developer.android.com/reference/androidx/media3/common/Player
代码仓库:
评论区留下联系方式,会把源码和相关资料发给你
接入
统一媒体播放器接入指南