脚本背景
在进行视频呼叫的时候,需要为H264编码附加fmtp参数。
但是H264编码的payload type id是动态变化的,导致附加的fmtp参数不一定能和真实的id对应上。
所以才有了下面的脚本。
基本思路
- 从通道变量中获取sdp
- 抽取sdp中的H264对应的payload type id
- 修改本地fmtp参数,然后附加到sdp中
lua脚本
setsdp.lua脚本如下:
主要作用:提取原有sdp中H264的payload type的动态id,然后再附加新的fmtp参数。
fmtp = " profile-level-id=64C000;sprop-parameter-sets=Z2QAC6y0Ei5APCAQqA==,aO48sA==;packetization-mode=0;max-br=128"
--fmtp = " profile-level-id=42C01E;sprop-parameter-sets=Z0LAHtoHgUaAbQoTUA==,aM4G4g==;packetization-mode=1;sar-understood=16;sar-supported=1"
local sdp = session:getVariable("switch_r_sdp");
_,_,id=string.find(sdp, "a=rtpmap:(%d+)%sH264");
session:consoleLog("info","H264 id:" .. id .. "\n");
newsdp = sdp .. "a=fmtp:".. id .. fmtp
session:setVariable("switch_r_sdp", newsdp);
拨号方案
<extension name="CallOut_To_Bot_Extension">
<condition field="destination_number" expression="^888(\d+)$">
<action application="set" data="effective_caller_id_name=02160989001"/>-->
<action application="set" data="effective_caller_id_number=02160989001"/>
<action application="set" data="effective_caller_id_name=02160989001"/>
<action application="lua" data="setsdp.lua"/>
<action application="record_session" data="$${recordings_dir}/${uuid}.wav"/>
<action application="bridge" data="{absolute_codec_string='PCMA,PCMU,H264'}sofia/external/$1@220.196.25.7:5061" />
<action application="hangup"/>
</condition>
</extension>
这个是具体调用脚本的拨号方案。