随笔分类 -  Android多媒体

摘要:mAudioSessionId = AudioSystem::newAudioUniqueId(AUDIO_UNIQUE_ID_USE_SESSION); mHwSync = AudioSystem::getAudioHwSyncForSession((audio_session_t) mAudio 阅读全文
posted @ 2022-10-10 16:31 青山渺渺 阅读(188) 评论(0) 推荐(0) 编辑
摘要:mkv封装格式相关内容可以参考:MKV 文件格式解析_Martyn哥的博客-CSDN博客_mkv 格式解析 本篇主要是用来记录MatroskaExtractor是如何解析EBML的,如何解析EBML header以及SEGMENT的 构造函数 先看构造函数,android MKV文件的解析需要依赖外 阅读全文
posted @ 2022-05-24 15:58 青山渺渺 阅读(223) 评论(0) 推荐(0) 编辑
摘要:MyScreenRecord.cpp //#define LOG_NODEBUG 0 #define LOG_TAG "myrecord" #include <signal.h> #include <string.h> #include <assert.h> #include <utils/Erro 阅读全文
posted @ 2022-05-20 17:55 青山渺渺 阅读(793) 评论(0) 推荐(0) 编辑
摘要:首先来看mp4的封装格式,mp4数据都被放在一个个的箱子当中,也就是box,box的字节序为网络字节序,也就是大端存储,box由header和body组成,header指明box的大小和类型,body根据header的类型存储对应的内容。 box size有三种可能: box开头的4个字节为box 阅读全文
posted @ 2022-05-19 18:54 青山渺渺 阅读(820) 评论(0) 推荐(0) 编辑
摘要:1、YUV YUV是一种颜色编码方法,Y表示明亮度(Luminance、Luma),U和V表示色度、浓度(Chrominance、Chroma) Y表示亮度分量,也就是灰度图 U(Cb)表示色度分量,是照片蓝色部分去掉亮度 V(Cr)表示色度分量,是照片红色部分去掉亮度 1.1、YUV的采样格式 采 阅读全文
posted @ 2022-05-17 18:01 青山渺渺 阅读(472) 评论(0) 推荐(0) 编辑
摘要:MyDecoderBase.h #ifndef __MY_DECODERBASE_H__ #define __MY_DECODERBASE_H__ #include <media/stagefright/foundation/AHandler.h> namespace android { struc 阅读全文
posted @ 2022-05-16 13:29 青山渺渺 阅读(577) 评论(0) 推荐(0) 编辑
摘要:这一节是实践,学习android原生SimplePlayer并自己码一遍,果然学到很多。 MyPlayer.h #include <media/stagefright/foundation/AHandler.h> #include <media/stagefright/foundation/AStr 阅读全文
posted @ 2022-05-12 15:44 青山渺渺 阅读(615) 评论(0) 推荐(0) 编辑
摘要:之前看到在ATSParser::Pogram::Stream中会创建一个ESQueue,用于存储解析出来的ES data,这个ESQueue到底是用来做什么的呢?这节就来研究研究。 1、构造函数 ESQueue的全名是ElementaryStreamQueue, 构造函数传入两个参数Mode和fla 阅读全文
posted @ 2022-05-10 17:42 青山渺渺 阅读(317) 评论(0) 推荐(0) 编辑
摘要:这节来了解下MediaCodecList相关代码路径: frameworks/av/media/libstagefright/MediaCodecList.cpp frameworks/av/media/libstagefright/OmxInfoBuilder.cpp frameworks/av/ 阅读全文
posted @ 2022-04-21 16:29 青山渺渺 阅读(882) 评论(0) 推荐(1) 编辑
摘要:本节主要学习内容是看看MPEG2TSExtractor是如何处理TS流的。 相关代码位置: frameworks/av/media/extractors/mpeg2/MPEG2TSExtractor.cpp frameworks/av/media/libstagefright/mpeg2ts/ATS 阅读全文
posted @ 2022-04-13 17:12 青山渺渺 阅读(571) 评论(0) 推荐(0) 编辑
摘要:这一节的学习分为三块内容,omx hidl service用法、OMX架构、ACodec中的buffer分配。 1、omx hidl service system可以借助vndbinder来访问vendor分区的内容,这里以omx hidl service为例子学习下hidl代码要如何阅读使用。 相 阅读全文
posted @ 2022-04-13 14:21 青山渺渺 阅读(1791) 评论(0) 推荐(0) 编辑
摘要:这一节来学习MediaCodec的工作原理,相关代码路径: http://aospxref.com/android-12.0.0_r3/xref/frameworks/av/media/libstagefright/MediaCodec.cpp 1、创建mediacodec对象 mediacodec 阅读全文
posted @ 2022-04-08 16:53 青山渺渺 阅读(2034) 评论(0) 推荐(1) 编辑
摘要:学以致用,这一节来native binder实战! android 12中的service用到的Bp、Bn文件多由aidl生成,所以实战中也用aidl来生成。 1、文件目录结构 文件目录结构如上,偷懒没有把头文件放到include目录当中去 2、aidl文件 package android.test 阅读全文
posted @ 2022-03-31 16:33 青山渺渺 阅读(1161) 评论(0) 推荐(0) 编辑
摘要:前面一节学习了ServiceManager这个特殊service的工作过程,这一节来看看普通service的工作过程。 就用media.extractor这个service来当例子! 1、服务的注册及启动 media.extractor这个service的注册及启动在 frameworks/av/s 阅读全文
posted @ 2022-03-30 15:36 青山渺渺 阅读(936) 评论(0) 推荐(0) 编辑
摘要:今天开始了解一下binder,就先从ServiceManager开始学习。 网上的相关博文普遍是Android 11之前的,阅读时对比Android 11或12的代码发现有很多内容找不到了,比如 frameworks/native/cmds/servicemanager 下面的binder.c没有了 阅读全文
posted @ 2022-03-29 17:59 青山渺渺 阅读(2998) 评论(0) 推荐(1) 编辑
摘要:来写个demo试试看到底是ALooper AHandler AMessage是怎么运行的,源文件以及Android.bp如下: // EvenHandler.h #ifndef __MESSAGE_TEST_H__ #define __MESSAGE_TEST_H__ #include <media 阅读全文
posted @ 2022-03-25 17:24 青山渺渺 阅读(279) 评论(0) 推荐(0) 编辑
摘要:卧榻之侧岂容他人酣睡,到现在ALooper AHandler AMessage的工作原理一直都没搞懂,很慌!看他们的路径都在libstagefright/foundation下,作为一个foundation怎么能不去搞明白,今天必须解决他们! 相关代码路径: AHandler.cpp - OpenG 阅读全文
posted @ 2022-03-25 13:53 青山渺渺 阅读(641) 评论(0) 推荐(0) 编辑
摘要:NuPlayer的AVSync由Renderer实现,接下来主要来看AVSync的工作原理 相关代码位置: NuPlayerRenderer.cpp - OpenGrok cross reference for /frameworks/av/media/libmediaplayerservice/n 阅读全文
posted @ 2022-03-24 15:53 青山渺渺 阅读(939) 评论(0) 推荐(1) 编辑
摘要:本节来看一下NuPlayer Source中的GenericSource,GenericSource主要是用来播放本地视频的,接下来着重来看以下5个方法: prepare,start,pause,seek,dequeueAccessUnit 相关代码位置: http://aospxref.com/a 阅读全文
posted @ 2022-03-17 17:20 青山渺渺 阅读(956) 评论(2) 推荐(0) 编辑