【多媒体编解码】Openmax IL (二)Android多媒体编解码Component架构

本文主要探讨Android多媒体编解码的组件架构,包括编解码库的加载与管理流程、匹配初始化过程。通过分析类图和时序图,揭示了MediaCodecList、OMXComponent、OMXNodeInstance等关键组件的作用。文章以Android 7.0+QCOM8909平台为例,详细阐述了如何根据mineType选择解码器,并集成新的软硬件编解码库。
摘要由CSDN通过智能技术生成

带着三个问题学习这个部分:
问题1:Android中间各种编解码库的加载与管理?
问题1:Android如何确定使用那个编解码器并且初始化?
问题2:Android如何集成一个新的编解码器,硬件平台相关/非硬件平台相关两种情况?

按照OpenMax IL的简述,编解码架构中间至关重要的是如下两点:
1,各个不同功能的conponent
2,平台商实现的“media.resouce_manager”,用来管理conponent需要的资源。从而控制component状态的变化。

PS:
本文是基于Android7.0+QCOM8909高通平台,播放本地视频的情况分析代码,先对架构有一个整体的认识,后面再开始对流媒体以及协议的学习与分析。

1,编解码加载与管理流程

1.1,系统相关的uml类图—看编解码相关成员模块


分析类图:
其中主要包括个模块
1,nuplay
2,MediaCodec
3,OMXConponent
4,FileSouce

1.2编解码库的加载和初始化管理


二,加载初始化时序图,以及流程分析

一,系统包含的编解码库文件的描述文件
“/etc/media_codecs.xml”
“/etc/media_codecs_performance.xml”

这两个文件列举了这个系统支持的所有音视频编解码对应的支持格式,仅仅在开机初始化的时候加载一次
project 编译文件:

# media_profiles and media_codecs xmls for msm8909
ifeq ($(TARGET_ENABLE_QC_AV_ENHANCEMENTS), true)
PRODUCT_COPY_FILES += device/Project/media/media_profiles_8909.xml:system/etc/media_profiles.xml \ 
                      device/Project/media/media_codecs_8909.xml:system/etc/media_codecs.xml \                   device/Project/media/media_codecs_performance_8909.xml:system/etc/media_codecs_performance.xml
endif

qcom/base.mk编译文件

PRODUCT_COPY_FILES += \    frameworks/av/media/libstagefright/data/media_codecs_google_audio.xml:system/etc/media_codecs_google_audio.xml \    frameworks/av/media/libstagefright/data/media_codecs_google_telephony.xml:system/etc/media_codecs_google_telephony.xml \  frameworks/av/media/libstagefright/data/media_codecs_google_video.xml:system/etc/media_codecs_google_video.xml \
    device/qcom/common/media/media_profiles.xml:system/etc/media_profiles.xml \ #覆盖
    device/qcom/common/media/media_codecs.xml:system/etc/media_codecs.xml  #覆盖

相关文件描述

//media_codecs.xml(media_codecs_8909.xml)
<CodecList>
    <Include href="media_codecs_google_audio.xml" />
    <Include href="media_codecs_google_telephony.xml" />
    <Settings>
        <Setting name="max-video-encoder-input-buffers" value="9" />
    </Settings>
    <Encoders>
        <!-- Video Hardware  -->
        <MediaCodec name="OMX.qcom.video.encoder.avc" type="video/avc" >
            <Quirk name="requires-allocate-on-input-ports" />
            <Quirk name="requires-allocate-on-output-ports" />
            <Quirk name="requires-loaded-to-idle-after-allocation" />
            <Limit name="size" min="96x64" max="1280x720" />
            <Limit name="alignment" value="2x2" />
            <Limit name="block-size" value="16x16" />
            <Limit name="blocks-per-second" min="1" max="108000" />
            <Limit name="bitrate" range="1-14000000" />
            <Limit name="concurrent-instances" max="8" />
            <Feature name="intra-refresh" />
        </MediaCodec>
    </Encoders>
    <Decoders>
        <!-- Audio Software  -->
        <MediaCodec name="OMX.qti.audio.decoder.flac" type=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值