使用自有SIP服务器通话已接通但无声音问题求助
使用Linphone免费服务(sip.linphone.org)时,通话可正常接通,双方能正常听见彼此并交流;但使用自有SIP服务器及凭证时,通话虽能发起并接通,却出现无声音的情况,无法听见对方,推测是媒体数据包发送问题,寻求解决方案。
测试场景:Android向iOS发起通话,使用Linphone服务器及凭证时通话功能正常,使用自有SIP服务器及凭证则无法正常发声。
相关代码
SIP初始化代码
InitData iniData = InitData(); iniData.license = "...license-credentials..."; iniData.logLevelFile = LogLevel.stack; iniData.logLevelIde = LogLevel.stack; iniData.enableCallKit = true; iniData.enablePushKit = false; iniData.unregOnDestroy = false;
账号连接服务器代码
AccountModel account = AccountModel( expireTime: 36000, sipExtension: ext, sipPassword: decryptPassword(sipPassword!), sipServer: sipServer, ); account.ringTonePath = await writeAssetAndGetFilePath("ringtone.mp3"); account.transport = SipTransport.tls; account.secureMedia = SecureMedia.DtlsSrtp; account.tlsUseSipScheme = true; account.aCodecs = [ // SiprixVoipSdk.kAudioCodecOpus, SiprixVoipSdk.kAudioCodecPCMU, SiprixVoipSdk.kAudioCodecPCMA, // SiprixVoipSdk.kAudioCodecDTMF, ];
发起通话代码
serviceLocator<AppCallsModel>().invite(destination)
排查与解决方案
核对媒体安全协议配置
当前代码设置了SecureMedia.DtlsSrtp,需确认自有SIP服务器是否启用并支持DTLS-SRTP加密。若服务器未配置该协议,将secureMedia改为SecureMedia.None再测试,或调整为服务器兼容的安全策略。调整音频编解码器
现有代码仅启用PCMU、PCMA,部分服务器默认优先支持Opus编解码器。尝试取消SiprixVoipSdk.kAudioCodecOpus的注释,注释PCMU/PCMA后测试,同时确认自有服务器支持所选编解码器。检查网络与防火墙设置
媒体RTP数据包通常通过UDP传输,需确认自有服务器及客户端网络未阻塞UDP端口(常规范围10000-20000)。若使用TLS传输,检查服务器SSL证书是否有效,客户端是否信任该证书。分析调试日志
从调试日志中重点查看SDP协商结果、DTLS握手过程、RTP数据包收发状态,确认是否存在协商失败、端口映射错误或加密握手异常的情况。验证账号传输协议匹配
确认account.transport = SipTransport.tls与自有服务器的SIP传输协议一致,若服务器使用UDP或TCP,需修改为对应枚举值;同时检查sipServer地址是否包含正确端口(如TLS默认5061)。
内容的提问来源于stack exchange,提问作者Sreerag km

