2026/5/24 4:42:26
网站建设
项目流程
佛山网站建设业务员,wordpress自定义分类法,上上海网站设计建设,家居网站建设效果概述freeswitch是一款简单好用的VOIP开源软交换平台。测试过程中发现fs的proxy_media模式的一个bug#xff0c;就是video媒体流的转发处理有问题。环境CentOS 7.9freeswitch 1.6.20问题fs配置为proxy_media模式#xff0c;A路发起呼叫#xff0c;A路远端的sdp中有audio和vid…概述freeswitch是一款简单好用的VOIP开源软交换平台。测试过程中发现fs的proxy_media模式的一个bug就是video媒体流的转发处理有问题。环境CentOS 7.9freeswitch 1.6.20问题fs配置为proxy_media模式A路发起呼叫A路远端的sdp中有audio和video媒体信息。a642b367-754c-492e-b227-87f94e8010c7 maudio 16394 RTP/AVP 8 18 101a642b367-754c-492e-b227-87f94e8010c7 mvideo 16396 RTP/AVP 99fs处理拨号计划后发起B路呼叫B路的sdp继承了A路的sdp本地sdp信息如下。a642b367-754c-492e-b227-87f94e8010c7 maudio 54398 RTP/AVP 8 18 101a642b367-754c-492e-b227-87f94e8010c7 mvideo 54400 RTP/AVP 99B路收到终端的183sdp信息处理媒体信息后本地sdp修改如下。a642b367-754c-492e-b227-87f94e8010c7 maudio 54398 RTP/AVP 8 18 101a642b367-754c-492e-b227-87f94e8010c7 mvideo 44622 RTP/AVP 99其中B路本端的audio端口为54398video的端口从54400修改为了44622。结果就是B路本端的video媒体流从44622端口发到远端远端的video媒体流送到本地的54400造成媒体流擦肩而过。查看switch_core_media.c的switch_core_media_patch_sdp函数在处理video信息时强制重选了video本地端口而audio端口处理正常。switch_core_media_choose_port(session, SWITCH_MEDIA_TYPE_VIDEO, 1);查看调用堆栈mod_sofia模块在处理183sdp的流程中proxy_media模式下会主动调用“switch_core_media_patch_sdp”这一并无必要的操作。修复修改mod_sofia模块的sofia.c文件屏蔽“switch_core_media_patch_sdp”操作。} else if (switch_channel_test_flag(channel, CF_PROXY_MEDIA)) {switch_channel_set_variable(channel, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, PROXY MEDIA);// switch_core_media_patch_sdp(tech_pvt-session);if (sofia_media_activate_rtp(tech_pvt) ! SWITCH_STATUS_SUCCESS) {nua_respond(nh, SIP_488_NOT_ACCEPTABLE, TAG_END());switch_channel_hangup(channel, SWITCH_CAUSE_INCOMPATIBLE_DESTINATION);} else{switch_channel_mark_pre_answered(channel);}测试重新编译mod_sofia模块后测试视频流程媒体协商正常B路本地端口协商正常媒体流正常转发。总结未经过充分测试不清楚对其他业务流程的影响。经过修改后的fs虽然可以正常转发rtp媒体流但是仍然无法转发rtcp消息在网络较差的情况下视频媒体流无法利用rtcp的特性修复视频卡顿。