摘要:Opus编码器是一个开源的有损声音编码格式,适用于网络实时声音传输,标准格式为RFC 6716,相对于其他编码格式来说,保真性更好。

本文分享自华为云社区《LiteOS组件尝鲜—玩转Opus》,作者: Lionlace。

Opus编码器是一个开源的有损声音编码格式,适用于网络实时声音传输,标准格式为RFC 6716,相对于其他编码格式来说,保真性更好。

Opus接口介绍

本文档介绍一些Opus的常用接口,更多详细接口介绍请参考components/media/opus/opus-1.3.1/include/opus.h文件。

Opus解码的过程是将opus格式转换为pcm格式,编码的过程是将pcm格式转换为opus格式。

解码

创建解码器

OPUS_EXPORT OPUS_WARN_UNUSED_RESULT OpusDecoder *opus_decoder_create(
opus_int32 Fs,
int channels,
int *error
);

解码器配置

OPUS_EXPORT int opus_decoder_ctl(OpusDecoder *st, int request, ...)
OPUS_ARG_NONNULL(1);

解码

OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_decode(
OpusDecoder *st,
const unsigned char *data,
opus_int32 len,
opus_int16 *pcm,
int frame_size,
int decode_fec
) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(4);

删除解码器

OPUS_EXPORT void opus_decoder_destroy(OpusDecoder *st);

编码

创建编码器

OPUS_EXPORT OPUS_WARN_UNUSED_RESULT OpusEncoder *opus_encoder_create(
opus_int32 Fs,
int channels,
int application,
int *error
);

编码器配置

OPUS_EXPORT int opus_encoder_ctl(OpusEncoder *st, int request, ...)
OPUS_ARG_NONNULL(1);

编码

OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_encode(
OpusEncoder *st,
const opus_int16 *pcm,
int frame_size,
unsigned char *data,
opus_int32 max_data_bytes
) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2) OPUS_ARG_NONNULL(4);

删除编码器

OPUS_EXPORT void opus_encoder_destroy(OpusEncoder *st);

Opus编解码中常用参数

sampling rate采样率,在opus中只能取值为8000,12000,16000,24000,48000,单位为赫兹(HZ)。

channel声道,channel = 1为单声道,channel = 2为立体声。

frame size帧大小,在opus中每帧的时间取值为2.5,5,10,20,40,60,80,100,120。单位毫秒(ms)。单通道的帧大小 = 采样率 * 帧时间(单位为秒)。

其他详情参考音频编码:https://gitee.com/linktarget=https%3A%2F%2Fbaike.baidu.com%2Fitem%2F%25E9%259F%25B3%25E9%25A2%2591%25E7%25BC%2596%25E7%25A0%2581%2F1729208%3Ffr%3Daladdin。

Opus Demo解析

LiteOS社区提供了OpusDemoTask示例程序来演示如何使用opus,该Demo可以运行在LiteOS所支持的多块开发板上。本Demo以解码为例,其中inputBuf为采用opus格式编码的一段数据,对该数据进行解码处理,并将解码后数据以pcm格式保存到outputBuf。

使能Opus Demo

在LiteOS源码根目录下根据实际使用的开发板,拷贝tools/build/config/目录下的默认配置文件${platform}.config到根目录,并重命名为.config。

继续在LiteOS源码根目录下执行make menuconfig命令,按如下菜单路径使能Opus Demo。
Demos --->
Media Demo --->
[*] Enable Opus Demo

使能Opus Demo后会自动使能Opus组件。

保存退出后,LiteOS会从github上自动下载opus源代码,并从gitee上下载适配于LiteOS系统的patch包,并打入patch。关于组件下载的详细流程请参考:LiteOS_Components: Huawei LiteOS组件仓库,主要存放组件的补丁及相关的sha256校验文件。

注:要成功下载相关资源,需要Linux主机可访问互联网,并安装git工具。

编译运行Opus Demo

使能Opus Demo后,在LiteOS源码根目录下执行make clean; make -j命令编译LiteOS工程,编译成功后会在out/{platform}/lib路径下生成libopus.a和libopus_demo.a文件,系统镜像文件为Huawei_LiteOS.bin。

以realview-pbx-a9为例,运行OpusDemoTask。

其他开发板操作请参考快速入门:https://gitee.com/LiteOS/LiteOS/blob/master/doc/LiteOS_Quick_Start.md。。

执行结果如下:

********Hello Huawei LiteOS********
LiteOS Kernel Version : 5.0.0
Processor : Cortex-A9 * 4
Run Mode : SMP
GIC Rev : GICv1
build time : Dec 25 2021 22:52:50
**********************************
main core booting up...
osAppInit
releasing 3 secondary cores
cpu 0 entering scheduler
cpu 2 entering scheduler
cpu 3 entering scheduler
cpu 1 entering scheduler
app init!
Hello, welcome to liteos demo!
Opus demo task start to run.
Opus demo input data:
0x00 0xe0 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00 0xe0 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00 0xe0 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00 0xe0 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00 0xe0 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00 0xe0 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00 0xe0 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00 0xe0 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00 0xe0 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00 0xe0 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00 0xe0 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00 0xe0 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00 0xe0 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00 0xe0 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00 0xe0 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00 0xe0
Opus demo output data:
0x0000 0xfffd 0xfff4 0xffda 0xffaa 0xff88 0xff55 0xff03 0xff14 0xff83 0xffb4 0x001f 0x0070 0x01bb 0x024b 0x0274 0x02be 0x032a 0x0299 0x02a8 0x039c 0x05ef 0x0605 0x04fa 0x03d9 0x02b6 0x01d1 0x0113 0x0079 0xffd8 0x001d 0x000d 0xffdf 0xffbb 0xffac 0xffa0 0xff64 0xffc4 0xfff5 0xffee 0xffeb 0x006c 0x005e 0x0044 0x0045 0x02dc 0x0472 0x00db 0xff85 0x0347 0xfdc4 0xf957 0xf7c1 0xf62b 0xf3aa 0xf817 0xfb18 0xfcee 0x01b1 0x079e 0x059d 0x0aa0 0x0608 0x01c6 0xfdaf 0xfdda 0xfa18 0xf6d6 0xf701 0xfc43 0x0186 0x0387 0x0975 0xbb78 0xd771 0xd143 0xbc64 0xbcb9 0xe7f9 0xfd99 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000
Opus demo decode seccussfully.
Opus demo task finished.
Huawei LiteOS #

结语

未来我们还会持续新增更多组件、开发板、架构、特性等。

感谢您的阅读,有任何问题、建议,都可以留言给我们,让我们一起进步:https://gitee.com/LiteOS/LiteOS/issues

为了更容易找到“LiteOS”代码仓,建议访问https://gitee.com/LiteOS/LiteOS,关注“ Watch”、点赞“Star”、并“Fork”到自己账号下,如下图。

https://gitee.com/LiteOS/LiteOS/blob/master/doc/LiteOS_Quick_Start.md。

一起玩转玩转LiteOS组件:Opus相关推荐

  1. 玩转LiteOS组件:玩转Librws

    本文分享自华为云社区<LiteOS组件尝鲜-玩转Librws>,作者: W922  . 本期小编为大家带来LiteOS开源版本Librws 组件的使用说明,请跟随小编的步伐一起进入探索之旅 ...

  2. 快来一起玩转LiteOS组件:Curl

    本文分享自华为云社区<LiteOS组件尝鲜-玩转Curl>,作者:W922. 基本介绍 Curl是一个文件传输工具,常用于数据上传和下载,本demo基于Cloud_STM32F429IGT ...

  3. 一起玩转LiteOS组件:Pixman

    摘要:本文将以Pixman Demo为例,详细说明Pixman的功能. 本文分享自华为云社区<LiteOS组件尝鲜-玩转Pixman>,作者:Lionlace. 基本介绍 Pixman是由 ...

  4. 快来一起玩转LiteOS组件:RHas

    摘要:RHash是一个C语言编写的哈希函数库,用于计算和验证磁力链接和各种消息摘要的控制台实用程序. 本文分享自华为云社区<LiteOS组件尝鲜-玩转RHas>,作者:Lionlace . ...

  5. 带你尝鲜LiteOS 组件EasyFlash

    摘要:EasyFlash是一个开源的轻量级嵌入式闪存库. 本文分享自华为云社区<LiteOS组件尝鲜-玩转EasyFlash>,作者:Lionlace . 基本介绍 EasyFlash是一 ...

  6. 白鹭引擎用java_白鹭引擎产品工具更新 完善小游戏、QQ玩一玩开发支持

    原标题:白鹭引擎产品工具更新 完善小游戏.QQ玩一玩开发支持 为了让开发者们获得更好的开发体验,同时在搜集大家通过官方社区.微信小游戏技术讨论群提交的反馈意见后,我们在1月29日对旗下的白鹭引擎.Eg ...

  7. QQ玩一玩(轻游戏)入门到放弃?

    姓名:Javen Email:javendev@126.com Github:https://github.com/Javen205 Gitee:https://gitee.com/Javen205 ...

  8. LayaBox 接入QQ玩一玩 轻游戏流程

    最近尝试LayaBox 接入QQ玩一玩,遇到一些坑,跟大家分享一下 1.QQ文档 官方文档地址:https://hudong.qq.com/docs/access/index.html 官方提供两个D ...

  9. QQ玩一玩最新调试方法

    模拟器上测试不能调试与手Q相关的接口,而非手Q相关的接口如果是使用CocosCreator开发可以直接使用浏览器调试. QQ玩一玩最新调试方法.之前的特殊版本手Q可以下岗了 目前QQ玩一玩只支持And ...

最新文章

  1. Latex 数学符号表
  2. 【控制】滑动模式观测器 sliding mode observer
  3. MySQL出现慢日志超过2秒_MySQL慢日志功能分析及优化增强
  4. JAVASE内测试题
  5. 总结get和post区别
  6. 工作137:map函数
  7. C语言,后门程序,C语言CGI编程二 - 编写cmd后门
  8. html文件脚本,我想要从html文件或js脚本执行jsx脚本
  9. linux 7 打开22端口号,Centos 7 修改 SSH 默认端口号
  10. 20190729杭电多校第三场
  11. html 播放amr ios,关于iOS设备播放amr格式的音频文件
  12. SAP 中Table的使用(一、显示数据)
  13. 期货、股票行情、交易源码
  14. matlab画图命令fplot,matlab绘图方法fplot
  15. PyQt5使用笔记(一) 处理excel文件获取页眉页脚信息 2020.03.14
  16. Angular4-在线竞拍应用-开发环境的搭建
  17. 低代码平台的分类及选择参考
  18. 大学英语计算机my dream 150,MYDREAM英语作文150字带中文翻译
  19. kiwi syslog安装部署中的问题
  20. 新生报到小程序毕业设计,微信新生报到小程序系统设计与实现,微信小程序毕业设计论文怎么写毕设源码开题报告需求分析怎么做

热门文章

  1. 服务器协议热更_汽车和电话的开放协议,以及更多开放源新闻
  2. docker云计算_为什么Docker成为虚拟化和云计算的新热潮?
  3. node函数 node路由
  4. Bootstrap3 折叠插件的调用方式
  5. ROS2官网安装教程补充
  6. 飞利浦css6530b评测,带多种输入模式 无线接收器很方便_飞利浦 CSS6530B/93_音频评测-中关村在线...
  7. android 颜色过渡动画效果,Android buttom textview 颜色平滑过渡的动画效果
  8. 计算机的应用可以分为几类,计算机分为哪几类专业
  9. manacher(马拉车)算法详解
  10. TCP/IP , HTTP Protocol