惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
Cisco Talos Blog
Cisco Talos Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
V2EX
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
D
Docker
S
SegmentFault 最新的问题
博客园 - 聂微东
美团技术团队
Apple Machine Learning Research
Apple Machine Learning Research
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
M
MIT News - Artificial intelligence
F
Fortinet All Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The GitHub Blog
The GitHub Blog
GbyAI
GbyAI
L
LangChain Blog
Vercel News
Vercel News
博客园 - 叶小钗
MongoDB | Blog
MongoDB | Blog
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
Engineering at Meta
Engineering at Meta
T
Threat Research - Cisco Blogs
T
Threatpost
Scott Helme
Scott Helme
T
Tailwind CSS Blog
Latest news
Latest news
Stack Overflow Blog
Stack Overflow Blog
Blog — PlanetScale
Blog — PlanetScale
The Register - Security
The Register - Security
罗磊的独立博客
P
Proofpoint News Feed
腾讯CDC
S
Schneier on Security
雷峰网
雷峰网
A
About on SuperTechFans
T
Tenable Blog
F
Full Disclosure
Cyberwarzone
Cyberwarzone
博客园_首页
有赞技术团队
有赞技术团队
K
Kaspersky official blog

文章列表

设计模式-备忘录模式 - OXOXTECH 牛牛技术客栈 设计模式-中介者模式 - OXOXTECH 牛牛技术客栈 Linux【Ubuntu】修改ssh默认端口 - OXOXTECH 牛牛技术客栈 设计模式-迭代器模式 - OXOXTECH 牛牛技术客栈 scheduled定时任务的三种基本实现方式 - OXOXTECH 牛牛技术客栈 Apriori - 基于关联规则的推荐算法(三) - OXOXTECH 牛牛技术客栈 Apriori - 基于关联规则的推荐算法(二) - OXOXTECH 牛牛技术客栈 Apriori - 基于关联规则的推荐算法(一) - OXOXTECH 牛牛技术客栈 基于JavaFX的桌面端网络调试工具 - OXOXTECH 牛牛技术客栈 Golang Channel的原理介绍 - OXOXTECH 牛牛技术客栈 Go语言Map的原理分析 - OXOXTECH 牛牛技术客栈 Go语言错误处理(panic)的最佳实践 - OXOXTECH 牛牛技术客栈 设计模式-解释器模式 - OXOXTECH 牛牛技术客栈 Redis报错Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. go-webpbin库在Linux报错failed to encode image to WebP: exit status 1.......的问题 exe4j 打包加密的jar - OXOXTECH 牛牛技术客栈 Go生成图形验证码示例 - OXOXTECH 牛牛技术客栈 澳门一天游:一日尽享东方与西方的交融之美 - OXOXTECH 牛牛技术客栈 设计模式-命令模式 - OXOXTECH 牛牛技术客栈 别再自己瞎写工具类了,SpringBoot内置工具类应有尽有 - OXOXTECH 牛牛技术客栈 中山一日游 - OXOXTECH 牛牛技术客栈 设计模式-责任链模式 - OXOXTECH 牛牛技术客栈 起舞吧,齐舞吧 - OXOXTECH 牛牛技术客栈 设计模式-组合模式 - OXOXTECH 牛牛技术客栈 Go语言Web开发|GoFrame框架入门笔记 - OXOXTECH 牛牛技术客栈 Java打包exe教程 - OXOXTECH 牛牛技术客栈 设计模式-代理模式 - OXOXTECH 牛牛技术客栈 MySQL存储过程的优缺点有哪些? - OXOXTECH 牛牛技术客栈 前端渲染优化有哪些? - OXOXTECH 牛牛技术客栈 HTTP状态码及其含义 - OXOXTECH 牛牛技术客栈 从浏览器地址栏输入url到显示页面的步骤 - OXOXTECH 牛牛技术客栈 TypeScript事件派发管理器 - OXOXTECH 牛牛技术客栈 MQTT保留消息的使用方法 - OXOXTECH 牛牛技术客栈 世界工程-港珠澳大桥游 - OXOXTECH 牛牛技术客栈 Golang逃逸分析 - OXOXTECH 牛牛技术客栈 设计模式-享元模式 - OXOXTECH 牛牛技术客栈 牛牛成长记录 - OXOXTECH 牛牛技术客栈 ffmpeg常用命令 - OXOXTECH 牛牛技术客栈 设计模式-外观模式 - OXOXTECH 牛牛技术客栈 设计模式-装饰器模式 - OXOXTECH 牛牛技术客栈 设计模式-桥接模式 - OXOXTECH 牛牛技术客栈 5周年恋爱纪念日 - OXOXTECH 牛牛技术客栈 2024新年快乐,龙腾四海 - OXOXTECH 牛牛技术客栈 迎接新年:除夕的美好时刻 - OXOXTECH 牛牛技术客栈 设计模式-适配器模式 - OXOXTECH 牛牛技术客栈 设计模式-原型模式 - OXOXTECH 牛牛技术客栈 设计模式-建造者模式 - OXOXTECH 牛牛技术客栈 设计模式-工厂模式 - OXOXTECH 牛牛技术客栈 设计模式-单例模式 - OXOXTECH 牛牛技术客栈 SpringBoot在Linux环境下发送163邮件失败(No appropriate protocol (protocol is disabled or cipher suites are inappropriate)) 海与日落 - OXOXTECH 牛牛技术客栈 Swagger比较常用的注解 - OXOXTECH 牛牛技术客栈 猫🐱牛 - OXOXTECH 牛牛技术客栈 2023年最后一个晚霞 - OXOXTECH 牛牛技术客栈 Linux(Centos)部署Nginx教程 - OXOXTECH 牛牛技术客栈 Linux MySQL下载安装详细教程(CentOS版) - OXOXTECH 牛牛技术客栈 JavaFx打包成exe - OXOXTECH 牛牛技术客栈 Flux脚本语言入门教程 - OXOXTECH 牛牛技术客栈 演唱会出图 - OXOXTECH 牛牛技术客栈 Netty TCP解决粘包拆包 - OXOXTECH 牛牛技术客栈 SpringBoot实现订单超时取消的几种方案 - OXOXTECH 牛牛技术客栈 详解Java并发中的各种锁 - OXOXTECH 牛牛技术客栈 SpringBoot集成支付宝支付 - OXOXTECH 牛牛技术客栈 雪花算法:分布式系统唯一ID生成算法 - OXOXTECH 牛牛技术客栈 Java解决空指针的神器Optional - OXOXTECH 牛牛技术客栈 与兴一起 - OXOXTECH 牛牛技术客栈 Java17新特性详解与安装 - OXOXTECH 牛牛技术客栈 Jdk17安装+环境配置详细教程 - OXOXTECH 牛牛技术客栈 孤注一掷 - OXOXTECH 牛牛技术客栈 解决WinSCP经常断线重连 - OXOXTECH 牛牛技术客栈 内存不足导致Tomcat崩溃问题排查与解决办法 - OXOXTECH 牛牛技术客栈 influxDB初识,一个高效的时序数据库 - OXOXTECH 牛牛技术客栈 SpringBoot 服务接口限流方案 - OXOXTECH 牛牛技术客栈 Docker 安装 Portainer - OXOXTECH 牛牛技术客栈 Linux 安装Docker - OXOXTECH 牛牛技术客栈 物料宣传 - OXOXTECH 牛牛技术客栈 Java使用EMQX实现MQTT通信 - OXOXTECH 牛牛技术客栈 Java实现常见的排序算法 - OXOXTECH 牛牛技术客栈 FreeSwitch Windows安装教程 - OXOXTECH 牛牛技术客栈 MQTT单向SSL数据加密 - OXOXTECH 牛牛技术客栈 随性 - OXOXTECH 牛牛技术客栈 mysql报错Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre的解决方案 Git Push项目报 push to origin/master was rejected 错误解决方案 游行记——珠海金沙滩与金湖公园之行 - OXOXTECH 牛牛技术客栈 Tomcat:解决Tomcat启动警告:"无法将资源添加到Web应用程序缓存中....请考虑增加缓存空间" 的问题 - OXOXTECH 牛牛技术客栈 励骏庞都广场,迷一般的皇宫 - OXOXTECH 牛牛技术客栈 Docker 常用命令集合 - OXOXTECH 牛牛技术客栈 ElasticSearch Windows版-安装教程 - OXOXTECH 牛牛技术客栈 Java去除对象中为null的字段 - OXOXTECH 牛牛技术客栈 我和我的青春 - OXOXTECH 牛牛技术客栈 Java实现螺旋矩阵算法: - OXOXTECH 牛牛技术客栈 Java直接内存分配和释放的理解 - OXOXTECH 牛牛技术客栈 FreeSwitch将默认数据库迁移至MySQL - OXOXTECH 牛牛技术客栈 别错过路上的风景,别错过刹那间的深情! - OXOXTECH 牛牛技术客栈 Viewer.js:一款强大的图片预览组件 - OXOXTECH 牛牛技术客栈 Java JDK Proxy和CGLib动态代理示例 - OXOXTECH 牛牛技术客栈 redis常用命令 - OXOXTECH 牛牛技术客栈 SpringBoot查询IP归属地 - OXOXTECH 牛牛技术客栈 Spring 事务失效的六种情况 - OXOXTECH 牛牛技术客栈 #张艺兴每时每刻# - OXOXTECH 牛牛技术客栈
Freeswitch常见问题 - OXOXTECH 牛牛技术客栈
Mr.Potato · 2023-02-08 · via

FreeSwitch下配置DID的方法

首先介绍下什么是DID? 翻译为中文为“直接向内拨号”,该服务是由电话公司提供的,它使用户能够直接拨打PBX或VOIP系统中的分机号码,而无需求助于总机或自动话务系统。

现在要实现这样一个功能 - 通过手机或座机拨打一个号码(例如:01088888888),可以直接联系到VOIP系统(FreeSwitch系统)的1008这个用户。如下图所示:

手机/座机 -------------------> 01088888888 ---------------> VOIP系统 ----------------> 1008

分两步实现:

(1) 配置网关

\conf\sip_profiles\external 中添加一个XML文件,名为:gw-DID.xml。内容如下:

   <include>
       <gateway name="gw-DID">
           <param name="realm" value="27.54.226.74"/>  // sip         provider 提供的服务器IP
           <param name="username" value="88888888"/>// sip provider 提供的DID账号
           <param name="password" value="12345678"/> // sip provider 提供的DID账号密码
           <param name="proxy" value="27.54.226.74"/>  // sip provider 提供的服务器IP
           <param name="register" value="true"/>
           <param name="expire-seconds" value="600"/>
           <param name="ping" value="30"/>
           <param name="sip-trace" value="true"/>
       </gateway>
   </include>

(2)配置拨码计划

\conf\dialplan 中修改 public.xml,添加如下内容:

<extension name="sipprovider">
  <condition field="destination_number" expression="^88888888$">
    <action application="transfer" data="1008 XML default"/>
  </condition>
</extension>

通过 FS_CLI 输入 reloadxml 即可。


通过FreeSwitch同时呼叫多个用户

通过FreeSwitch可以对多个终端进行呼叫,依据振铃顺序不同,可以分为:同振 和 顺振 。

同振是指多个终端同时振铃;顺振是指多个终端顺序振铃。

下面实现如下应用, 某用户拨叫 2000 这个接入号码,希望 1000 和 1001 同时振铃,其中任一个接听来话,另一个停止振铃。

(1) 在 \conf\dialplan\default.xml中添加如下内容,

<extension name="group_dial_sim">
  <condition field="destination_number" expression="^2000$">
    <action application="bridge" data="sofia/internal/1000@192.168.0.183,sofia/sip/1001@192.68.0.183"/>
  </condition>
</extension>

在 FS_CLI.exe 中运行 reloadxml 即可。

下面实现如下应用, 某用户拨叫 2000 这个接入号码,希望 1000 和 1001 顺序振铃,其中任一个接听来话,另一个停止振铃。

(2)在 \conf\dialplan\default.xml中添加如下内容,

<extension name="group_dial_seq">
  <condition field="destination_number" expression="^2000$">
    <action application="bridge" data="sofia/internal/1000@192.168.0.183|sofia/sip/1001@192.68.0.183"/>
  </condition>
</extension>

在 FS_CLI.exe 中运行 reloadxml 即可。


在FreeSwitch中修改主叫显示名称

如果你想通过你的IP话机呼叫其他用户的时候,在对方话机显示能标识你的名称,在FreeSwitch中该怎么配置?

需求:

1000 和 1001 分别是两部话机,1000时张三的话机,1001是李四的话机。若1000发起呼叫,需要在对方话机上显示“zhangsan”;若1001发起呼叫,需要在对方话机上显示“lisi”.

配置:

进入 \conf\directory\default\*.xml

(1) 编辑 1000.xml ,找到 <variable name="effective_caller_id_name" value="1000"/>,修改为 <variable name="effective_caller_id_name" value="zhangsan"/>

(2) 编辑 1000.xml ,找到 <variable name="effective_caller_id_name" value="1001"/>,修改为 <variable name="effective_caller_id_name" value="lisi"/>

通过 FS_CLI.exe 运行 reloadxml 即可。


FreeSwitch中修改注册用户的密码

在FreeSwitch系统中,所有用户的密码默认为 1234,该设置在 \conf\vars.xml 中,如下所示:<X-PRE-PROCESS cmd="set" data="default_password=1234"/>

若需要修改默认密码的话,直接修改该处即可。

那用户的密码和默认密码怎么关联起来?请看下面的配置文件,以 用户 1000 为例,打开 \conf\directory\default\1000.xml ,找到如下设置:

<param name="password" value="$${default_password}"/>,即可找到他们之间的联系。若需要修改某用户的密码,直接修改 value 值即可。

修改配置完成后,通过 FS_CLI.exe 运行 reloadxml 即可。


FreeSwitch中用户不经过认证即可注册成功

一般来说,FreeSwitch中的SIP 用户都需要通过用户名和密码进行认证后才能注册成功,并进行通话。若有特殊需要,也可以设置为无认证即可使用,具体设置如下 :

打开 \conf\sip_profiles\internal.xml ,将如下两条设置去掉注释即可

<param name="accept-blind-auth" value="true"/> 
<param name="suppress-cng" value="true"/> 

在 FS_CLI.exe 中运行 reloadxml 即可。


FreeSwitch中添加新组

FreeSwitch中默认有三个组,分别为:sales ,billing,support。 在 \conf\directory\default.xml 中可以查到。

注意: 在 FreeSwitch中,同一个用户可以在不同的分组中存在。官方解释如下 :

type="pointer" is a pointer so you can have the same user in multiple groups. It basically means to keep searching for the user in the directory.

若需要添加一个 名为 ZOO的新组,需要在 \conf\directory\default.xml 中,找到 <groups> 标签,然后添加如下内容即可,

<group name="ZOO">
  <users>
    <user id="1005" type="pointer"/>
    <user id="1006" type="pointer"/>
    <user id="1007" type="pointer"/>
    <user id="1008" type="pointer"/>
    <user id="1009" type="pointer"/>
  </users>
</group>

在FS_CLI.exe 中输入 reloadxml,重新加载新的XML文件即可。


FreeSwitch中添加新用户

FreeSwitch 中默认配置了20个用户,分别是: 1000 到 1019。在 \conf\directory\default 目录下有每个用户的XML配置文件。

若想新添加一个用户,可以通过如下步骤进行:

(1)在/conf/directory/default/增加一个用户配置文件.如下所示:

<include>
  <user id="1020">
    <params>
      <param name="password" value="$${default_password}"/>
      <param name="vm-password" value="1020"/>
    </params>
    <variables>
      <variable name="toll_allow" value="domestic,international,local"/>
      <variable name="accountcode" value="1020"/>
      <variable name="user_context" value="default"/>
      <variable name="effective_caller_id_name" value="Extension 1020"/>
      <variable name="effective_caller_id_number" value="1020"/>
      <variable name="outbound_caller_id_name" value="$${outbound_caller_name}"/>
      <variable name="outbound_caller_id_number" value="$${outbound_caller_id}"/>
      <variable name="callgroup" value="techsupport"/>
    </variables>
  </user>
</include>

(2) 修改拨号计划,以使得其他用户可以呼到他。如下所示:

在  \conf\dialplan\default.xml中,修改 如下 语句 -:

<extension name="Local_Extension"><condition field="destination_number" expression="^(10[01][0-9])$">

为 :

<extension name="Local_Extension"><condition field="destination_number" expression="^(10[012][0-9])$">

(3) 在 FS_CLI.exe 中运行 reloadxml,即可生效。


FreeSwitch中配置网关的方法

在VOIP通信系统中,经常要用到网关。那么网关怎么和FreeSwitch在一起配合使用?

有如下需求:

有一虚拟运营商(即:SIP PROVIDER ),提供拨打外线的功能。从该处购买一 SIP 账号,具体配置信息如下:

用户名:user

密码: pass

服务器IP:100. 100.100.100

想通过和该SIP PROVIDER 对接实现拨打外线功能。即:0+要拨打的号码,就送到该SIP PROVIER (说明:此时的 SIP PROVIDER 相当于一网关)。

解决方法:

1)添加一个网关

\conf\sip_profiles\external 中添加一个名为GW_TEST.xml 的文件,内容如下:

<gateway name="GW_TEST">
  <param name="realm" value="100. 100.100.100"/>
  <param name="username" value="user"/>
  <param name="password" value="pass"/>
</gateway>

(2) 新建一个拨码计划

\conf\dialplan\default 中新建一个名为 call_gw_test.xml 的文件 ,内容如下:

<include>
  <extension name="call out">
    <condition field="destination_number" expression="^0(\d+)$">
      <action application="bridge" data="sofia/gateway/GW_TEST/$1"/>
    </condition>
  </extension>
</include>

(3) 通过 FS_CLI.exe 运行 reloadxml ,即可生效。


FreeSwitch中的录像功能和播放录像功能

FreeSwitch 系统中的录像功能 和 播放录像功能,系统都默认提供。

按默认配置,通过IP电话拨打9193,即可录像;通过IP电话拨打9194即可播放录像。

同时,我测试了一种有趣的用法,描述如下:

      (1) 1000  呼叫 9193 并且发送视频;

       (2) 1001 呼叫 9194 ,可以看到 1000 上传的视频,但非实时;

       (3) 1002 呼叫 9194, 可以看到 1000 上传的视频,但非实时。

这样看来,一个点播系统,FreeSwitch 默认就支持!稍加改造,就可以变为一套视频直播系统。实现上述功能的配置文件在 \conf\dialplan\default.xml 中,如下所示:

[录像]

<extension name="video_record">
  <condition field="destination_number" expression="^9193$">
    <action application="answer"/>
    <action application="record_fsv" data="/tmp/testrecord.fsv"/>
  </condition>
</extension>

[播放录像]

<extension name="video_playback">
  <condition field="destination_number" expression="^9194$">
    <action application="answer"/>
    <action application="play_fsv" data="/tmp/testrecord.fsv"/>
  </condition>
</extension>

FreeSwitch的录音功能

一般电话系统都可以将本系统内的语音通话录制下来,FreeSwitch 系统中也可以进行语音录制。

需求: 录制系统中的所有通话。

实现:

(1)建立一个文件夹 freeswitch/recordings/archive/ ,用来存储录音文件;

(2)修改拨码计划,打开 \conf\dialplan\default.xml

找到下面的语句:

<extension name="Local_Extension">

<condition field="destination_number" expression="^(10[01][0-8])$">

在其下,添加:

<action application="set" data="RECORD_TITLE=Recording ${destination_number} ${caller_id_number} ${strftime(%Y-%m-%d %H:%M)}"/>  

                     <action application="set" data="RECORD_COPYRIGHT=(c) 2011"/>  

                     <action application="set" data="RECORD_SOFTWARE=FreeSWITCH"/>

                     <action application="set" data="RECORD_ARTIST=FreeSWITCH"/> 

                     <action application="set" data="RECORD_COMMENT=FreeSWITCH"/> 

                     <action application="set" data="RECORD_DATE=${strftime(%Y-%m-%d %H:%M)}"/>  

                     <action application="set" data="RECORD_STEREO=true"/>

    <action application="record_session" data="$${base_dir}/recordings/archive/${strftime(%Y-%m-%d-%H-%M-%S)}_${destination_number}_${caller_id_number}.wav"/>

(3)在 FS_CLI.EXE 中运行 reloadxml 或 按 F6 即可生效。

查询 FreeSwitch 支持的音频文件格式,可以在 FS_CLI.exe 中运行 show file 命令。


FreeSwitch播放语音文件

上一篇介绍了 FreeSwitch 的录音功能,若想回放这些录音,是否可以实现?或者说,通过 FreeSwitch ,是否可以直接播放语音文件?

FreeSwitch 中有一个 playback 的 application ,可以播放语音文件。

具体用法如下:

(1)播放本地文件

<action application="set" data="playback_terminators=none"/>

<action application="playback" data="sounds/soundfile.wav"/>

(2)播放远程服务器上的文件

<action application="playback" data="${http_get(http://myserver.yo/media/hello_world.wav)}"/>


FreeSwitch中的会议功能(1)

FreeSwitch 默认支持会议功能,有如下特点:

1) 不需要创建一个会议室的操作,只需要通过 conference 拨码计划就可以实现;

(2) 会议室不真正存在, 直到有人呼入为止;

(3) 会议功能很强大,能实现灵活控制。

这样讲太学术化,来点直观的,步骤如下:

        (1) 运行 FREESWITCH 服务器程序;

        (2) 注册 1000、1001、1002三部IP话机;

        (3) 通过 1000 呼叫 3000,通话建立后, 1000 将听到一段保持音乐;

        (4) 通过 1001 呼叫 3000,通话建立后, 1001将能听到1000的声音,1000也能听到1001的声音;

        (5) 通过 1002 呼叫 3000,通话建立后,  1002将能听到 1000 和 1001的声音,1001能听到1000和1002的声音,1000也能听到 1001 和 1002 的声音。

那 3000 这个号码是怎么来的? 请看 \conf\dialplan\default.xml 中的内容,如下所示:

<extension name="nb_conferences">
  <condition field="destination_number" expression="^(30\d{2})$">
    <action application="answer"/>
    <action application="conference" data="$1-${domain_name}@default"/>
  </condition>
</extension>

FreeSwitch中的会议功能(2)

FreeSwitch 提供了一些控制会议成员行为的方法,罗列如下:

(1)Talk volume: The volume of the audio the caller sends (that is, gain control).

   与会成员讲话的音量控制;

(2)Listen volume: The volume of the audio the caller hears.

   与会成员收听语音的音量控制;

(3)Energy threshold: The minimum energy level of the audio from the caller to be considered talking. Raising the energy level will cut down on background noise when a participant is in a noisy environment.

   语音门限控制 。

具体用法,可以查看:\conf\autoload_configs\console.conf.xml ,内容如下:

<caller-controls>
  <group name="default"><control action="mute" digits="0"/>             // 静音
      <control action="deaf mute" digits="*"/>      // 解除静音
      <control action="energy up" digits="9"/>     // 增加门限
      <control action="energy equ" digits="8"/>   // 
      <control action="energy dn" digits="7"/>     // 降低门限
      <control action="vol talk up" digits="3"/>     // 提高讲话音量 
      <control action="vol talk zero" digits="2"/>  // 讲话音量设置为0
      <control action="vol talk dn" digits="1"/>     // 降低讲话音量
      <control action="vol listen up" digits="6"/>  // 提高收听音量
      <control action="vol listen zero" digits="5"/> // 收听音量设置为0
      <control action="vol listen dn" digits="4"/>    // 降低收听音量 
      <control action="hangup" digits="#"/>           // 退出会议
   </group>
</caller-controls>

FreeSwitch中的会议功能(3)

FreeSwitch中可以设置主持人以及会议密码。设置了主持人后,可以影响会议的开展;设置了会议密码后,与会成员必须输入正确密码才能入会。

主持人对会议的影响主要体现在以下两个方面:

    (1)直到主持人入会后,会议才开始;

    (2)主持人退出会议后,会议才结束。

那怎么设置主持人?方法如下:

<action application="conference" data="$1@default"/> // 未设置主持人

<action application="conference" data="$1@default+flags{moderator}"/> // 设置了主持人

如何设置会议密码?方法如下:

<action application="conference" data="$1@default+1234"/> // 设置入会密码为 1234

如何既设置主持人,又设置会议密码?方法如下:

<action application="conference" data="$1@default+1234+flags{moderator}"/>


FreeSwitch中的会议功能(4)

FreeSwitch 是否支持视频会议?答案是 支持的!

FreeSwitch 默认只支持与会成员看到当前“嗓门最大”的那个人的视频。

在实际应用中,当讲话人改变时,视频会切换,但切换的时候,视频会有马赛克现象。此问题期待高手解决!

场景描述如下:

三个用户 1000、1001、1002 都注册到同一台服务器。

(1)1000 呼叫 3000,进入会议,同时发送自己的视频,1000 可以看到自己;

(2)1001 呼叫 3000,进入会议,可以看到 1000 的视频。若1001也发送自己的视频,双方看到的视频是当前讲话声音大的一方的视频;

(3)1002 呼叫 3000,进入会议,可以看到当前讲话一方的视频。若 1002 也发送自己的视频,三方看到的视频是当前讲话声音大的一方的视频。

再扩展下思维,能否让 FreeSwitch 实现融屏功能,实现与会各方都能彼此看到自己!那FreeSwitch就更强大了。以下是几个相关的资源简介:

(1)BigBluebutton 这个视频会议项目中用到了 FreeSwitch, 项目主页:  http://www.bigbluebutton.org/ 。但对视频的处理只是转发各路视频,没有实现融屏合成一路视频推送到各方显示。

(2)openvcs 是一个开源的 SIP MCU 实现,项目主页:http://code.google.com/p/openvcs/ 。 在 Windows 下实现了融屏的原型设计,但在效率以及并发处理方面,还有许多需要完善的地方。但提供了一个开发 SIP MCU 的思路,这个是很有价值的。


FreeSwitch中的会议功能(5)

邀请手机用户或座机用户入会: 在 FS_CLI.EXE 中运行 类似 conference <conf-id> dial Sofia/gateway/xyz/1234567890 即可。


FreeSwitch中的音乐保持功能

Music on hold(MOH) ,即:音乐保持,在一般电话系统中都存在。FreeSwitch也支持该功能,并且保持音乐可配置。 FreeSwitch默认的配置中,用户通过某IP话机拨打 9664 ,呼叫建立后,就可以听到保持音乐。 查看当前系统中音乐文件的路径,可以通过 FS _CLI.EXE 运行 show_local_stream 来显示。 如果你想修改默认的保持音乐,可以自己添加一些好听的音乐进来,方法如下: (1)在 \sounds\music 新建一个文件夹 MOH_TEST,并拷贝音乐文件进去(WAV文件):

(2)在 \conf\autoload_configs\local_stream.conf.xml 中添加如下内容:

<directory name="moh_test" path="$${sounds_dir}/music/MOH_TEST">
  <param name="rate" value="8000"/>
  <param name="shuffle" value="true"/>
  <param name="channels" value="1"/>
  <param name="interval" value="20"/>
  <param name="timer-name" value="soft"/>
</directory>

(3)  在  \conf\vars.xml 中添加如下内容,

<X-PRE-PROCESS cmd="set" data="moh_test=local_stream://MOH_TEST"/>

(4) 在 \conf\dialplan\default 中添加一个名为 moh_test_call.xml 的文件,内容如下:

<include>
   <extension name="moh_test_call">
     <condition field="destination_number" expression="^96646$"/>
        <action application"playback" data="${moh_test}"/>
     </condition>
   </extension>
</include>

(5)改变了默认的音乐文件后,需要重新加载  mod_local_stream 模块,在 FS_CLI.exe 中运行 reload mod_local_stream 即可生效。

(6)在 FS_CLI.EXE 中运行 reloadxml 或 按F6,即可生效。

通过某一IP 话机拨打 96646 后,即可听到你自己设置的保持音乐。