FreeSWITCH 1.10.10 简单图形化界面21-录音相关


FreeSWITCH GUI界面预览

http://myfs.f3322.net:8020/
用户名:admin,密码:admin

FreeSWITCH界面安装参考:https://blog.csdn.net/jia198810/article/details/137820796

00、安装FreeSWITCH GUI先看使用手册

先看使用手册,先看使用手册,先看使用手册。

这里是手册,这里是手册,这里是手册,
这里是手册,这里是手册,这里是手册,
这里是手册,这里是手册,这里是手册,
这里是手册,这里是手册,这里是手册,

1、录音相关的应用

通过下面的这个链接,可找到freeswitch常用的录音application有两个record和record_session。
freeswitch dptools链接
https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Modules/mod_dptools_1970333/

11、record

record为阻塞式录音,在执行record时,后续的application不会执行,直到record执行完毕。

用法:

record <路径> [时间限制(秒)] [静音阈值] [连续静音次数]

路径: 指定录音文件保存的路径及文件名。文件扩展名决定录音的格式。如果只给出文件名,没有指定路径,则会根据通道变量sound_prefix或默认的base_dir来确定保存位置。

时间限制(秒)(可选): 设置录音的最大持续时间,单位为秒。如果不提供,默认可能会一直录直到手动停止或其他条件触发结束。

静音阈值(可选): 定义何种音量水平以下被视为静音。这有助于根据无声状态自动停止录音。

连续静音次数(可选): 指定在达到静音阈值下连续多少秒无声音后录音自动结束。默认是3秒。

举例:

<extension name="自定义IVR">
  <condition expression="^(999)$" field="destination_number">
    <action application="set" data="absolute_codec_string=PCMU,PCMA"/>
    <action application="answer"/>
    <action application="sleep" data="500"/>
    <action application="playback" data="$${sounds_dir}/sound/test1-离线022310.wav"/>
    <action application="playback" data="default/beep.gsm"/>
    <!-- 创建录音文件目录 -->
    <action application="mkdir" data="$${recordings_dir}/phone/${strftime(%Y%m%d)}"/>
    <action application="set" data="record_filename=${caller_id_number}-${destination_number}-${strftime(%H_%M_%S)}.wav"/>
    <action application="set" data="record_filepath=$${recordings_dir}/phone/${strftime(%Y%m%d)}/${record_filename}"/>
    <action application="set" data="playback_terminators=#"/> 
    <!-- 阻塞式录音,这里执行录音操作,录音操作结束之前,不会进行后续的操作-->
    <action application="record" data="${record_filepath} 120 200 10" />
    <!-- 后续操作 -->
    <action application="log" data="INFO ${record_ms}" />
    <action application="sleep" data="500"/>
    <action application="hangup"/>
  </condition>
</extension>`在这里插入代码片`

注意:

(1)在测试record的时候,如果录音文件的录音路劲不存在,则会提示错误,如下图:

2024-06-01 15:45:39.457231 97.10% [WARNING] mod_sndfile.c:281 Error Opening File [/usr/local/freeswitch/recordings/phone/20240601/2002-999-15_45_39.wav] [No Error.]

因此需要在record之前确保录音文件的最终路径存在。可以通过mkdir创建最终路径存在。

  <!-- 创建录音文件目录 -->
  <action application="mkdir" data="$${recordings_dir}/phone/${strftime(%Y%m%d)}"/>

(2)可以指定一个按键,手动结束录音。

 <!-- 在录音之前,指定一个按键,在录制结束后,通过这个按键手动结束本次录音-->
 <action application="set" data="playback_terminators=#"/> 

(3)可以设置静音值,自动结束录音。

<!-- 200为静音阀值,10为匹配静音次数后,自动结束录音,可以根据实际情况调节-->
 <action application="record" data="${record_filepath} 120 200 10" />

12、record_session

record_session为非阻塞式录音,在执行record_session时,后续的application会继续执行。
个人理解,看英文名称,是录制会话、通话的,通话是是2个session,如果阻塞了,后续没办法桥接被叫了,那还录制个毛线。

用法:

record_session <路径> 

举例:

<extension name="分机1001">
  <condition field="destination_number" expression="^(1001)$">
    <!-- 录音通话-->
    <action application="record_session" data="$${recordings_dir}/${strftime(%Y-%m-%d-%H-%M-%S)}_${destination_number}_${caller_id_number}.wav"/>
    <action application="bridge" data="user/$1"/>
    <action application="hangup" />
  </condition>
</extension>

2、录音相关的变量

参考:https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Dialplan/Variables-Master-List_16352570/#record_read_only
在这里插入图片描述
大部分都是设置录音文件元数据的一些设置,有几个常用的变量,变量在进行录音应用之前设置即可。
AI翻译如下:

RECORD_APPEND:布尔值,当设置为true时,新的录音将会被追加到已存在的文件末尾,而不是覆盖原有文件。这特性仅对支持元数据头的文件格式(如WAV通过mod_sndfile模块)有效。

RECORD_ARTIST, RECORD_COMMENT, RECORD_COPYRIGHT, RECORD_DATE, RECORD_SOFTWARE, RECORD_TITLE:这些字符串变量允许在录音前设置文件的元数据信息,比如艺术家、评论、版权信息、录制日期、软件名称和标题。这些信息会被存储在文件的头部,前提是文件格式支持元数据。

RECORD_BRIDGE_REQ:布尔值,当设为true时,仅当通道被桥接后才开始录音。这对于需要确保通话双方都在线才开始记录的场景很有用。

RECORD_DISCARDED:只读变量,如果录音因故被丢弃或放弃,此变量会被设为true,有助于诊断问题。

record_fill_cng:用于指定静音期间填充舒适噪声的采样率。例如,设置为1200意味着每秒填充1200个静音样本。

RECORD_HANGUP_ON_ERROR:布尔值,设为true时,若录音遇到错误则挂断呼叫。这保证了在某些业务场景中,未成功录音的通话不会继续。

RECORD_MIN_SEC:整数,设定录音的最短持续时间。低于此时间长度的录音将被自动删除。

record_ms:只读变量,记录最近一次录音的毫秒长度。

record_post_process_exec_api, record_post_process_exec_app:允许指定API或应用程序来对录制的音频进行后处理,适用于A腿先挂断导致无法在正常流程中处理录音文件的情况。

RECORD_READ_ONLY, RECORD_WRITE_ONLY:分别控制只录制读取流(如来电方的声音)或只录制写入流(如去电方的声音)。这对于分离不同方向的音频记录很有帮助。

record_restart_limit_on_dtmf:布尔值,允许用户通过DTMF按键延长录音时间限制。

record_sample_rate:设置录音的采样率,如8000代表每秒8000次采样。

RECORD_STEREO, RECORD_STEREO_SWAP:控制是否以立体声方式记录,以及是否交换左右声道,适用于同时记录通话双方且希望区分两边声音的情况。

record_waste_resources:默认情况下,录音时FreeSWITCH不发送RTP包以节省带宽,但某些情况下这可能导致媒体超时挂断。设置此变量可强制发送RTP包(即使包含静音),以避免超时。

recording_follow_transfer:布尔值,当设为true,即使通话被转移,录音也会继续。

recordings_dir:指定录音文件的保存目录。

3、单腿录音

通过上面的录音变量的解释,可以使用 RECORD_WRITE_ONLY(只录制被叫的声音)和RECORD_READ_ONLY(只录制主叫的声音)进行单腿录音。

如下:

<extension name="分机1001">
  <condition field="destination_number" expression="^(1001)$">
    <!-- 下面都是A通道的变量-->
    <!-- 经过测试,录制A通道上,freeswitch收到的声音,即录制主叫的声音-->
    <action application="set" data="RECORD_READ_ONLY=true"/>
    <!-- 经过测试,录制A通道上,freeswitch发出去的声音,即录制被叫的声音-->
    <!--<action application="set" data="RECORD_WRITE_ONLY=true"/> -->
    <!-- 录音通话-->
    <action application="record_session" data="$${recordings_dir}/${strftime(%Y-%m-%d-%H-%M-%S)}_${destination_number}_${caller_id_number}.wav"/>
    <action application="bridge" data="user/$1"/>
    <action application="hangup" />
  </condition>
</extension>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贾宝玉的玉宝贾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值