Edit online

设计说明

2 Dec 2024
Read time: 2 minute(s)
本模块源码位于 source/artinchip/aic-mpp/middle_media ,目录结构如下
aic-mpp
        |--middle-media
                |-base
                |       |-inlcude
                |       |       |-aic_message.h       //定义公共消息接口
                |       |       |-aic_parser.h        //定义 parser  接口
                |       |       |-aic_stream.h        //定义 stream 接口
                |       |       |-aic_render.h        //定义视频渲染接口
                |       |       |-aic_audio_render.h  //定义音频渲染接口
                |       |
                |       |-message    //消息接口具体实现
                |       |-parser     //parser 接口具体实现
                |       |-stream     //stream 接口具体实现
                |       |-render     //音视频渲染接口具体实现
                |
                |-audio_decoder  //音频软件解码器,无硬件音频解码器。
                |
                |-openmax        //播放器组件
                |       |-component
                |       |       |-OMX_AdecComponent.c          //音频解码组件,输入编码音频数据,输出解码后的 pcm 数据
                |       |       |-OMX_AudioRenderComponent.c   //音频渲染组件,将解码后音频送到音频设备播放
                |       |       |-OMX_ClockComponent.c         //时钟组件,为音视频同步服务
                |       |       |-OMX_DemuxerComponent.c       //解封装组件,识别文件的封装格式,从文件中解析出音视频 packet
                |       |       |-OMX_VdecComponent.c          //视频解码组件,输入编码视频数据,输出解码后的视频图像
                |       |       |-OMX_VideoRenderComponent.c   //视频渲染组件,将解码后图像显示在屏幕上
                |       |
                |       |-inlcude
                |               |-*.h  //openmax 头文件
                |
                |-player
                        |-inlcude
                        |       |-aic_player.h  //palyer 接口定义
                        |
                        |aic_player.c      //player 接口实现
  • component 相比 V1 版本播放器删除 OMX 的 component 设计,变更为自研的 mm_component 框架,内容更加精简。

  • 为了避免整体框架调整过大,该框架部分 API 仍然借鉴了部分 OMX 的思想,使得各组件间调用的接口更加统一和规范。

模块架构

player 在系统架构中的层次如下图


player_system1

  • player 是中间件,向 App 提供 player 接口

    • player 视频解码调用 mpp_decoder

    • player 音频解码调用 audio_decoder

    • player 视频渲染操作 DE driver 提供给用户空间的 “/dev/fb0”

    • player 音频渲染对接 alsa 接口

    • player 内部实现解封装的功能

  • audio_decoder(音频解码器)

    • audio_decoder 是纯软件解码,目前移植了第三方的 libmad 和 faad ,支持 MP3 和 AAC 解码。

player 模块架构如下图,分为 3 层

  • 第 1 层,player interface ,向上提供 player 接口,向下调用 OpenMAX 组件实现 player 功能。

  • 第 2 层,OpenMAX Component,提供统一的组件操作接口。每个组件完成特定的功能,比如视频解码,视频渲染等。

  • 第 3 层,Base,提供 parser,stream,message,render 接口和实现。

    • parser 提供解封装的功能,比如 MP4 封装

    • stream 提供解析流协议的功能,本地文件也看作是一种流协议,目前也只支持本地文件

    • message 为组件传递消息提供支持

    • render 提供底层音视频渲染的功能

    • 目前支持 MP4 和 MP3 封装的本地文件,后续扩展其他流协议和封装格式,通过增加相应的 parser 和 stream 实现


      player_framework1