IMS对接问题汇总
1.视频外呼:invite消息发送无响应或者多次发送才有回复
问题描述
- 连续外呼时,invite消息发送没有问题
- 间隔一段时间再次外呼,invite消息发送无响应,或者多次发送才会回复
问题解决
发送option消息与NCE平台保持心跳。
freeswitch中添加非注册的gateway,增加ping参数<param name="username" value="fs"/>
<param name="password" value="fs"/>
<param name="register" value="false"/>
<param name="outbound-proxy" value="220.196.xx.xx:5061"/>
<param name="register-proxy" value="220.196.xx.xx:5061"/>
<param name="expire-seconds" value="600"/>
<param name="ping" value="10"/>
2.视频外呼:对端手机无法看到本端视频,或者花屏
问题描述
- 本地webrtc主动外呼,视频通话,对端反馈声音正常,HD(1280x720)和HHD(1920x1080)视频无法看到
- 本地webrtc主动外呼,视频通话,对端反馈声音正常,VGA(640x480)视频出现花屏
- 本地webrtc主动外呼,视频通话,对端反馈声音正常,QQVGA(160x120)视频正常显示
问题分析
和华为的IMS工程师联调发现,我们和对端协商视频的时候,带宽只协商到144k。
所以只有低分辨率的视频才能显示正常,其他的要么花屏,要么直接不显示。问题解决
从对端发来的invite请求中抽取部分视频sdp信息,然后附加到我们自动外呼的规则中,解决了该问题。
该sdp信息包括视频的分辨率和屏幕大小等终端信息。
具体如下:<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外呼播放视频,对端无法看到视频
问题描述
- FreeSWITCH主动发起视频外呼,外呼成功后,播放本地的视频(mp4、flv等,分辨率在640及以下)
- 本地播放视频后,对端无法看到
- 本地webrtc直接发起视频呼叫,对端可以看到视频
问题分析
原先播放视频文件时,在收到183就开始播放,导致关键帧I帧发过去的时候,对端还没接听。
从而造成关键帧丢失。问题解决
只要在接通后再发送关键帧就可以了。
目前采取的方案时接通后多次playback视频文件。
4.视频播放:如何给手机端播放本地视频文件或者rtmp协议视频流
编译av模式,直接使用playback就可以播放。
注意事项: av两种方式编译:一个依赖ffmpeg,一个是依赖libav。 尽量依赖ffmpeg来编译。
libav编译后,视频播放失败。
5.av模块有哪些重要参数可以设置
在文件av.conf.xml中
<param name="level" value="22"/>
<option name="preset" value="slow"/>
参考地址:https://www.cnblogs.com/tinywan/p/6402007.html
目前av的参数暂未用到,后期考虑使用。
6.外呼使用的呼叫命令
originate {origination_uuid=1005}user/1005 &park
originate {origination_uuid=18616270139}sofia/gateway/gwout110/88818621444441 &park
uuid_bridge 1005 18616270139
或者使用下面的脚本:
session = freeswitch.Session("{origination_uuid=1005}user/1005");
if session:ready() then
outsession = freeswitch.Session("{origination_uuid=18616270139}sofia/gateway/gwout110/88818621444441");
if outsession:ready() then
freeswitch.bridge(session, outsession);
end
end
上面的是具体的脚本。