写在最前面:第一阶段的Android Media框架学习已经结束了,目前潦草记录了三十多篇学习笔记,学习过程中碰到了许许多多的问题,思考过后对整个Media框架也有了新的认识。回过头来再看写过的内容,觉得过于浅显随意了。
深思熟虑后决定不再更新这一系列的笔记内容,我将重新思考重新整理,从全新的角度切入,力求能够更系统更深入地理解Android Media框架,新的内容将更新在我的公众号《青山渺渺》,欢迎关注订阅。全新的系列可能会有部分付费内容,如有实例可以赞助支持,这将会是你看到过的最好的Android Media框架解析文章!
全新的系列将会包括深入的Android OpenMAX框架解析、Codec2框架解析,播放器实现解析,以及音视频开发相关知识,由于内容多且广,工作繁忙,不会很快就更新完成,尽量做到每篇文章都有所可读!
全新系列文章已更新:
- Android Media Framework - 开篇
- Android Media Framework(一)OpenMAX 框架简介
- Android Media Framework(二)OpenMAX 类型阅读与分析
- Android Media Framework(三)OpenMAX API阅读与分析
- Android Media Framework(四)Non-Tunneled组件的状态转换与buffer分配过程分析
- Android Media Framework(五)Tunnel Mode
- Android Media Framework(六)插件式编程与OMXStore
- Android Media Framework(七)MediaCodecService
- Android Media Framework(八)OMXNodeInstance - Ⅰ
- Android Media Framework(九)OMXNodeInstance - Ⅱ
- Android Media Framework(十)OMXNodeInstance - Ⅲ
- Android Media Framework(十一)OMXNodeInstance - Ⅳ
- Android Media Framework(十二)OMXNodeInstance - Ⅴ
- Android Media Framework(十三)ACodec - Ⅰ
- Android Media Framework(十四)ACodec - Ⅱ
- Android Media Framework(十五)ACodec - Ⅲ
- Android Media Framework(十六)ACodec - Ⅳ
为了加深对Android Media框架的理解,决定在这里记录下学习过程中碰到的问题以及一些个人思考。由于本人水平有限,笔记的内容可能会有一些错误,如果看到也恳请指出。
ps. 这里的Media框架指的是Android媒体播放器、音视频编解码相关的内容。
下面是我绘制的简单的Android Media学习内容以及学习目标,主要包含以下几个部分:
- Media API & native wrapper:熟悉media api的调用方式及底层交互方式,熟悉java与native的串接方式,了解声明周期控制(构造与析构)
- MediaServer(media.player):了解媒体服务(binder service)的架构与提供的服务内容
- NuPlayer: 目标了player的实现
- Source & Extractor:了解demux组件与source的实现
- MediaCodec:了解编解码组件接口
- ACodec:了解编解码组件的工作流程
- OMX:了解编解码组件框架 (OpenMax)
- 最终目标:了解FFmpeg,尝试实现我们自己的Player,包含Source、Extractor、Decoder、JNI、JavaAPI五大部分
- CCodec:了解新的编解码组件的工作流程
开始学习前还有一些前备知识需要了解,包括智能指针、异步消息机制、以及binder框架,这三部分穿插于Android Media框架的各个角落,先了解他们会对看代码有些许帮助。我在学习Media框架之前已经提前学习了这部分的内容,也做了一些笔记,这里也贴出来让有需要的同学看看。
对于binder的学习可以不用很深入(我也不太会,笔记记录的乱起八糟),了解如何使用即可。这里也贴一个我的学习demo,比较复杂一点,但是更加贴近实际的使用:
学习过程中贴的代码来自于aospxref.com:
希望能更新到最后!加油!
原文阅读:
Android Media Framework(二)总览
扫描下方二维码,关注公众号《青山渺渺》阅读音视频开发内容。