Administrator
Published on 2024-12-30 / 18 Visits
0
0

FreeSwitch使用指南

准备

下载

github:https://github.com/signalwire/freeswitch

windows:https://files.freeswitch.org/windows/installer/x64/

安装

windows如果安装在C盘,运行时可能需要管理员权限运行才能成功。

客户端

测试时,可安装MicroSIP客户端进行对讲测试。

使用

账号密码

FreeSWITCH 默认安装后自带一些示例账号,通常位于 conf/directory/default/ 目录下的 XML 配置文件中。

默认账号为1000-1019,密码为1234。

默认密码定义在conf/vars.xml中的<X-PRE-PROCESS cmd="set" data="default_password=1234"/>

创建账号密码,即在 conf/directory/default/ 目录中创建对应的xml,格式参考已有的默认账号密码的xml。

创建xml后,在运行的console窗口/cli窗口中执行下面命令进行重新加载目录配置:

reloadxml
sofia profile internal rescan

查询(UUID)

当执行某些操作时,如originate拉会议等,处理执行命令时会返回操作的UUID,另外还可以用下面指令查看当前所有活动的通话(通道)的详细信息

show channels

另外可用下面命令查询已注册在线设备:

sofia status profile internal reg

日志

在程序根目录\log\freeswitch.log可查看操作日志,有DEBUG信息,推荐用vscode进行查看,可动态刷新(需点击下窗口再自动重新读取)。

对讲

基本

服务运行后,可使用MicroSIP等客户端进行连接,并且测试两个客户端互相音视频电话是否正常,测试时由客户端主动发起。

拉起对接

在console窗口/cli窗口中,可以通过服务器让两个客户端进行对讲,命令如下:

1000为一方,1001为另外一方。

该命令流程为:呼叫客户端 A(1000),在客户端 A 接听后,将其桥接到客户端 B(1001)。

originate user/1000 &bridge(user/1001)

音频广播

使用服务器本地音频文件与客户端进行对讲,在console窗口/cli窗口中,使用下面命令,可实现将音频文件当作对讲音源,与另外一个客户端进行对讲(即将音频推送给某个客户端):

注意音频文件需要wav格式,且路径不要包含中文或空格。

originate user/1000 &playback(/path/to/audio.wav)

freeswitch默认只支持wav格式的文件,如果要支持mp3,则需要开启mod_shout模块,在console窗口/cli窗口中,使用下面命令:

load mod_shout

会议

查询

通过查询,可查询出会议中对应客户端的通话(通道)的详细信息,如member_id,UUID,音量等。

下面命令实际也是查出UUID列表,跟show channels命令差不多,只是只显示会议相关的。

另外可以查询出member_id,用于静音等操作。

//所有会议的所有列表
conference list

//漂亮的显示
conference list pretty

//简洁的显示
conference list summary

//某个会议的所有列表
conference <conference_name> list

开启会议

可通过下面命令,将多个客户端拉到通过会议,进行多方会议通话。

my_conference为具体房间号,任意填写。

originate user/1000 &conference(my_conference)
originate user/1001 &conference(my_conference)
originate user/1002 &conference(my_conference)

结束会议

对于结束会议,需要在上位机平台程序设计时,存储好每次originate的UUID,或通过上面的查询相关命令查询出操作,然后依次移除客户端(挂断客户端),比如上面对应的,要结束my_conference会议,则执行1000,1001,1002对应的kill UUID,得所有都执行完,会议才算结束:

//方式1
uuid_kill <uuid>

//方式2
conference <conference_name> kick <member_id>

另外,也可一次性剔除所有客户端,即销毁会议:

//被踢出人员播放提示音
conference <conference_name> kick all

//被踢出人员不播放提示音
conference <conference_name> hup all

静音

在进行会议时,可进行静音功能,如下指令:

//拉会议时默认静音
originate user/1000 &conference(my_conference+flags{mute})
//拉会议时,只有一个成员时不播放背景声
originate user/1000 &conference(my_conference+flags{nomoh})

//单个人员静音
conference <conference_name> mute <member_id>
//单个人员取消静音
conference <conference_name> unmute <member_id>

//所有人员静音
conference <conference_name> mute all
//所有人员取消静音
conference <conference_name> unmute all

音量调节

使用 conference API 的 volume_in 和 volume_out 参数,可以分别调整某个参与者的输入音量(麦克风音量)和输出音量(扬声器音量)。

音量值,范围通常为 -4 到 +4,表示音量的增益或衰减。

<member_id>可为all,代表调整所有人。

conference <confname> volume_in <member_id> <volume>
conference <confname> volume_out <member_id> <volume>

对于音频广播,上面的调节有用,也可用下面的调节指令:

conference <confname> file-vol <volume>

音频广播

在有会议存在时,可以使用服务器本地音频文件加入会议,进行音频广播。

音频的质量除了跟文件本身的采样率有关系,也跟第一个发起对讲时,对方所使用的采样率有关系,越高对应音频播出质量也更好,另外在conf\autoload_configs\conference.conf.xml中有配置采样率。

方式1

使用conference play 命令,其中my_conference为会议名称,需要先用originate创建相关会议后,再执行:

临时加入的用户也能播,喊话和音频都能一起混合。

支持一次性播放到会议中多个客户端。

该指令启用mod_shout模块后,也能支持MP3,但是播出效果比wav文件差很多。

只有将会议所有人对应的UUID都kill/kick掉,该播放命令才算失效,不然还是一直在的,不要重复执行,不然存在两个声音听着就不对。

多次执行conference play,音频不是以混音模式,而是队列顺序播放。

//所有人
conference my_conference play C:\Users\Heawill\Desktop\ponce.wav

//单独
conference my_conference play C:\Users\Heawill\Desktop\ponce.wav <member_id>

主动停止,可使用下面命令:

//停止队列中的所有歌曲
conference my_conference stop all

//停止队列当前歌曲,如果有下一首,则直接到下一首
conference my_conference stop current

//单独某个客户端
conference <confname> stop [current|all] [<member_id>]

另外,可在播放时,调整音量的增益或衰减(单位dB):

取值在-20到+20之间,对于正数可不加+符号,0为原始音量。

conference my_conference play {vol=+5}C:\Users\Heawill\Desktop\ponce.wav

方式2

在originate创建相关会议后,存储相关UUID或UUID查询相关命令查询出具体操作,然后依次进行音频添加:

该命令执行后,对应的客户端,喊话和接听喊话会变成无声音,只能播出该音频。

对于会议中如果有多个客户端,都需要依次根据uuid执行才行。

该指令启用mod_shout模块后,也能支持MP3。

uuid_broadcast <uuid> playback::C:\Users\Heawill\Desktop\ponce.wav

录音

开启录音使用下面命令,停止需会议销毁时才会停止:

conference <confname> record <file-path>

中途停止录音:

conference <confname> norecord <file-path>

更多

更多api指令参考官网文档:

https://rts.cn/freeswitch/FreeSWITCH-Explained/Modules/mod_conference_3965534#api-reference

另外参考:

https://blog.csdn.net/dewk37273997/article/details/102330553/


Comment