文档章节

FreeSWITCH媒体处理

stache
 stache
发布于 2017/09/11 11:13
字数 1162
阅读 29
收藏 0

一、基本概念

采样频率

音频编码最基本的两个技术参数就是采样频率和打包周期,采样频率越高,声音就越清晰,保留的细节也越多,当然它会占用更大的带宽。对于普通“人声”通话来讲,8000HZ就够了,但对于高品质的音乐来讲,就需要更高的采样率才能保证“悦耳”,比如我们通常说的CD音质的声音使用的就是44.1KHz采样率

打包周期

打包周期跟传输有关,打包周期越短,延迟越小,相对而言传输开销就会越多,因而需要更大的带宽;打包周期越长,带来的延迟就越大,如果传输过程中有丢包,对语音质量的影响也就越大。大部分编码都支持多种打包周期,最常见的是20ms,iLBC、G.723等默认使用30ms,更长的打包周期如60~120ms,通常用于卫星链路等高延迟、低带宽的场合

 

二、常用命令

#查看编码,每一行表示一个编码,编码的名称和参数以逗号隔开,如下可以看到G.711编码都是核心模块CORE_PCM_MODULE实现的
freeswitch@internal> show codec 
type,name,ikey
codec,ADPCM (IMA),mod_spandsp
codec,AMR,mod_amr
codec,B64 (STANDARD),mod_b64
codec,G.711 alaw,CORE_PCM_MODULE
codec,G.711 ulaw,CORE_PCM_MODULE
codec,G.722,mod_spandsp
codec,G.723.1 6.3k,mod_g723_1
codec,G.726 16k,mod_spandsp

#在实践中,当你不清楚某种编码所提供的各种参数时,可以尝试重新加载所属模块,如G729编码属于mod_g729模块
freeswitch@internal> reload mod_g729
freeswitch@internal> 2017-09-11 02:04:43.068757 [NOTICE] switch_loadable_module.c:944 Deleting Codec G729 18 G.729 8000hz 10ms
2017-09-11 02:04:43.068757 [NOTICE] switch_loadable_module.c:944 Deleting Codec G729 18 G.729 8000hz 20ms
2017-09-11 02:04:43.068757 [NOTICE] switch_loadable_module.c:944 Deleting Codec G729 18 G.729 8000hz 30ms
2017-09-11 02:04:43.068757 [NOTICE] switch_loadable_module.c:944 Deleting Codec G729 18 G.729 8000hz 40ms
2017-09-11 02:04:43.068757 [NOTICE] switch_loadable_module.c:944 Deleting Codec G729 18 G.729 8000hz 50ms
2017-09-11 02:04:43.068757 [INFO] mod_enum.c:880 ENUM Reloaded
2017-09-11 02:04:43.068757 [NOTICE] switch_loadable_module.c:944 Deleting Codec G729 18 G.729 8000hz 60ms
2017-09-11 02:04:43.068757 [NOTICE] switch_loadable_module.c:944 Deleting Codec G729 18 G.729 8000hz 70ms
2017-09-11 02:04:43.068757 [NOTICE] switch_loadable_module.c:944 Deleting Codec G729 18 G.729 8000hz 80ms
2017-09-11 02:04:43.068757 [NOTICE] switch_loadable_module.c:944 Deleting Codec G729 18 G.729 8000hz 90ms
2017-09-11 02:04:43.068757 [NOTICE] switch_loadable_module.c:944 Deleting Codec G729 18 G.729 8000hz 100ms
2017-09-11 02:04:43.068757 [NOTICE] switch_loadable_module.c:944 Deleting Codec G729 18 G.729 8000hz 110ms
2017-09-11 02:04:43.068757 [NOTICE] switch_loadable_module.c:944 Deleting Codec G729 18 G.729 8000hz 120ms
2017-09-11 02:04:43.068757 [CONSOLE] switch_loadable_module.c:1938 mod_g729 has no shutdown routine
2017-09-11 02:04:43.068757 [CONSOLE] switch_loadable_module.c:1955 mod_g729 unloaded.
2017-09-11 02:04:43.068757 [CONSOLE] switch_loadable_module.c:1465 Successfully Loaded [mod_g729]
2017-09-11 02:04:43.068757 [NOTICE] switch_loadable_module.c:192 Adding Codec G729 18 G.729 8000hz 10ms 8000bps
2017-09-11 02:04:43.068757 [NOTICE] switch_loadable_module.c:192 Adding Codec G729 18 G.729 8000hz 20ms 8000bps
2017-09-11 02:04:43.068757 [NOTICE] switch_loadable_module.c:192 Adding Codec G729 18 G.729 8000hz 30ms 8000bps
2017-09-11 02:04:43.068757 [NOTICE] switch_loadable_module.c:192 Adding Codec G729 18 G.729 8000hz 40ms 8000bps
2017-09-11 02:04:43.068757 [NOTICE] switch_loadable_module.c:192 Adding Codec G729 18 G.729 8000hz 50ms 8000bps
2017-09-11 02:04:43.068757 [NOTICE] switch_loadable_module.c:192 Adding Codec G729 18 G.729 8000hz 60ms 8000bps
2017-09-11 02:04:43.068757 [NOTICE] switch_loadable_module.c:192 Adding Codec G729 18 G.729 8000hz 70ms 8000bps
2017-09-11 02:04:43.068757 [NOTICE] switch_loadable_module.c:192 Adding Codec G729 18 G.729 8000hz 80ms 8000bps
2017-09-11 02:04:43.068757 [NOTICE] switch_loadable_module.c:192 Adding Codec G729 18 G.729 8000hz 90ms 8000bps
2017-09-11 02:04:43.068757 [NOTICE] switch_loadable_module.c:192 Adding Codec G729 18 G.729 8000hz 100ms 8000bps
2017-09-11 02:04:43.068757 [NOTICE] switch_loadable_module.c:192 Adding Codec G729 18 G.729 8000hz 110ms 8000bps
2017-09-11 02:04:43.068757 [NOTICE] switch_loadable_module.c:192 Adding Codec G729 18 G.729 8000hz 120ms 8000bps

#列出当前Profile的配置情况,如下(有删节),其中CODES IN、CODES OUT显示了呼入、呼出的编码设置
freeswitch@internal> sofia status profile internal
=================================================================================================
Name                    internal
Domain Name             N/A
Auto-NAT                false
DBName                  sofia_reg_internal
Pres Hosts              10.211.55.13,10.211.55.13
Dialplan                XML
Context                 public
Challenge Realm         auto_from
RTP-IP                  10.211.55.13
SIP-IP                  10.211.55.13
URL                     sip:mod_sofia@10.211.55.13:5060
BIND-URL                sip:mod_sofia@10.211.55.13:5060;transport=udp,tcp
HOLD-MUSIC              local_stream://moh
OUTBOUND-PROXY          N/A
CODECS IN               OPUS,G722,PCMU,PCMA,GSM
CODECS OUT              OPUS,G722,PCMU,PCMA,GSM

 

三、安装语音编码

在FreeSWITCH中,有些编码不是默认安装的,如果要使用这些编码,需要自己编译

#在源码目录下执行以下命令来安装相应的编码
make mod_celt-install #安装CELT编码
make mod_silk-install #安装SILK编码
make mod_isac-install #安装iSAC编码
make mod_opus-install #安装OPUS编码
make mod_codec2-install #安装CODEC2编码

 

四、相关配置

#在默认配置中,SIP Profile支持的媒体列表是在vars.xml文件中配置的,如下
<X-PRE-PROCESS cmd="set" data="global_codec_prefs=OPUS,G722,PCMU,PCMA,GSM"/>
<X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=PCMU,PCMA,GSM"/>

#如果需要增加其他编码支持(如G729),可以将上述配置项改为
<X-PRE-PROCESS cmd="set" data="global_codec_prefs=OPUS,G722,PCMU,PCMA,GSM,G729"/>
<X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=PCMU,PCMA,GSM,G729"/>

 

© 著作权归作者所有

共有 人打赏支持
stache
粉丝 1
博文 14
码字总数 17640
作品 0
南昌
freeswitch实战经验1:服务器向成员主动发起会议邀请

接触过freeswitch的童鞋们都知道,freeswitch自动会议室功能,比如大家都拨3000这个号码,就可以进行电话会议功能了。但是,现在有这么一个场景:现在某个主持人想开电话会议,想直接由frees...

BLUE-魏晓峰
2013/06/17
0
0
freeSWITCH编译java esl模块

一、背景 假设源代码路径为/home/freeswitch 二、编译安装libesl.a 1. cd /home/freeswitch(源代码的根目录) 执行./configure,以便生成必要的Makefile文件。 2. cd /home/freeswitch/libs/...

会哭的鳄鱼
2017/10/24
0
0
freeSwitch安装步骤 for CentOS

下载: 下载地址:http://files.freeswitch.org/ 或者直接用git安装。可能会失败 git clone -b v1.2.stable git://git.freeswitch.org/freeswitch.git 安装依赖环境: yum install autoconf......

会哭的鳄鱼
2017/10/24
0
0
FreeSWITCH 与 Asterisk(译)

Anthony Minssale/文 Seven/译 VoIP通信,与传统的电话技术相比,不仅仅在于绝对的资费优势,更重要的是很容易地通过开发相应的软件,使其与企业的业务逻辑紧密集成。Asterisk作为开源VoIP软...

mickelfeng
2013/03/06
0
0
freeswitch实战经验2:发送短消息

大家都知道通过freeswitch,可以实现用户与用户之间发送短信,那能否做个WEB系统,实现通过服务器向一堆用户发送短信呢? 答案必须是肯定的! 1、还是使用fs_cli,这个东西我不在重复描述,见...

BLUE-魏晓峰
2013/06/18
0
4

没有更多内容

加载失败,请刷新页面

加载更多

下一页

以太坊总结

一、概念说明 1.以太坊(Ethereum blockchain)由V神(Vitalik Buterin)发明,是一个交易记录的永久数据库,它以一个“无信任”的交易系统来运行,不需要任何第三方信任机构即可进行点对点的...

盼望明天
32分钟前
1
0
Java并发工具类——AtomicInteger

基本类型int的递增等操作并不是线程安全的,加上synchronized又会影响性能,因此在并发情况下我们应该使用AtomicInteger,下面通过一个例子验证一哈。 public class TestAtomicInteger {...

东都大狼狗
34分钟前
1
0
基于CentOS7.2系统对RabbitMQ单机版安装过程

准备虚拟机系统 我的系统如下 系统版本7.2 安装perl yum install perl 安装wget工具 yum install -y wget 安装相关依赖工具 yum install ncurses ncurses-base ncurses-devel ncurses-libs ...

凌晨一点
38分钟前
1
0
Maven常用命令

Maven常用命令 说到命令,则不得不提一下环境变量,在之前的博文中简单提了一下环境变量的配置,这里具体说一下。说完环境变量的配置,然后就是Maven的常用命令,这里说的是常用的几个命令,...

星汉
54分钟前
0
0
Flink操作mysql kafka和hbase

主程序 package com.streaming.flink;import java.util.Properties;import org.apache.flink.api.common.functions.FlatMapFunction;import org.apache.flink.api.common.functi......

守望者之父
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部