欢迎参考 在此记录freeswitch开发的点点滴滴,供同行交流。欢迎大家多留言讨论,如此,这一主题才能壮大下去。
Sofia library 【2020-6-22】 Freeswitch采用Sofia SIP开源库处理SIP协议,Sofia SIP开源库由Nokia开发,进一步了解代码库可以参考网页:http://sofia-sip.sourceforge.net/development.html
Freeswitch 参考书 【2020-6-22】 Freeswitch 相关的书很少,最好的参考资料就是源代码。
- 一些参考资料可以帮助入门,个人认为国内的杜金房所著 《FreeSWITCH权威指南完整版》有一定的参考意义
- 国外Freeswitch核心开发人员写的三本书也可看看。
《Mastering FreeSWITCH》
《FreeSWITCH 1.6 Cookbook》
《freeswitch1.8》// https://blog.csdn.net/yetyongjin/category_10047301.html 这里有翻译为中文的博客连接。 - SIP协议是基础,是必须学习的。推荐学习SIP协议一本好的书:《Sip Understanding the Session Initiation Protocol》第四版。
例如:show calls, show registrations等
sofia, 列出sofia库相关的命令
例如:sofia global siptrace on //打开sip相关的log
Freeswitch编译路径 【2020-6-23】 Freeswitch编译后放置的路径由prefix指定,否则用默认的路径。参见configure文件里的语句:
if test "x$prefix" = "xNONE" ;
then
prefix='/usr/local/freeswitch'
fi
SIP字段笔记 【2020-6-23】 SIP中两个重要的概念,Dialog和Transaction。Dialog和Transaction是如何标识的呢?
- From和To两个域包含的Tag以及Call-ID组合标识一个Dialog(一个会话),一个电话包含的消息Invite、180 Ring、200 Ok、Ack、Bye,它们对应一个dialog,其中的call-Id都是一样的,Tag组合也是一样的。(subscribe,200 Ok 和 notify是一个dialog, message和200 Ok也是一个dialog)
- Via域包含的Branch用于标识一个Transaction(如:Invite、Ack、Bye),一个Transaction中所有的回应消息, Branch字段,From和To两个域是一样的。
例如 Invite 以及对应的response 180 Ring,200 Ok, 他们的 Branch字段以及From和To两个域是一样的。
sngrep开源软件的网址为:https://github.com/irontec/sngrep。
可以直接安装编译的安装包,以centos安装为例:
- 添加 /etc/yum.repos.d/irontec.repo文件,文件中输入以下内容:
[irontec]
name=Irontec RPMs repository
baseurl=http://packages.irontec.com/centos/$releasever/$basearch/
- 执行以下命令添加 Irontec repositories 的公钥
rpm --import http://packages.irontec.com/public.key
- 执行以下命令开始安装
yum install sngrep
下面是SIP显示的例子:
文章图片
SIP认证算法MD5 【2020-6-29】 SIP认证采用MD5算法时,MD5结果取32位小写。具体产生response的过程如下:
- 生成ha1
ha1 = MD5(username “:” realm “:” password) - 生成ha2
ha2 = MD5(method “:” req_uri) - 生成response digest
当 qop 为空时:
response = MD5(ha1 “:” nonce “:” ha2)
当qop=auth 时:
response = MD5(ha1 “:” nonce “:” nc “:” cnonce “:” qop “:” ha2)
response = MD5(ha1 ":" nonce ":" nc ":" cnonce ":" qop ":" ha2)
= MD5(dbf2766cb7e77e0c5ae00cc23f78397b:58971392-ea2f-48b4-a118-0f808d111999:00000001:017a526603e5a15f:auth:442f0464c91da85e6d6e40d47e2ff57c) = 510d6f4e39ab0418d6ac8f640645a4ed
ha1= MD5(username ":" realm ":" password)
= MD5(1001:119.23.67.126:1234)= dbf2766cb7e77e0c5ae00cc23f78397b
ha2 = MD5(method ":" req_uri)
= MD5(INVITE:sip:1000@119.23.67.126) = 442f0464c91da85e6d6e40d47e2ff57c
1.发送INVITE
文章图片
- 返回407,
文章图片
3. 重发带response的INVITE
文章图片
如何设置媒体处理模式 【2020-7-1】 【Freeswitch|Freeswitch 开发日记】几种模式的比较
模式 | 功能 | 使用场景 |
---|---|---|
a.默认方式 | 媒体通过freeswitch,RTP被freeswtich转发,freeswitch控制编码的协商并在协商不一致时提供语音编码转换能力,支持录音,二次拨号等。 | 更适合呼叫中心等富功能应用,但性能相比其他两个也是最差的 |
b.代理模式(Proxy Media) | 媒体通过freeswitch转发,但是不处理媒体,RTP通过freewtich转发(只改动sdp c= ip)freeswtich不控制 sdp参数,只是转发。通话的终端必须有一致的语音或者视频编码,因为freeswitch此时不支持转码(适合视频编码)不支持录音, 二次拨号等功能 | 更适合处理nat问题,可以考虑用这种模式做一个session border controlor,也适合于外部MCU配合做为视频会议,性能也明显好于a |
c.旁路模式(Bypass Media) | 不转发也不处理媒体,FS不会对SDP控制,音视频也不走FS。此模式下freeswitch更像是一个信令proxy,媒体不会通过freeswitch,sdp消息体不做修改,没有录音,二次拨号等功能 | 更像是一个信令代理,性能最高,但提供的功能有限 |
模式 | 配置 |
---|---|
Proxy Media | conf\sip_profiles\internal.xml 在 sip_profile 中设置proxy media 模式,其他模式注释掉,还要在Dailplan中 ,在打电话bridge 之前 |
Bypass Media | conf\sip_profiles\internal.xml中在sip_profile 中设置bypass-media模式,其他模式注释掉,还要在Dailplan中的default.xml的local-extension中设置bypass-media=true |