
Native
文章平均质量分 74
Leaf Ye
这个作者很懒,什么都没留下…
展开
-
Android12 MultiMedia框架之NuPlayer Surface
APP会创建一层SurfaceView来显示视频层,同时内部会创建一个BLASTBufferQueue,它的生产者会挂载到我们的Decoder,枢纽就是BpGraphicBufferProducer,它的消费者是SurfaceFlinger,会把这个APP的Layer(SurfaceView在SurfaceFlinger中的对应概念)同其他APP的图层一起合成送显上屏。答案是Surface,而且Surface是NuPlayer创建Decoder的条件。原创 2024-07-16 14:32:08 · 375 阅读 · 0 评论 -
Android12 MultiMedia框架之GenericSource extractor
onPrepareAsync() 函数到这里结束,主要内容基本都过了一遍,暂时还缺少了MediaBuffer的部分没有涉及到。下面还是老规矩,以图的方式总结下本节的内容:图一 onPrepareAsync()执行流程图二 MP4 extractor关系架构图看代码感觉还没那么强烈,但是从图二的架构图来看,就可以看出设计NuPlayer这个架构的架构师太牛了。图中绿色方框框起来的是MP4 extractor自己实现的内容,其他extractor也是按照这种方式去替换方框中的实现即可。原创 2024-07-11 09:08:40 · 1142 阅读 · 0 评论 -
Android12 MultiMedia框架之MediaExtractorService
上节学到setDataSource()时会创建各种Source,source用来读取音视频源文件,读取到之后需要demux出音、视频、字幕数据流,然后再送去解码。那么负责进行demux功能的media extractor模块是在什么时候阶段创建的?这里暂时不考虑APP创建的情况,以前面学过的GenericSource为例,它是在prepare阶段被创建的。本节暂时不分析GenericSource创建extractor的流程,先来看看MediaExtractorService的启动过程。原创 2024-07-01 17:32:30 · 1185 阅读 · 0 评论 -
Android12 MultiMedia框架之NuPlayer Source
NuPlayer主要包含三大组件:Source、Decoder和Render。这些组件都是在接口调用时逐步创建的。本节先来记录下Source相关的内容。从code可以看出,NuPlayer的Source:GenericSource/HTTPLiveSource/RTPSource/RTSPSource/StreamingSource。这些source都是在JAVA层或者NATIVE层调用MediaPlyaer的不同类型的setDataSource()接口来创建的。原创 2024-06-17 17:55:40 · 891 阅读 · 0 评论 -
Android12 MultiMedia框架之NuPlayer状态机
其中最主要的状态分别是:IDLE/UNPREPARED/PREPARED/RUNNING/PAUSED/STOPPED,其他的状态都是中间的过度态。通过这些状态形成一个状态机来控制上层的接口调用的正确顺序,来让NuPlayer正常的运转。原创 2024-06-11 14:49:29 · 395 阅读 · 0 评论 -
Android12 MultiMedia框架之ALooper/AHandler/AMessage
最后,还有一个gLooperRoster,它是一个全局变量,通过调用ALooper的registerHandler()方法将ALooper和AHandler注册到它内部。全局搜索整个变量可以知道,它没啥功能行的作用,只是debug的时候为dump()提供打印信息。总结一下:当看到(new AMessage(kWhatXXXX, AHandler))->post()语句的时候,直接去到AHandler中的onMessageReceived()方法中,去看对应的kWhatXXXX的分支处理就好了。原创 2024-06-07 11:15:02 · 1014 阅读 · 0 评论 -
Android12 MultiMedia框架之NuPlayerDriver
而这两个Factory都没有实现本地播放类型的scoreFactory()方法,所以它的返回值就是父类的初始实现的值:0.0。接下来进入setDataSource_post()了,它的第二个参数传入的是NuPlayerDriver的setDataSource()的执行结果,这个函数就是在创建source了,我们后面的章节再看,这里跳过。本来想把所有的模块画在一起,但是因为连线的原因不好处理,连接的乱七八糟,怎么调整都不好看,所以干脆就分割成了几个小块,也就是图中的3个小方框。设计这个宏的人估计喜欢打球。原创 2024-06-07 09:58:58 · 947 阅读 · 0 评论 -
Android12 MultiMedia框架之MediaPlayerService::Client
内部直接new了一个Client,再通过binder回传到MediaPlayer,MediaPlayer持有Client的Bp端。同时MediaPlayerService本地也保存一份Client。MediaPlayerService中的Client和MediaPlayer之间的关系有点类似于SurfaceFLinger中的Client和SurfaceComposerClient之间的关系。本篇讲的是Client的创建,所以暂时只看create(),setDataSource()方法后面再看。原创 2024-06-06 17:49:27 · 388 阅读 · 0 评论 -
Android12 MultiMedia框架
Android MultiMedia框架学习笔记:1. Android12 MultiMedia框架之MediaPlayerService原创 2024-06-06 16:33:34 · 546 阅读 · 2 评论 -
Android12 MultiMedia框架之MediaPlayerService
MediaPlayerService 是 Android 媒体框架中的核心服务之一,是负责媒体播放管理的服务,提供了管理和控制媒体播放的功能,支持音频和视频文件的播放。它通过 IPC 与应用程序交互,处理媒体播放器实例的创建和管理,并确保媒体资源的正确使用和协调。再回到上面,这些都创建和记录完了之后,将MediaPlayerService注册到service manager中,所有步骤完成。到这里,MediaPlayerService启动就结束了,哈哈,如此的纯粹。原创 2024-06-06 16:26:32 · 602 阅读 · 2 评论 -
Android12 AIDL native层实现
本文主要是讲解如何实现一个完整的AIDL HAL层的例子,包括aidl文件的编写、service的实现、测试用例的实现、开机启动以及编译过程中和运行时的错误如何解决。此文不讲解AIDL的原理,具体原理的了解请参考官方资料:https://source.android.com/docs/core/architecture/aidl?hl=zh-cn。原创 2024-05-20 10:50:17 · 2555 阅读 · 7 评论