Android WebRTC呼叫FreeSWITCH报错:m-line顺序与Offer不匹配
解决Android WebRTC呼叫FreeSWITCH的m-line顺序不匹配问题
嘿,这个问题我之前帮好几个开发者排查过,核心就是SDP协商时的媒体行(m-line)顺序不匹配,触发了WebRTC的严格校验。咱们一步步来搞定它:
错误原因拆解
WebRTC对SDP协商有个硬性规则:Answer里的m-line必须和Offer里的顺序完全一致。你提供的Offer里第一个m-line是视频(m=video),如果FreeSWITCH返回的Answer把音频行放到了前面,或者调换了媒体行的顺序,WebRTC就会直接抛出INVALID_PARAMETER错误,拒绝这个Answer。
具体解决步骤
- 第一步:先确认问题点
先把FreeSWITCH返回的Answer SDP拉出来,和你本地的Offer SDP对比,重点看m-line的顺序。比如Offer里是m=video在前、m=audio在后,那Answer也必须严格保持这个顺序,不能调换。 - 第二步:修改FreeSWITCH配置(优先方案)
给FreeSWITCH加个配置,让它严格遵循Offer的媒体行顺序生成Answer:
在FreeSWITCH的vars.xml文件里添加一行,或者在对应的拨号计划里设置:
这个参数会强制FreeSWITCH不调整媒体行的顺序,完全按照Offer的结构来生成Answer。<X-PRE-PROCESS cmd="set" data="rtp_keep_media_order=true"/> - 第三步:应急兼容方案(不推荐)
如果暂时改不了FreeSWITCH配置,也可以在Android WebRTC端做临时处理:收到Answer SDP后,手动调整m-line的顺序,让它和本地发送的Offer顺序完全一致,再传给PeerConnection。不过这种方法容易引发其他兼容性问题,还是优先调整FreeSWITCH配置更稳妥。
验证方法
修改配置后,重新发起呼叫,打印或抓包查看Answer SDP,确认m-line的顺序和Offer完全一致,比如Offer里是m=video→m=audio,Answer也必须是这个顺序,这样WebRTC就不会再报错了。
内容的提问来源于stack exchange,提问作者fldy
相关产品推荐
相关产品推荐

