(2)android MediaPlayer 和Nupalyer、MediaCodec、OMX关系

基于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:

补充两张以前分析不怎么规范的图:


猜你喜欢

转载自blog.csdn.net/u012459903/article/details/127057511