概述

freeswitch 在对VOIP语音通话中,可以通过playback命令播放IVR语音文件。

默认情况下,freeswitch支持wav文件,也可以直接播放VOIP中常见编解码的G711文件、G729文件等,但是对mp3是不支持的。

通过查询freeswitch的官方文档,发现mod_shout模块是可以支持MP3文件的播放。

mod_shout模块默认不安装,可以根据需求来决定是否编译安装。

环境

centos:CentOS  release 7.0 (Final)或以上版本

freeswitch:v1.6.19

GCC:4.8.5

依赖

mod_shout模块安装需要第三方库支持,centos的yum源设置方法参见文档“freeswitch自带yum源配置方式”。

sudo yum install libshout-devel lame-devel libmpg123-devel

安装

回到freeswitch源码根目录,重新生成makefile。

./bootstrap.sh -j

./configure

编译安装mod_shout模块

cd  src/mod/formats/mod_shout/

make

sudo make install

ll /usr/local/freeswitch/mod/mod_shout*

-rwxr-xr-x. 1 root root   1322 May 19 11:43 /usr/local/freeswitch/mod/mod_shout.la

-rwxr-xr-x. 1 root root 168560 May 19 11:43 /usr/local/freeswitch/mod/mod_shout.so

配置

mod_shout模块安装好后,修改fs的配置。

上传MP3放音文件。

ll /usr/local/freeswitch/sounds/101-baidu-mp3.mp3

-rw-r--r--. 1 root root 12096 May 17 17:55 /usr/local/freeswitch/sounds/101-baidu-mp3.mp3

修改 /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml文件。

<load module="mod_shout"/>

修改 /usr/local/freeswitch/conf/dialplan/test.xml文件。

<include>

<context name="default">

<extension name="test" continue="false">

<condition field="destination_number" expression="^(\d+)$">

<action application="answer"/>

<action application="playback" data="/usr/local/freeswitch/sounds/101-baidu-mp3.mp3"/>

<action application="hangup" data="CALL_REJECTED"/>

</condition>

</extension>

</context>

</include>

配置好后,启动freeswitch,并确认mod_shout模块启动正常。

freeswitch@localhost.localdomain> module_exists  mod_shout

true

测试

使用eyebeam注册1001账号到fs,并发起呼叫到1002,1001可以听到fs的IVR放音。

当我们不加载mod_shout模块的时候,日志如下。

EXECUTE sofia/internal/1001@10.55.55.137 playback(/usr/local/freeswitch/sounds/101-baidu-mp3.mp3)

2022-05-19 13:49:55.573314 [ERR] switch_core_file.c:272 Invalid file format [mp3] for [/usr/local/freeswitch/sounds/101-baidu-mp3.mp3]!

EXECUTE sofia/internal/1001@10.55.55.137 hangup(CALL_REJECTED)

重新加载了mod_shout模块,并发起呼叫,查看日志如下。

EXECUTE sofia/internal/1001@10.55.55.137 playback(/usr/local/freeswitch/sounds/101-baidu-mp3.mp3)

2022-05-19 11:57:20.393239 [DEBUG] switch_ivr_play_say.c:1498 Codec Activated L16@8000hz 1 channels 20ms

2022-05-19 11:57:20.473273 [DEBUG] switch_rtp.c:7273 Correct audio ip/port confirmed.

2022-05-19 11:57:20.613239 [DEBUG] sofia.c:7084 Channel sofia/internal/1001@10.55.55.137 entering state [ready][200]

2022-05-19 11:57:26.433297 [DEBUG] switch_ivr_play_say.c:1942 done playing file /usr/local/freeswitch/sounds/101-baidu-mp3.mp3

EXECUTE sofia/internal/1001@10.55.55.137 hangup(CALL_REJECTED)

总结

MP3文件是压缩格式,比常见的wav(pcm)小8倍左右,在空间占用和传输带宽上有较大的优势。

我们应该多一些不同的工具,在不同的应用场景下选择最合适的方案。

空空如常

求真得真

freeswitch使用mod_shout模块播放mp3的更多相关文章

  1. Python 用pygame模块播放MP3

    安装pygame(这个是python3,32位的) pip安装这个whl文件 装完就直接跑代码啦,很短的 import time import pygame file=r'C:\Users\chan\ ...

  2. 读取SD卡文件夹下的MP3文件和播放MP3文件

    首先获取SD卡path路径下的所有的MP3文件,并将文件名和文件大小存入List数组(此代码定义在FileUtils类中): /** * 读取目录中的Mp3文件的名字和大小 */ public Lis ...

  3. 遭遇flash播放mp3诡异问题

    在部分ie10+flash player 播放mp3,播放第二句话时,中断无法正常播放,(客户的机器上),自己公司的机器测试了几个,都没发现这个问题.其它浏览器(chrome,firefox)也没发现 ...

  4. Android命令行播放MP3音乐

    /*************************************************************************** * Android命令行播放MP3音乐 * 说 ...

  5. ios开发——实用技术篇Swift篇&播放MP3

    播放MP3 // MARK: - 播放MP3 /*----- mp3 ------*/ //定时器- func updateTime() { //获取音频播放器播放的进度,单位秒 var cuTime ...

  6. 在C语言控制台程序中播放MP3音乐

    游戏没有声音多单调. 这里做一个简单的范例,用 mciSendString 函数播放 MP3 格式的音乐,先看看代码吧: // 编译该范例前,请把 background.mp3 放在项目文件夹中 // ...

  7. ubuntu 13.10 Rhythmbox不能播放mp3 和中文乱码的问题

    1.ubuntu 13.10 Rhythmbox不能播放mp3的解决方法 软件中心搜索(ubuntu额外的版权受限软件)不带括号 2.中文乱码问题解决方法: 终端顺序操作 : 1.  sudo ged ...

  8. Ionic2 播放mp3功能实现

    在开发app的过程中有需要播放mp3的功能,一直想实现,但苦于具体的困难一直未能实现,经过一段时间的资料查询和测试,最终摸索出来,现记录如下: 1.最重要的是安装第三方插件ionic-audio,开源 ...

  9. VC播放mp3的方法

    1.使用msi库 #include <mmsystem.h> #pragma comment(lib,"winmm.lib") ....... //打开文件 MCI_O ...

随机推荐

  1. js 简易模块加载器 示例分析

    前端模块化 关注前端技术发展的各位亲们,肯定对模块化开发这个名词不陌生.随着前端工程越来越复杂,代码越来越多,模块化成了必不可免的趋势. 各种标准 由于javascript本身并没有制定相关标准(当然 ...

  2. 用 JWT 实现小程序本地用户标识

    panda-chat-room 继上节「理解小程序 session」 ,本节我们以 jsonwebtoken 来实现小程序端的用户状态标识.如果你对小程序用户登录流程及 session 管理还有些疑惑 ...

  3. 面试--html语义化的理解和作用

    什么是HTML语义化 1.让开发者阅读和写出更优雅的代码2.让浏览器的爬虫和机器很好的解析 为什么要语义化 有利于seo方便其他设备监听 屏幕阅读设备 盲人阅读器方便团队协作开发 语义化元素 head ...

  4. 如何实现多个接口Implementing Multiple Interface

    4.实现多个接口Implementing Multiple Interface 接口的优势:马克-to-win:类可以实现多个接口.与之相反,类只能继承一个超类(抽象类或其他类). A class c ...

  5. 面试 | Java 算法的 ACM 模式

    (Java 算法的 ACM 模式) 前言 经常在 LeetCode 上用核心代码模式刷题的小伙伴突然用 ACM 模式可能会适应不过来,把时间花在输入输出上很浪费时间,因此本篇笔记对 Java 算法的 ...

  6. 在Vue3项目中使用pinia代替Vuex进行数据存储

    pinia是一个vue的状态存储库,你可以使用它来存储.共享一些跨组件或者页面的数据,使用起来和vuex非常类似.pina相对Vuex来说,更好的ts支持和代码自动补全功能.本篇随笔介绍pinia的基 ...

  7. 使用GO语言通过Stream Load实现Doris数据导入

    Doris github地址欢迎加Star apache/incubator-doris: Apache Doris(Incubating) is an MPP-based interactive S ...

  8. python学习-Day39-HTML-form表单

    目录 HTML-form表单 form表单 属性action input标签(输入元素) 文本域(Text Fields) 密码字段 单选按钮(Radio Buttons) 复选框(Checkboxe ...

  9. bs4 & 二进制写入图片视频

    适用于:数据都在网页源代码上,可以直接从中提取到对应数据 例子:北京新发地网 原理:拿到页面源代码的文本,交给BeautifulSoup解析,然后找到对应的标签,获取值 关键词:BeautifulSo ...

  10. C# 核心

    C# 核心 面向对象编程概念 面向过程编程是一种以过程为中心的编程思想,分析出解决问题所需要的步骤,然后有函数把步骤一步一步实现,使用的时候一个一个依次调用. 面向对象是一种对现实世界理解和抽象的编程 ...