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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值