基于YoC的轻量级AV框架设计

简介: 简介AV框架是一个轻量级的多媒体开发框架。其采用典型的4层多媒体模型设计及面向对象的思想开发,使得用户在此基础上易于复用与扩展。当前AV组件中提供了wav、mp3、m4a、amrnb、amrwb、flac、adts等音频格式的支持。框架本身的设计向后提供视频支持。若有视频播放的需要,可基于此AV框架进行扩展。

AV框架分层设计
AV框架主要抽象为四个层次:image.png
媒体接入层: access层,负责媒体数据的来源,可能是file、http、fifo、mem等。

解复用层: demux层,负责把容器里的音视频数据剥离出来,然后分别送给audio/video decoder。

解码层: decoder层,将解码完成后的数据(yuv、pcm)送给audio/video output输出。

输出层: output层,负责将decoder过来的数据呈现/播放出来。

如果把数据想象成流水的话,每层的功能虽然不同,但是他们大致抽象的功能都是接收上个模块过来的数据,然后加工并把加工后的数据送到下一个模块。把上述这些层通过某种方式连接起来,就形成了一个音频播放器。

媒体接入层(stream)
UML设计如下图所示:image.png
stream_ops_http、stream_ops_mem、stream_ops_file、stream_ops_fifo分别对应于网络流、内存流、本地文件流、fifo流取流播放。
其中语音合成(TTS)流的播放可基于stream_ops_fifo实现。
后续对于新增的媒体接入类型,可根据struct stream_ops结构中定义的类型,实现对应的接口即可扩展。
媒体接入层中各种流类型的url格式定义规则如下表所示:
流类型 URL前缀 URL格式
网络流 http(s):// http(s)://ip:port/xx.mp3
文件流(SD卡) file:// file:///fatfs0/xx.mp3?avformat=%s&avcodec=%u&channel=%u&rate=%u
内存流 mem:// mem://addr=%u&size=%u&avformat=%u&avcodec=%u&channel=%u&rate=%u
fifo流 fifo:// fifo://tts/1?avformat=%s&avcodec=%u&channel=%u&rate=%u
对于能够探测到媒体信息的码流,url格式中的avformat、avcodec、channel、rate字段不是必须的。
这些配置项一般用于raw pcm的播放(通过这些参数传入裸流的具体格式)。
avformat字段可选有rawaudio/wav/mp3/m4a。
avcodec字段可选有pcm_s16be/pcm_s32be/pcm_s16le/pcm_s32le/pcm_s8/pcm_u16be/pcm_u32be/pcm_u16le/pcm_u32le/pcm_u8。

url格式具体示例如下表所示:
流类型 示例

文件流(SD卡) file:///fatfs0/test.MP3
内存流 mem://addr=765432&size=1024&avformat=rawaudio&avcodec=pcm_s16le &channel=1&rate=16000
fifo流 fifo://tts/1

解复用层(avformat)
UML设计如下图所示:image.png
其中demux_ops_wav、demux_ops_mp3、demux_ops_m4a分别对应于wav、mp3、m4a音频复用格式解复用。解复用出来的一帧音频数据会被送到对应的解码器进行解码。
当前支持wav、mp3、mp4、adts、flac、asf、amr等格式的解复用
后续对于新增的解复用格式,可根据struct demux_ops结构中定义的类型,实现对应的接口即可扩展

解码层(avcodec)
该层将demux解复用后出来的一帧帧编码数据解码成音视频裸数据(pcm/yuv)。
在某些情况下,某些编码类型解码时可能占用很高的主频(如在ck803ef上,HE-AAC解码主频需求在240M左右),此时可能需要通过核间通信(mailbox/IPC)将解码工作放到另一核上执行。
解码层为考虑扩展性,支持本地(核内)与跨核(核间)解码。其中核间解码适配层请参考av/avcodec/ad_ipc.c使用。
核间解码结构如下图所示:image.png
核间解码时序图如下所示:image.png
核内/核间解码框架设计如下图所示:image.png
解码器UML设计如下图所示:image.png
其中ad_ops_pvmp3、ad_ops_rawaudio、ad_ops_opus、ad_ops_fdk分别对应于mp3、裸pcm(解码透传)、opus、aac音频编码格式解码
当前支持mp3、aac、adpcm_ms、flac、amrnb、amrwb等格式的解码
后续对于新增的解码类型,可根据struct ad_ops结构中定义的类型,实现对应的接口即可扩展

输出层(output)
UML设计如下图所示:image.png

其中ao_ops_alsa对应于采用alsa标准音频输出接口实现。通过alsa层来屏蔽各产品不同codec的实现
后续对于新增的输出类型,可根据struct ao_ops结构中定义的类型或在alsa/sound驱动层,实现对应的接口即可扩展
音频输出链路如下图所示:image.png

相关文章
|
8月前
|
JSON 机器人 Linux
推荐一款嵌入式Linux开源框架与封装-cpp-tbox
推荐一款嵌入式Linux开源框架与封装-cpp-tbox
161 3
|
8月前
|
API
开源! ! ! 轻量级多功能按键驱动-LiteButton
开源! ! ! 轻量级多功能按键驱动-LiteButton
|
5月前
|
编解码 Linux 数据安全/隐私保护
Linux平台x86_64|aarch64架构如何实现轻量级RTSP服务
为满足在Linux平台(x86_64与aarch64架构)上实现轻量级RTSP服务的需求,我们开发了一套解决方案。该方案通过调用`start_rtsp_server()`函数启动RTSP服务,并设置端口号及认证信息。支持AAC音频和H.264视频编码,可推送纯音频、纯视频或音视频流。此外,还支持X11屏幕采集、部分V4L2摄像头采集、帧率/GOP/码率调整、摄像头设备选择与预览等功能。对于音频采集,支持alsa-lib和libpulse接口。整体设计旨在提供150-400ms的低延迟体验,适用于多种应用场景。
|
5月前
|
传感器
手把手在STM32F103C8T6上构建可扩展可移植的DHT11驱动
【8月更文挑战第29天】本文详细介绍在STM32F103C8T6上构建可扩展且可移植的DHT11温湿度传感器驱动的步骤,包括硬件与软件准备、硬件连接、驱动代码编写及测试。通过这些步骤,可根据实际项目需求优化和扩展代码。
199 0
|
5月前
|
编解码 开发工具 Android开发
Android平台轻量级RTSP服务模块技术接入说明
为满足内网无纸化/电子教室等内网超低延迟需求,避免让用户配置单独的服务器,大牛直播SDK在推送端发布了轻量级RTSP服务SDK。 轻量级RTSP服务解决的核心痛点是避免用户或者开发者单独部署RTSP或者RTMP服务,实现本地的音视频数据(如摄像头、麦克风),编码后,汇聚到内置RTSP服务,对外提供可供拉流的RTSP URL,轻量级RTSP服务,适用于内网环境下,对并发要求不高的场景,支持H.264/H.265,支持RTSP鉴权、单播、组播模式,考虑到单个服务承载能力,我们支持同时创建多个RTSP服务,并支持获取当前RTSP服务会话连接数。
|
8月前
|
开发工具 C语言 git
【嵌入式开源库】MultiButton的使用,简单易用的事件驱动型按键驱动模块
【嵌入式开源库】MultiButton的使用,简单易用的事件驱动型按键驱动模块
229 0
|
编解码 监控 开发工具
跨平台轻量级RTSP服务模块设计思路及实现探讨
为满足内网无纸化/电子教室等内网超低延迟需求,避免让用户配置单独的服务器,我们发布了轻量级RTSP服务模块,轻量级RTSP服务解决的核心痛点是避免用户或者开发者单独部署RTSP或者RTMP服务,实现本地的音视频数据(如摄像头、麦克风),编码后,汇聚到内置RTSP服务,对外提供可供拉流的RTSP URL,轻量级RTSP服务,适用于内网环境下,对并发要求不高的场景,支持H.264/H.265,支持RTSP鉴权、单播、组播模式,考虑到单个服务承载能力,我们支持同时创建多个RTSP服务,并支持获取当前RTSP服务会话连接数。
135 0
|
编解码 人工智能 Linux
OpenHarmony 标准系统 HDF 框架音视频驱动开发
OpenHarmony 标准系统 HDF 框架音视频驱动开发
719 0
OpenHarmony 标准系统 HDF 框架音视频驱动开发
|
芯片 SoC
OpenHarmony 标准系统HDF框架之I2C驱动开发
OpenHarmony 标准系统HDF框架之I2C驱动开发
376 0
OpenHarmony 标准系统HDF框架之I2C驱动开发
|
Linux 开发者
Linux嵌入式驱动开发——platform机制的使用(led驱动示例实现)
Linux嵌入式驱动开发——platform机制的使用(led驱动示例实现)
313 0
Linux嵌入式驱动开发——platform机制的使用(led驱动示例实现)

热门文章

最新文章