安卓上两类多媒体服务简要分析

安卓系统里面有两类主流的多媒体服务实现, mediaserver和mediacodec server,两套方案作为安卓系统多媒体架构的基础支撑框架,为安卓设备提供视频解码方案.

关于mediacodec和mediaserver是安卓多媒体实现的两种框架,mediaplayer是一个server ,应用是通过binder请求多媒体服务的,这方面,mediacodec也一样,它也是server,应用也是通过binder请求media codec 服务的。mediacodec也有独立的进程,通过binder请求服务。

安卓系统默认的多媒体应用是nuplayer,它用的是软解,所以有研发能力的芯片原厂都会基于自己的VPU开发一套框架,来替换掉安卓原生的框架,对接安卓的播放器接口。

平板上用mediacodec比较多,手机上用mediaserver比较多。厂商也会给予开源框架比如FFMPEG,开发一套独立于上面两套框架的第三套框架,它的目的是为了和方案解耦,不依赖于原厂VPU的特性构建自己的播放器,这种对算力有要求,必须要用强一些的芯片,所以一般再手机上用的比较多,比如bilibili的手机播放器ijkPlayer,就是基于ffmpeg.

MediaServer VS MediaCodec:

 接下来我们看一下MediaCodec和MediaServer在android sdk中的位置:

首先看MediaCodec:

main_codecservice.cpp的实现,可以看到这完全是一个安卓服务该有的初始化样子:

MediaCodecService.cpp的实现,onTransact也是binder server的响应客户端请求的主要入口函数。

扫描二维码关注公众号,回复: 13154110 查看本文章

mediacodec.rc

接下来看mediaserver,首先看在SDK中的位置: 

main_mediaserver.cpp 实现:

mediaserver.rc 

你在安卓上使用的各式各样的多视频应用,本质上都是对以上两种服务的套壳,真正的解码工作是由用户程序通过Binder调用这两个服务,再通过服务间接调用VPU的解码库实现的。


 结束!

猜你喜欢

转载自blog.csdn.net/tugouxp/article/details/118677029
今日推荐