Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >FreeSWITCH如何集成AMR/AMR-WB编解码

FreeSWITCH如何集成AMR/AMR-WB编解码

作者头像
杜金房
发布于 2024-04-11 12:26:14
发布于 2024-04-11 12:26:14
47900
代码可运行
举报
运行总次数:0
代码可运行

FreeSWITCHAMRAMR-WB两种编码格式默认为passthough状态,若想对AMRAMR-WB进行编解码,需对mod_amrmod_amrwb两个模块重新编译。

本文介绍通过源码编译所需的opencore-amrov-amrwbenc两个依赖库。当然也可使用yum等工具直接安装libopencore-amrnb.solibopencore-armwb.solibvo-amrwbenc.so

* 本文内涉及的所有路径,均可根据实际情况进行更改,不局限于root用户。

- AMR编译 -

下载OpenCore AMR源码,网址:https://sourceforge.net/projects/opencore-amr/files/opencore-amr,推荐使用版本为0.1.3。如下图:

解压压缩包并进入源码根目录进行安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tar xzf opencore-amr-0.1.3.tar.gz
cd opencore-amr-0.1.3/
./configure --prefix=/root/libs
make && make install

- AMR-WB编译 -

若只需AMR编码格式,可直接跳过此步骤。

OpenCore AMR源码压缩包包含了AMR-NB编码和解码,但是AMR-WB只支持编码,所以我们需要增加AMR-WB解码能力。

下载vo-amrwbenc压缩包,网址:https://sourceforge.net/projects/opencore-amr/files/vo-amrwbenc,推荐版本为0.1.3,如下图:

解压压缩包并进入源码根目录进行安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tar xzf vo-amrwbenc-0.1.3.tar.gz
cd vo-amrwbenc-0.1.3/
./configure --prefix=/root/libs
make && make install

至此,依赖库编译完成,opencore-amrov-amrwbenc均安装在了/root/libs文件夹下,目录树如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.
├── include
│   ├── opencore-amrnb
│   │   ├── interf_dec.h
│   │   └── interf_enc.h
│   ├── opencore-amrwb
│   │   ├── dec_if.h
│   │   └── if_rom.h
│   └── vo-amrwbenc
│       └── enc_if.h
└── lib
    ├── libopencore-amrnb.a
    ├── libopencore-amrnb.la
    ├── libopencore-amrnb.so -> libopencore-amrnb.so.0.0.3
    ├── libopencore-amrnb.so.0 -> libopencore-amrnb.so.0.0.3
    ├── libopencore-amrnb.so.0.0.3
    ├── libopencore-amrwb.a
    ├── libopencore-amrwb.la
    ├── libopencore-amrwb.so -> libopencore-amrwb.so.0.0.3
    ├── libopencore-amrwb.so.0 -> libopencore-amrwb.so.0.0.3
    ├── libopencore-amrwb.so.0.0.3
    ├── libvo-amrwbenc.a
    ├── libvo-amrwbenc.la
    ├── libvo-amrwbenc.so -> libvo-amrwbenc.so.0.0.4
    ├── libvo-amrwbenc.so.0 -> libvo-amrwbenc.so.0.0.4
    ├── libvo-amrwbenc.so.0.0.4
    └── pkgconfig
        ├── opencore-amrnb.pc
        ├── opencore-amrwb.pc
        └── vo-amrwbenc.pc

- 添加环境变量 -

由于opencore-amrvo-amrwbenc安装路径为我们自定义路径(推荐将两个库安装在同一路径,路径配置在configure时通过--prefix指定,本次安装均为/root/libs),需配置环境变量告知FreeSWITCH依赖库位置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim ~/.bash_profile
新增下面一行:
export PKG_CONFIG_PATH=/root/libs/lib/pkgconfig:$PKG_CONFIG_PATH
保存退出
source ~/.bash_profile

- 编译mod_amr -

至此,依赖库已经安装完成,可开始进行mod_amr模块的编译。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
进入FreeSWITCH源码目录,本次安装过程中为/root/freeswitch-1.8.5
cd /root/freeswitch-1.8.5
重新生成mod_amr模块的Makefile文件
./bootstrap.sh -j
./configure --prefix=/root/freeswitch-bin
cd src/mod/codecs/mod_amr
make
make install

至此mod_amr编译完成,fs_cli进入FreeSWITCH console前台,加载mod_amr模块,即可。

- 编译mod_amrwb -

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
进入FreeSWITCH源码目录,本次安装过程中为/root/freeswitch-1.8.5
cd /root/freeswitch-1.8.5
重新生成mod_amrwb模块的Makefile文件
./bootstrap.sh -j
./configure --prefix=/root/freeswitch-bin
cd src/mod/codecs/mod_amrwb
make
make install

至此mod_amrwb编译完成,fs_cli进入FreeSWITCH console前台,加载mod_amrwb模块,即可。

- 配置路由 -

  • 新增编码格式

由于FreeSWITCH默认编码格式内没有AMRAMR-WB,需要修改vars.xmlglobal_codec_prefsoutbound_codec_prefs两个配置项,用于新增编码格式。如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<X-PRE-PROCESS cmd="set" data="global_codec_prefs=OPUS,PCMU,PCMA,H264,AMR,AMR-WB"/>
<X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=OPUS,PCMU,PCMA,H264,AMR,AMR-WB"/>

修改完成后需要reloadxml生效。

  • 呼叫路由
  • AMR/AMR-WB转PCMA/PCMU
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<extension name="Local_Extension">
<condition field="destination_number" expression="^(10[01][0-9])$">
<action application="bridge" data="{absolute_codec_string='PCMA\,PCMU'}user/$1"/>
</condition>
</extension>
  • PCMA/PCMU转AMR/AMR-WB
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<extension name="Local_Extension">
<condition field="destination_number" expression="^(10[01][0-9])$">
<action application="bridge" data="{absolute_codec_string='AMR\,AMR-WB'}user/$1"/>
</condition>
</extension>

至此,您可以愉快的使用FreeSWITCHAMR/AMR-WB进行编解码了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeSWITCH中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Hadoop与常见数据库的区别
想必在数据量情况少的情况下我们首先想到的时擅长于存储的常见数据库如MySQL或者oracle,甚至我们可以将企业的web Server,db Server都装载到一个服务中,但是随着时间或者公司的成长数据库会越来越满。
Tim在路上
2020/08/05
2.9K0
初识Hadoop,走进大数据世界
我们生活在这个数据大爆炸的时代,很难估算全球的电子设备存储量。根据国际数据公司(IDC)曾经发布的报告,2013年统计出全球数据总量为4.4ZB,预测到2020年数据量将会达到44ZB,1ZB等于1000EB,等于1 000 000PB,等于大家所熟悉的10亿TB,这远远超过了全世界任意一块硬盘所能保存的数据量。
王二蛋
2024/04/25
1770
浅析hadoop框架设计
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
week
2018/08/24
6940
NVM作为主存上对数据库管理系统的影响
implications of non-volatile memory as primary storage for database management systems
yzsDBA
2020/01/19
1.9K0
NVM作为主存上对数据库管理系统的影响
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
关系型数据库的基本单位是表,表与表之间通过键关联,比如学生表和班级表,可以通过班级ID,把学生和班级关联起来。
寻求出路的程序媛
2024/10/09
1K0
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
四种数据库对比MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
还记得什么是关系型数据库、非关系型数据库,以及两者区别吗?如果忘记可以到这里重新温习:一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
寻求出路的程序媛
2024/10/09
1.3K0
四种数据库对比MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
hadoop 各种概念整理
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。
业余草
2019/01/21
8090
hadoop 各种概念整理
探索数据宇宙:深入解析大数据分析与管理技术
目前“大数据”( Big data)已成为一个炙手可热的名词。从表面上看,其表示数据规模的庞大,但仅仅从数据规模上无法区分“大数据”这一概念和以往的“海量数据”(Massive data)和“超大规模数据”(Verylarge data)等概念的区别。
Srlua
2024/03/10
3010
探索数据宇宙:深入解析大数据分析与管理技术
数据库系统设计概述
数据是系统最重要的信息。大部分系统都是对数据的管理。应用系统通过数据模型来构建现实世界,通过算法操作对象或数据结构,来改变数据模型的状态。数据被组织在操作系统文件中,我们通过数据系统来组织,查询,搜索,处理数据。
码哥字节
2020/07/28
2K0
大数据--基础概念
最近在学习用户画像相关知识,对于大数据刚入门看到文章和书籍上一堆框架一脸懵逼。本文主要介绍下大数据使用的一些框架,对他们有个基本的了解,便于以后项目使用选型。
languageX
2023/02/03
9600
关于大数据的完整讲解
ELT的过程是,在抽取后将结果先写入目的地,然后利用数据库的聚合分析能力或者外部计算框架,如Spark来完成转换
Datawhale
2021/01/20
6700
关于大数据的完整讲解
大数据技术之Hadoop(HDFS)第1章 HDFS概述
Hadoop分布式文件系统(HDFS)是指被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统(Distributed File System)。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分。
用户7656790
2020/08/18
6880
大数据技术之Hadoop(HDFS)第1章 HDFS概述
互联网十万个为什么之什么是 MySQL
MySQL是一款领先的开源关系型数据库管理系统,它利用结构化查询语言(SQL)来存储、检索和管理数据。该系统由于其高性能、可靠性和易用性,在开发社区中拥有深厚的基础,成为众多网站和应用的数据支撑核心。凭借多年的发展,MySQL建立了强大的社区支持网络,确保了其作为数据存储解决方案的稳定性和安全性。MySQL的适用范围广泛,无论是关键业务应用、动态网站,还是作为软硬件内嵌的数据库都能够高效运行。
linus_lin
2024/10/23
1270
互联网十万个为什么之什么是 MySQL
PostgreSQL和Oracle两种数据库有啥区别?如何选择?
PostgreSQL和Oracle是两个备受欢迎的关系型数据库管理系统(RDBMS)。它们都提供了强大的功能和广泛的应用领域。然而,在选择使用哪个数据库管理系统时,需要考虑各自的特点和适用场景。本文将详细比较PostgreSQL和Oracle,并探讨在不同情况下应该选择哪个数据库管理系统。
网络技术联盟站
2023/06/17
3.1K0
PostgreSQL和Oracle两种数据库有啥区别?如何选择?
深入解析Hadoop生态核心组件:HDFS、MapReduce和YARN
进入大数据阶段就意味着进入NoSQL阶段,更多的是面向OLAP场景,即数据仓库、BI应用等。 大数据技术的发展并不是偶然的,它的背后是对于成本的考量。集中式数据库或者基于MPP架构的分布数据库往往采用的都是性能稳定但价格较为昂贵的小型机、一体机或者P C服务器等,扩展性相对较差;而大数据计算框架可以基于价格低廉的普通的硬件服务器构建,并且理论上支持无限扩展以支撑应用服务。
洁洁
2024/04/02
2.2K0
深入解析Hadoop生态核心组件:HDFS、MapReduce和YARN
关于OLAP和OLTP你想知道的一切
OLAP是英文Online Analytical Processing的缩写,中文称为联机分析处理。它是一种基于多维数据模型的分析处理技术,用于从不同的角度进行数据挖掘和分析,以帮助用户快速发现数据之间的相关性和趋势。
用户1413827
2023/11/28
7K0
关于OLAP和OLTP你想知道的一切
大数据生态圈常用组件(二):概括介绍、功能特性、适用场景
点赞之后,上一篇传送门: https://blog.csdn.net/weixin_39032019/article/details/89340739
不吃西红柿
2022/09/26
1.5K0
为什么说 Storm 比 Hadoop 快?
“快”这个词是不明确的,专业属于点有两个层面: 1.时延 , 指数据从产生到运算产生结果的时间,题主的“快”应该主要指这个。 2. 吞吐, 指系统单位时间处理的数据量。 首先明确一点,在消耗资源相同的情况下,一般来说storm的延时低于mapreduce。但是吞吐也低于mapreduce。 Storm的网络直传、内存计算,其时延必然比hadoop的通过hdfs传输低得多;当计算模型比较适合流式时,storm的流式处理,省去了批处理的收集数据的时间;因为storm是服务型的作业,也省去了作业调度的时延。所以从
CSDN技术头条
2018/02/12
6690
C# .NET面试系列十:数据库概念知识
综上所述,设置主键有助于维护数据库的结构和性能,并确保数据的准确性和一致性。在数据库设计中,选择合适的主键是一个重要的决策,可以根据具体业务需求和数据模型的特点来确定。
GoodTime
2024/03/11
1.1K0
C# .NET面试系列十:数据库概念知识
你应该知道一些其他存储——列式存储
我们最先接触的数据库系统,大部分都是行存储系统。大学的时候学数据库,老师让我们将数据库想象成一张表格,每条数据记录就是一行数据,每行数据包含若干列。所以我们对大部分数据存储的思维也就是一个复杂一点的表格管理系统。我们在一行一行地写入数据,然后按查询条件查询过滤出我们想要的行记录。
码哥字节
2020/04/13
5180
推荐阅读
相关推荐
Hadoop与常见数据库的区别
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验