IMS对接问题汇总

1.视频外呼:invite消息发送无响应或者多次发送才有回复

问题描述

  1. 连续外呼时,invite消息发送没有问题
  2. 间隔一段时间再次外呼,invite消息发送无响应,或者多次发送才会回复

    问题解决

    发送option消息与NCE平台保持心跳。
    freeswitch中添加非注册的gateway,增加ping参数
    1. <param name="username" value="fs"/>
    2. <param name="password" value="fs"/>
    3. <param name="register" value="false"/>
    4. <param name="outbound-proxy" value="220.196.xx.xx:5061"/>
    5. <param name="register-proxy" value="220.196.xx.xx:5061"/>
    6. <param name="expire-seconds" value="600"/>
    7. <param name="ping" value="10"/>

2.视频外呼:对端手机无法看到本端视频,或者花屏

问题描述

  1. 本地webrtc主动外呼,视频通话,对端反馈声音正常,HD(1280x720)和HHD(1920x1080)视频无法看到
  2. 本地webrtc主动外呼,视频通话,对端反馈声音正常,VGA(640x480)视频出现花屏
  3. 本地webrtc主动外呼,视频通话,对端反馈声音正常,QQVGA(160x120)视频正常显示

    问题分析

    和华为的IMS工程师联调发现,我们和对端协商视频的时候,带宽只协商到144k。
    所以只有低分辨率的视频才能显示正常,其他的要么花屏,要么直接不显示。

    问题解决

    从对端发来的invite请求中抽取部分视频sdp信息,然后附加到我们自动外呼的规则中,解决了该问题。
    该sdp信息包括视频的分辨率和屏幕大小等终端信息。
    具体如下:
    1. <action application="set" data="switch_r_sdp=${switch_r_sdp}a=fmtp:103 profile-level-id=42C01E;sprop-parameter-sets=Z0LAHtoHgUaAbQoTUA==,aM4G4g==;packetization-mode=1;sar-understood=16;sar-supported=1"/>

3.视频播放:freeswitch外呼播放视频,对端无法看到视频

问题描述

  1. FreeSWITCH主动发起视频外呼,外呼成功后,播放本地的视频(mp4、flv等,分辨率在640及以下)
  2. 本地播放视频后,对端无法看到
  3. 本地webrtc直接发起视频呼叫,对端可以看到视频

    问题分析

    原先播放视频文件时,在收到183就开始播放,导致关键帧I帧发过去的时候,对端还没接听。
    从而造成关键帧丢失。

    问题解决

    只要在接通后再发送关键帧就可以了。
    目前采取的方案时接通后多次playback视频文件。

4.视频播放:如何给手机端播放本地视频文件或者rtmp协议视频流

编译av模式,直接使用playback就可以播放。

注意事项: av两种方式编译:一个依赖ffmpeg,一个是依赖libav。 尽量依赖ffmpeg来编译。

libav编译后,视频播放失败。

5.av模块有哪些重要参数可以设置

在文件av.conf.xml中

  1. <param name="level" value="22"/>
  2. <option name="preset" value="slow"/>

参考地址:https://www.cnblogs.com/tinywan/p/6402007.html
目前av的参数暂未用到,后期考虑使用。

6.外呼使用的呼叫命令

  1. originate {origination_uuid=1005}user/1005 &park
  2. originate {origination_uuid=18616270139}sofia/gateway/gwout110/88818621444441 &park
  3. uuid_bridge 1005 18616270139

或者使用下面的脚本:

  1. session = freeswitch.Session("{origination_uuid=1005}user/1005");
  2. if session:ready() then
  3. outsession = freeswitch.Session("{origination_uuid=18616270139}sofia/gateway/gwout110/88818621444441");
  4. if outsession:ready() then
  5. freeswitch.bridge(session, outsession);
  6. end
  7. end

上面的是具体的脚本。