脚本背景

在进行视频呼叫的时候,需要为H264编码附加fmtp参数。
但是H264编码的payload type id是动态变化的,导致附加的fmtp参数不一定能和真实的id对应上。
所以才有了下面的脚本。

基本思路

  1. 从通道变量中获取sdp
  2. 抽取sdp中的H264对应的payload type id
  3. 修改本地fmtp参数,然后附加到sdp中

lua脚本

setsdp.lua脚本如下:
主要作用:提取原有sdp中H264的payload type的动态id,然后再附加新的fmtp参数。

  1. fmtp = " profile-level-id=64C000;sprop-parameter-sets=Z2QAC6y0Ei5APCAQqA==,aO48sA==;packetization-mode=0;max-br=128"
  2. --fmtp = " profile-level-id=42C01E;sprop-parameter-sets=Z0LAHtoHgUaAbQoTUA==,aM4G4g==;packetization-mode=1;sar-understood=16;sar-supported=1"
  3. local sdp = session:getVariable("switch_r_sdp");
  4. _,_,id=string.find(sdp, "a=rtpmap:(%d+)%sH264");
  5. session:consoleLog("info","H264 id:" .. id .. "\n");
  6. newsdp = sdp .. "a=fmtp:".. id .. fmtp
  7. session:setVariable("switch_r_sdp", newsdp);

拨号方案

  1. <extension name="CallOut_To_Bot_Extension">
  2. <condition field="destination_number" expression="^888(\d+)$">
  3. <action application="set" data="effective_caller_id_name=02160989001"/>-->
  4. <action application="set" data="effective_caller_id_number=02160989001"/>
  5. <action application="set" data="effective_caller_id_name=02160989001"/>
  6. <action application="lua" data="setsdp.lua"/>
  7. <action application="record_session" data="$${recordings_dir}/${uuid}.wav"/>
  8. <action application="bridge" data="{absolute_codec_string='PCMA,PCMU,H264'}sofia/external/$1@220.196.25.7:5061" />
  9. <action application="hangup"/>
  10. </condition>
  11. </extension>

这个是具体调用脚本的拨号方案。