Android 13(T) - Media框架(1)- 总览

从事Android Media开发工作三年有余,刚从萌新变成菜鸟,一路上跌跌撞撞学习,看了很多零零碎碎的知识,为了加深对Android Media框架的理解,决定在这里记录下学习过程中想到的一些问题以及一些思考,也希望对初学Android并且有相同问题的同学有一些帮助。由于本人水平有限,笔记的内容可能会有一些错误,如果看到也恳请指出。
ps. 这里的Media框架指的是Android媒体播放器、音视频编解码相关的内容。

下面是我绘制的简单的Android Media框架图,主要包含有8个组成部分:

  1. Media Java API (MediaPlayer.java)
  2. Java API 用到的 JNI 方法以及本地服务的封装 (libmedia)
  3. 本地服务的实现MediaPlayerService (media.player)
  4. 本地player的实现 (NuPlayer)
  5. player依赖的相关服务 (media.extractors)
  6. player依赖的编解码框架 (libstagefright)
  7. libstagefright所依赖的vendor服务 (media.codec)
  8. 编解码组件框架 (OpenMax)

我们一起先了解一个问题:为什么Media框架中要使用服务,而不是动态链接或者静态链接调用呢?

我的理解是资源复用。比如说media.player这个service中会存储有MediaCodecList相关的信息,这个信息是通过加载/system/etc 或者/vendor/etc 中的xml文件获取的,使用服务我们可以只加载一次这些信息,就可以到处使用,而不是每次使用时单独去加载。当然还有其他原因,这里不做过多的叙述,等到了相关章节会再详细了解。

开始学习前还有一些前备知识需要了解,包括智能指针、异步消息机制、以及binder框架,这三部分穿插于Android Media框架的各个角落,先了解他们会对我们看代码有些许帮助。我在学习Media框架之前已经提前学习了这部分的内容,也做了一些笔记,这里也贴出来让有需要的同学看看。

  • 智能指针
  • 异步消息机制
  • binder学习

对于binder的学习可以不用很深入(我也不太会,笔记记录的乱起八糟),了解如何使用即可。这里也贴一个我的学习demo,比较复杂一点,但是更加贴近实际的使用:

  • binder demo

学习过程中贴的代码来自于aospxref.com:

  • aospxref.com

你可能感兴趣的:(Android,android)