![](https://img-blog.csdnimg.cn/direct/9d3200199ce440c397e9b6ebfb919708.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android Media学习笔记
文章平均质量分 93
Android Media学习笔记
青山渺渺
Android Framework、Android Media开发工程师,关注公众号《青山渺渺》阅读更多内容
展开
-
H.264码流解析
H.264(AVC)码流解析原创 2024-04-30 09:39:50 · 1386 阅读 · 0 评论 -
H.265码流解析
H.265(hevc)码流解析原创 2024-05-24 23:53:10 · 1012 阅读 · 0 评论 -
TS码流解析(三)PES
PES解析原创 2024-04-26 22:24:08 · 743 阅读 · 0 评论 -
TS码流解析(一)TS Header
TS header和adaptation field解析原创 2024-04-25 23:06:11 · 1151 阅读 · 0 评论 -
TS码流解析(二)PSI PAT PMT
PSI PAT PMT section解析原创 2024-04-26 22:21:33 · 1136 阅读 · 0 评论 -
Android 13 - Media框架(33)- ACodec(九)
FILL_BUFFER_DONE原创 2024-04-20 15:44:23 · 1911 阅读 · 3 评论 -
Android 13 - Media框架(32)- ACodec(八)
OMX_EventPortSettingsChanged原创 2024-02-26 00:16:49 · 2650 阅读 · 0 评论 -
Android 13 - Media框架(31)- ACodec(七)
之前的章节中我们解了 input buffer 是如何传递给 OMX 的,以及Output buffer 是如何分配并且注册给 OMX 的。这一节我们就来看ACodec是如何处理OMX的Callback的。原创 2024-01-15 23:29:51 · 2526 阅读 · 1 评论 -
Android 13 - Media框架(30)- ACodec(六)
前一节我们了解了input buffer写入的流程,知道了起播写前几笔数据时会先获取graphic buffer,这一节我们就一起来了解下dequeueBufferFromNativeWindow是如何工作的。原创 2024-01-03 23:48:58 · 1494 阅读 · 0 评论 -
Android 13 - Media框架(29)- MediaCodec(四)
上一节我们了解了如何通过 onInputBufferAvailable 和 getInputBuffer 获取到 input buffer index,接下来我们一起学习上层如何拿到buffer并且向下写数据的。原创 2024-01-01 23:03:15 · 1517 阅读 · 0 评论 -
Android 13 - Media框架(28)- MediaCodec(三)
上一节我们了解到 ACodec 执行完 start 流程后,会把所有的 input buffer 都提交给 MediaCodec 层,MediaCodec 是如何处理传上来的 buffer 呢?这一节我们就来了解一下这部分内容。原创 2023-12-28 23:47:06 · 1988 阅读 · 0 评论 -
Android 13 - Media框架(27)- ACodec(五)
前面几节我们了解了OMXNodeInstance是如何处理setPortMode、allocateBuffer、useBuffer的,这一节我们再回到ACodec,来看看 ACodec start 的其他部分。我们首先来回顾一下,ACodec start 的状态切换以及处理的事务,我们用一张不太准确的图来表示:可以看到将 OMX 组件设置为 OMX_StateIdle 之后,OMX 组件会等待所有的 buffer 都分配完成,然后将状态设置完成的消息返回给ACodec层。原创 2023-12-26 23:42:22 · 1800 阅读 · 0 评论 -
Android 13 - Media框架(26)- OMXNodeInstance(三)
上一节我们了解了OMXNodeInstance中的端口定义,这一节我们一起来学习ACodec、OMXNode、OMX 组件使用的 buffer 到底是怎么分配出来的,以及如何关联起来的。(我们只会去了解 graphic buffer的创建、input bytebuffer的创建、secure buffer的创建)原创 2023-12-24 00:29:57 · 1401 阅读 · 0 评论 -
Android 13 - Media框架(25)- OMXNodeInstance(二)
OMXNodeInstance原创 2023-12-21 23:47:54 · 1059 阅读 · 0 评论 -
Android 13 - Media框架(24)- OMXNodeInstance(一)
这一节开始我们正式学习 ACodec 的对外接口实现,虽然ACodec代码很长,但是从头文件中我们可以发现,ACodec 对外开放的公有方法非常少,基本就是CodeBase中定义的接口,所以学起来并不会非常困难。另外 ACodec 的本质其实就是在帮助我们进行编解码组件的配置,以及控制输入输出buffer,所以我们只要知道每个阶段都需要做些什么,buffer对应会有什么动作就会比较简单了。原创 2023-12-20 23:43:36 · 1076 阅读 · 0 评论 -
Android 13 - Media框架(23)- ACodecBufferChannel
这一节我们将了解 ACodecBufferChannel 中的 buffer 传输机制。原创 2023-12-20 00:01:56 · 1534 阅读 · 0 评论 -
Android 13 - Media框架(22)- ACodec(四)
前面两节我们了解了 ACodec 的创建及配置流程,配置完成后 ACodec 进入了 LoadedState,这一节开始将会了解 ACodec 的启动过程。调用 ACodec::initiateStart 方法发出的 kWhatStart 消息将有 LoadedState 状态来处理,这个方法会向 OMX 组件发送命令,将组件的状态设定为,之后将 ACodec 的状态切换到中间等待状态。原创 2023-12-14 23:50:45 · 2226 阅读 · 0 评论 -
Android 13 - Media框架(21)- ACodec(三)
接下来会调用 setComponentRole 方法,首先来讲我理解的为什么要调用这个方法:我们实现的 OMX 组件可能共享的是一套流程,也就是各个组件 lib 可能是链接到同一个lib当中,那这里就会有一个问题,每当我们调用 getHandle 创建一个句柄时,组件并不知道我们要对什么格式的数据进行处理,也不知道是做编码还是做解码,所以上层需要设定相关参数通知 OMX 组件它需要走什么流程。我们这里先跳过 encoder 的流程,所以接下来会跳过一部分代码。,我们这里就不再展开了。原创 2023-12-11 23:36:59 · 1831 阅读 · 0 评论 -
Android 13 - Media框架(20)- ACodec(二)
这一节开始我们就来学习 ACodec 的实现。原创 2023-12-09 23:17:19 · 2052 阅读 · 0 评论 -
Android 13 - Media框架(19)- ACodec(一)
这一节我们将会了解 ACodec 的状态转换机制,从 ACodec 的基类名称HierarchicalStateMachine来看,它用到的是分层状态机,了解这里的状态转换将会对我们学习 OpenMax 会有所帮助,也会对我们自己的代码书写有所帮助。原创 2023-12-08 23:36:01 · 1085 阅读 · 0 评论 -
Android 13 - Media框架(18)- CodecBase
从这一节开始我们会回到上层来看ACodec的实现,在这之前我们会先了解ACodec的基类CodecBase。CodecBase.h 中除了声明有自身接口外,还定义有内部类 CodecCallback、BufferCallback,以及另一个基类 BufferChannelBase,接下来我们会一一了解它们的作用。原创 2023-12-04 23:18:05 · 1179 阅读 · 0 评论 -
Android 13 - Media框架(17)- OpenMax(五)
这一节最后来了解 OMX_Video.h 以及 OMX_Audio.h 中的内容。原创 2023-11-29 23:51:05 · 647 阅读 · 0 评论 -
Android 13 - Media框架(16)- OpenMax(四)
这一节继续了解 openmax 目录下的内容。原创 2023-11-28 23:57:41 · 1116 阅读 · 0 评论 -
Android 13 - Media框架(15)- OpenMax(三)
上一节学习了 media.codec 服务中的部分内容,这一节我们将一起了解 OMX IL 层的 API 以及相关的结构体等内容。原创 2023-11-28 21:57:10 · 2394 阅读 · 0 评论 -
Android 13 - Media框架(14)- OpenMax(二)
这一节我们将来解析 media.codec 这个 HIDL service 究竟提供了什么服务,服务是如何启动的。原创 2023-11-20 00:11:37 · 916 阅读 · 0 评论 -
Android 13 - Media框架(13)- OpenMax(一)
这里看到 ACodec 并没有获取 IOmx 服务,而是使用 OMXClient 封装了服务获取过程,接着再调用其 interface 接口返回获取的服务代理,不过这里有点要注意,返回代理的类型是。实现了服务相关的文件,那么就要开启进程启动服务了,相关的代码在 frameworks/av/services/mediacodec 下,阅读。位于 frameworks/av/media/libmedia/include/media/omx/1.0,可以看到它是继承于。原创 2023-11-01 22:37:01 · 1208 阅读 · 0 评论 -
Android 13 - Media框架(12)- MediaCodec(二)
前面一节我们学习了 MediaCodec 的创建以及配置过程,了解部分设计机制以及功能,这一节我们将继续学习其他方法。原创 2023-10-28 00:02:45 · 607 阅读 · 0 评论 -
Android 13 - Media框架(11)- MediaCodec(一)
MediaCodec 是 Android 平台上音视频编解码的标准接口,无论是使用软解还是硬解都要通过调用 MediaCodec来完成,是学习 Android 音视频不可跳过的重要部分。MediaCodec 部分的代码有几千行,光是头文件就有几百行,对于我这样的新手来说,简直就劝退了,又或者是硬着头皮往下看,一行一行阅读,看到里面的各种状态各种变量,很容易就晕了。我们这一篇笔记旨在从设计思路的角度了解 MediaCodec,不仅仅是粘贴代码流程,力求更好地帮助理解 MediaCodec 的原理。原创 2023-10-17 19:26:13 · 1905 阅读 · 0 评论 -
Android 13 - Media框架(10)- NuPlayer::Renderer
这一节我们来了解 NuPlayer Renderer 是如何工作,avsync 机制是如何运行的。原创 2023-09-05 00:12:52 · 1776 阅读 · 0 评论 -
Android 13 - Media框架(9)- NuPlayer::Decoder
没有其他的,感悟是 Android ALooper 机制领悟的还不够深刻,设计模式也不会,接下来会继续加强这部分的学习!以上内容如果有错误请不要吝啬指导。如需阅读其他 Android Media 框架内容,还请移步。原创 2023-09-02 19:09:36 · 2814 阅读 · 0 评论 -
Android 13 - Media框架(8)- MediaExtractor(2)
上一篇 MediaExtractor 笔记中我们学习了 extractor 以及 source 调用的层次结构,这一节我们会看一看部分的实现细节。原创 2023-09-27 00:05:33 · 445 阅读 · 0 评论 -
Android 13 - Media框架(8)- MediaExtractor
上一篇我们了解了 GenericSource 需要依赖 IMediaExtractor 完成 demux 工作,这一篇我们就来学习 android media 框架中的第二个服务 media.extractor,看看 IMediaExtractor 是如何创建与工作的。原创 2023-08-25 22:14:31 · 3907 阅读 · 2 评论 -
Android 13 - Media框架(7)- NuPlayer::Source
Source 在播放器中起着拉流(Streaming)和解复用(demux)的作用,Source 设计的好坏直接影响到播放器的基础功能,我们这一节将会了解 NuPlayer 中的通用 Source(GenericSource)关注本地播放架构,直播流暂时先不研究。原创 2023-08-24 19:22:07 · 3011 阅读 · 0 评论 -
Android 13 - Media框架(6)- NuPlayer
到这里 NuPlayer 的了解就告一段落,里面异步处理的思想 和 播放器的处理流程 还是要多多揣摩学习,回想起自己写的 Player 各种处理速度都不理想,还是太年轻了。startpauseresetAsync再对比下两个暂停的实现方式:pause 通过暂停 Source 送数据,暂停 Render 渲染数据来完成,Decoder 不需要暂停;flush 的暂停通过不给 Decoder 喂数据来实现,不需要暂停 Source。原创 2023-08-22 20:12:23 · 3668 阅读 · 0 评论 -
Android 13 - Media框架(5)- NuPlayerDriver
前面的章节中我们了解到上层调用setDataSource后,MediaPlayerService::Client(IMediaPlayer)会调用MediaPlayerFactory创建MediaPlayerBase。Android为我们提供了默认的播放器实现NuPlayer,NuPlayerDriver实现了MediaPlayerBase接口,内部调用并管理有NuPlayer,起着承上启下的作用。原创 2023-08-20 21:08:24 · 3245 阅读 · 0 评论 -
Android 13 - Media框架(4)- MediaPlayerService
MediaPlayerService是android的多媒体框架的核心服务之一,该服务存储有android平台所支援的编解码器信息,管理所有通过MediaPlayer创建的播放器实例,起着承上启下的作用,这一节我们将了解MediaPlayerService中的内容。原创 2023-08-18 09:33:06 · 4172 阅读 · 0 评论 -
Android 13 - Media框架(3)- MediaPlayer生命周期
上一节了解了MediaPlayer api的使用,这一节就我们将会了解MediaPlayer的生命周期与api使用细节。原创 2023-08-15 18:22:12 · 3261 阅读 · 0 评论 -
Android 13 - Media框架(2)- Demo App与MediaPlayer Api了解
尝试用MediaPlayer写了一个播放demo,实现了网络流和本地流的播放。由于本人对app开发一窍不通,所以demo中很多内容是边查资料边写的,写的也比较杂乱,能够帮助理解api就行。这一节主要会记录demo开发中学到的内容,以及了解MediaPlayer Api。原创 2023-08-02 00:05:21 · 3759 阅读 · 0 评论 -
Android 13 - Media框架(1)- 总览
开始学习前还有一些前备知识需要了解,包括智能指针、异步消息机制、以及binder框架,这三部分穿插于Android Media框架的各个角落,先了解他们会对看代码有些许帮助。我在学习Media框架之前已经提前学习了这部分的内容,也做了一些笔记,这里也贴出来让有需要的同学看看。为了加深对Android Media框架的理解,决定在这里记录下学习过程中碰到的问题以及一些个人思考。对于binder的学习可以不用很深入(我也不太会,笔记记录的乱起八糟),了解如何使用即可。原创 2023-07-30 10:56:44 · 4097 阅读 · 0 评论 -
Android 13 - Media框架 - 异步消息机制
由于网上已经有许多优秀的博文讲解了Android的异步消息机制(ALooper/AHandler/AMessage那一套),而且流程也不是很复杂,所以这里将不会去讲代码流程。本篇将会记录学习过程中的疑问以及自己的解答,希望可以帮助有同样疑问的小伙伴们,如果理解有不对或者偏差,欢迎大家一起讨论。本文中的代码参考自。原创 2023-06-15 00:31:46 · 1763 阅读 · 0 评论