FreeSWITCH 案例分享之一

应一网友要求,用fs实现一个这样的功能:在sipml5看到他的一个设备(下面简称为device),后者支持H264,但不支持VP8,现象是:

  • pjsip bridge device,音视频正常
  • sipml5 bridge device,音频正常,sipml5看到黑屏,但uuid_debug_media <uuid> vboth on,正常
  • sipml5 bridge pjsip,音视频正常
  • sipml5 echo, 音视频正常

这是典型的互联互通问题,到底什么原因呢?百思不得解!最大的困难在于webrtc的媒体是加密的,不容易抓包分析。

突然想到能不能这样做呢:

sipml5 ---VP8----fs

fs----H264---device

用下面的dialplan试了试:

<action application="set" data="absolute_codec_string=PCMA,VP8"/>
<action application="bridge" data="[absolute_codec_string=PCMA\,H264]user/${destination_number}"/>

还真的不错,sipml5马上看到device的视频了。

dialplan要考虑nat,考虑是否视频呼叫等,最后的版本如下:

<extension name="check_video" continue="true" >
	<condition>
		<action application="info" data=""/>
		<action application="set" data="is_video=${regex(${switch_r_sdp}|m=video)}" inline="true"/>
		<action application="log" data="ERR is_video = ${is_video}"/>
		<action application="set" data="is_vp8=${regex(${switch_r_sdp}|VP8)}" inline="true"/>
		<action application="log" data="ERR is_vp8 = ${is_vp8}"/>
		<condition field="${is_vp8}" expression="true">
			<action application="log" data="ERR dialplan here"/>
			<action application="set" data="absolute_codec_string=PCMA,VP8"/>
		</condition>
	</condition>
</extension>

<extension name="Local_Extension">
	<condition field="destination_number" expression="^(10[01][0-9])$">
		<condition field="${is_video}" expression="true">
			<action application="set" data="sip_sticky_contact=true"/>
			<action application="bridge" data="[absolute_codec_string=PCMA\,H264]user/${destination_number}"/>

			<anti-action application="set" data="sip_sticky_contact=true"/>
			<anti-action application="bridge" data="[absolute_codec_string=PCMA]user/${destination_number}"/>
		</condition>
	</condition>
</extension>

其中check_video检查是否有video,如果有video再检查是否有VP8编码,如果有VP8,那么设置编码为PCMA和VP8。

Local_Extension是呼叫本地分机,device回200 OK,带的contact不可达,需要设置sip_sticky_contact,这样fs就会rewrite contact。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
开发者? 成为一个Freeswitch开发者需要具备以下技能和经验: 1. 语音知识:了解语音通信的基本原理和协议,如RTP、SIP等。 2. Linux操作系统:熟悉Linux操作系统的基本命令和管理技能,熟悉Shell脚本编程。 3. C语言:Freeswitch是用C语言编写的,需要熟悉C语言的语法和编程技巧。 4. 编程工具:需要掌握使用Git等工具进行版本控制,会使用一些调试工具,如Valgrind、GDB等。 5. 基本网络知识:熟悉TCP/IP协议、路由转发、网络安全等。 6. 学习能力:需要具备良好的学习能力和自学能力,不断学习新的技术和知识。 如果你想成为一个Freeswitch开发者,可以参考以下步骤: 1. 阅读Freeswitch官方文档:Freeswitch官方文档中包含了很多开发相关的信息,包括API文档、模块开发、事件处理等。 2. 学习C语言:C语言是Freeswitch的主要编程语言,学习C语言的语法和编程思想非常重要。 3. 下载Freeswitch源代码:将Freeswitch源代码下载到本地环境,配置开发环境,运行并测试。 4. 参与社区:加入Freeswitch社区,参与邮件列表、论坛等,与其他开发者交流经验和技术。 5. 贡献代码:通过修复bug、添加新功能等方式贡献代码,获得开发者之间的认可和赞誉。 最后,成为一个Freeswitch开发者需要很长时间的积累和努力,需要不断学习和实践,才能成为一个优秀的Freeswitch开发者。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值