找回密码
 注册
关于网站域名变更的通知
查看: 227|回复: 2
打印 上一主题 下一主题

RISC-V生态全景解析13——YoC组件的AV(多媒体)组件介绍

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-6-7 10:26 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 名字好听吗 于 2022-6-8 10:08 编辑 ) u1 B) ]% N5 L& ]) c9 O+ k
4 H. k0 b3 G9 H$ u3 f# N
本期内容将继续为大家介绍YoC组件,本文将通过阐述AV组件的框架、功能、使用示例等,带大家详细了解YoC的AV(多媒体)组件。
5 P- v. v+ k; |: D9 O1 G- `% f( P# U2 z% ?9 {3 m, K+ p3 Z
1、多媒体组件5 x9 K6 y& p8 G4 |& W; }7 u' {5 b- N- V
libav是一个轻量级的多媒体组件,主要包含AV基础框架、播放器和音频服务三部分。其中AV框架采用典型的4层多媒体模型设计及面向对象的思想开发,使得用户在此基础上易于复用与扩展。
, d! j; m$ B9 A" i" dav组件中内置了一个播放器的实现,可以播放wav、mp3、m4a、AMRnb、amrwb、flac、adts、opus、speex、adpcm_ms、alaw、mulaw等多种常见音频格式。同时基于播放器和YoC微服务架构实现了音频服务,支持提示音、语音合成(TTS)、音乐播放的状态切换与维护等功能,方便上层应用开发。用户可以分别基于音频服务、播放器和AV基础框架三个不同层次开发和扩展多媒体相关功能。
2 Z5 O( k, D2 ]. R! Z+ k2 h
; v1 S6 Q7 P% M/ W/ z* B( h8 G& g2 f) r6 |! Z' f
1.1 主要代码层次结构及说明' U' j( W: `8 d; n8 b* j) w- y
├── aef:音效相关,当前包含sona音效算法(需商务合作)和核间音效(算法与播放器不在同一核上)
$ B  m, A" h/ A├── avcodec:AV框架中编解码相关,主要用于mp3、AAC、amr、flac等格式的解码% }, K: L- @! w3 L
├── avfiLTEr:AV框架中定义一套过滤器机制。各filter串联,用于重采样、单双通道等处理
8 r3 l' {6 d. W$ W/ k+ E  Q├── avformat:AV框架中封装格式相关,主要用于mp3、m4a、wma等封装格式的demux处理8 Z( D, U% F( m: ~9 W
├── avutil:AV相关的通用函数实现等,如FIFO、url解析、http client等
- J7 n/ A3 \1 c- e8 n8 b├── icore:相关核间算法的对接实现,包含核间解码、音效、重采样、fft实现等(针对多核运算场景)$ i) u  u4 h# M
├── include:av组件对外提供的头文件2 Q% E7 x+ \4 K$ X1 e: g1 _
├── mca:mca加速器实现,包含IIR滤波器等功能(硬件相关)
+ `; R' _9 h3 y. D├── media:基于YoC微服务和播放器的音频服务的实现,支持语音合成、提示音等播放和状态切换$ ~$ h+ ?9 x  t; F: H
├── output:音视频输出实现,当前包含类似alsa接口的音频输出实现。用户可安装ao定义进行扩展
  x+ |6 H% L- f& ]& y7 K├── player:播放器的实现,其依赖于AV框架中的各个层次的模块0 A8 V, t" B' H
├── stream:AV框架中媒体接入层实现,当前包含http、file、mem、fifo取流实现等. E" t* [7 b. s- C" O
├── swresample:包含单双通道转换、多种音频重采样(含本地/核间重采样)等功能实现2 P3 j$ f) P1 o3 B0 l* i
└── tfft:傅里叶变换接口封装及实现等。用户可基于此切换使用本地/核间fft功能
& `! r7 i8 v1 O2 f
  R1 F/ w3 y# _0 f' _2、播放器+ ^1 O7 h& O/ F$ ^% Q; y5 [; P* s
该播放器基于YoC平台轻量级的多媒体AV框架开发,具体实现包含在AV组件中。其主要有以下特点:5 {( M: A  U* G; F( Y8 V
轻量、极简音频播放器
& F5 U. c5 g+ \0 \MP3 解码: ROM < 35K, RAM < 20K4 ], E+ M$ G) {2 J) ^3 m& i: g
四层架构,按需裁剪&扩展& j- w. e( |8 u
低时延,首播延时最低<20ms+ }  k* X: ?+ U% T4 u$ y
编解码DSP指令加速,充分利用硬件资源; l6 @9 s! J' _# Q1 Z" @
支持本地/核间(跨核)解码' |9 j0 a$ B3 r
支持wav、mp3、m4a、amrnb、amrwb、flac、adts、opus、speex、adpcm_ms、alaw、mulaw等多种音频格式
5 [8 V1 w* R. `2 G" Y支持sd卡、http(s)、fifo、mem、m3u8等多种取流方式
* {" K* ?% A  f" t支持语音合成(TTS)播放6 E; X' b8 |' `2 s; s, t: `
支持软件音量、音量曲线配置9 S9 _- B) v$ n7 ~1 s% s4 Z# M7 E: r
支持音频信息及当前播放时间获取
% C% q4 w6 M) n, P. n* ]支持重采样输出" n  V5 p( E+ H
支持音效(Audio effector)、量化器(EQ)扩展及配置
3 i1 b/ o+ w' S/ a+ l注意事项:: ^! S5 x1 K/ |. h& T
播放器目前仅支持音频格式播放,若支持视频播放可基于AV框架扩展。* Z7 @6 f% \: P5 c0 A' K$ }
( h+ [+ M6 a& }9 }  l1 f- i8 P
2.1 播放器的播放流程  w/ L4 W( D1 Y- T
用户创建播放器并调用player_play接口开始播放。该接口在初始化相关资源并创建播放线程抛出 _ptask任务。播放器将播放相关阻塞操作等放在 _ptask函数中处理。这样保证了player_play可以立即返回。
9 l5 z1 {! \( T/ P5 ^为降低系统开销和简化播放器,系统将解复用、解码、音频输出等操作置于同一线程中处理。 _ptask函数初始时,调用 _player_prepare函数进行音频复用、编码格式的探测等功能,并判断播放器是否支持播放。7 \: R# y8 u2 q' f; X% L: z
若支持播放,则在loop循环中不断调用解复用、解码、音频输出等功能。否则向上层上报播放失败事件退出本次播放。主要播放流程如下图所示:
7 @5 S; N. t% u8 A0 |9 t ) w8 c+ Y9 l2 H! Q
; T; Q6 G% `5 E! t
2.2 播放器的状态切换- A7 U. p& n+ t4 z) ^
播放器提供了一系列的调用接口,如player_pause、player_resume等接口来切换状态。几种状态间的转换关系如下图所示:
% G, U- b" r' \( i& M 3 M) K: p2 S- d9 C- e; V$ g: O9 a
播放器通过调用player_play播放,初始时从停止态(PLAYER_STATUS_STOPED)进入到准备态(PLAYER_STATUS_PREPARING)。播放器内部通过调用_player_prepare函数来判断码流是否支持播放。: h% Z( H  @5 ]
若准备ok则直接进入播放态(PLAYER_STATUS_RUNNING),否则上报播放错误事件进入到停止态。由于prepare阶段花费因网络等问题可能花费较多时间,在进入播放态之前,准备态和暂停态可正常进行切换。
4 T# N7 n; r9 d. m& G正常播放后通过调用player_pause进入暂停态(PLAYER_STATUS_PAUSED)。在播放暂停时,通过调用player_resume恢复到播放态。通过调用player_stop可以从播放态和暂停态直接进入到停止态。& n& t  m6 D3 ]" Z+ N

0 j' V' d+ M3 l4 ~. S$ V3 {. e" l# n3、AV框架0 l# l" o$ N$ a( h
AV框架是一个轻量级的多媒体开发框架,其采用典型的4层多媒体模型设计及面向对象的思想开发,使得用户在此基础上易于复用与扩展。
' k! e, }, [0 D+ ^$ l当前AV组件中提供了wav、mp3、m4a、amrnb、amrwb、flac、adts、opus、speex、adpcm_ms、alaw、mulaw等音频格式的支持。框架本身的设计向后提供视频支持。若有需要,可基于此AV框架进行扩展。8 M/ p+ J$ a( x" S0 R8 ]

, ~9 k5 P  m$ M; ]+ h# H% q3.1 AV框架分层设计4 j, B* R4 w% P. c
AV框架主要抽象为四个层次:: o" @3 U' B9 e" y& q3 v. E
+ p7 x& |+ w; |9 Y1 q2 u  \
媒体接入层:access层,负责媒体数据的来源,可能是file、http、fifo、mem等
( `$ \# I1 ~0 s; d; J解复用层:demux层,负责把容器里的音视频数据剥离出来,然后分别送给audio/video  decoder。
- ?" _$ ?% a# E0 |) ]解码层:decoder层,将解码完成后的数据(YUV、pcm)送给audio/video output输出。  z1 ?! `( A# y0 s
输出层:output层,负责将decoder过来的数据呈现/播放出来。
4 A' R1 C- C: I# [1 Z. n如果把数据想象成流水的话,每层的功能虽然不同,但是他们大致抽象的功能都是接收上个模块过来的数据,然后加工并把加工后的数据送到下一个模块。把上述这些层通过某种方式连接起来,就形成了一个音频播放器。
, E  P, O6 r( t" u! C) T
/ i9 b( F& w0 U1 L" E3 Y+ Q( m5 B/ O5 s1 s

RISC-V生态全景解析(十三):YoC组件的AV(多媒体)组件介绍.pdf

597.35 KB, 下载次数: 1, 下载积分: 威望 -5

该用户从未签到

2#
发表于 2022-6-7 13:07 | 只看该作者
了解了解。学习了

该用户从未签到

3#
发表于 2022-6-7 16:41 | 只看该作者
了解了解。学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-9-30 01:00 , Processed in 0.109375 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表