脚本背景
在进行视频呼叫的时候,需要为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 .. fmtpsession: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>
这个是具体调用脚本的拨号方案。
