基于android 10/11, 总览一下MediaPlayer 中的给模块功能,角色定位。 查看源码可以在下几个目录 :
android\frameworks\base\media\java\android\media android\frameworks\base\media\jni android\frameworks\av\media\libmedia android\frameworks\av\media\libmediahelper android\frameworks\av\media\libmediaplayerservice android\frameworks\av\media\libstagefright
1. mediaplayer? 采用CS(客户端服务端模式) 服务端:MediaPlayerService
2. mediaPlayer 服务端内部类 Client, 使用抽象工厂模式,MediaPlayerFactory ,耦合创建NuplayerFactory->NuplayerDriver->Nuplayer (AwesomePlayer什么的已经去除了)
3. NuPlayer 作为一个native层的Player, 具备 标准的三个模块:demuxer、decoder、render. 这里即对应Source Decoder Render。 完全具备一个player所有的功能。
3.1 source 中有多种输入的支持,http、rtsp 、StreamSrouce和最常用的GenericSource. ? ? ? ? GenericSource即使用到了MediaExtracor,从文件中解析出track
3.2 . Decoder 包装了MediaCodec. (android 也对外开放了MediaCode,包括java层的和Ndk C层的接口 顾名思义也就是媒体编解码)。? MediaCodec 又转而使用ACodec, (ACodec, 即android codec),注意这里各种命名和包装的关系,很有层次感,并不是无端就这么多层次来恶心人的。 ACodec 才是android平台上codec的实现,但是为了屏蔽硬件厂商的实现差异,对上提供统一的接口,android 上对硬件厂商提供的编解码器用openMax 标准接口进行规范,(原本上openMax不仅仅规定了code的接口形式,甚至是demuxer都有,一套组件接口,但是android 只是使用了 code)。 所以 以OMX接口规范为分割, 纯软件架构层在OMX接口以上, 硬件厂商的具体具体功能已OMX规范提供组件库。 3.3 Render? 这里面有时间戳的控制,用于同步音视频的控制等,待进一步分析。
Nuplayer:
补充两张以前分析不怎么规范的图:
|