Failed to set remote answer sdp: The order of m-lines in answer doesn't match order in offer

在设置setRemoteDescription时可能会出现Failed to set remote answer sdp: The order of m-lines in answer doesn’t match order in offer. Rejecting answer.这个问题。

大概说一下sdp:

m-lines:sdp中媒体描述,比如video、audio,可能有多个。
媒体描述(m=)后面可以跟任意数量的 a= 字段,对媒体描述进行扩展。
具体可以自行搜索WebRTC sdp 协议

出现这问题的原因可能是:

1、offer sdp中m=xxx和answer sdp中m=xxx顺序不对,大概意思就是 offer sdp 中比如第一个顺序是m=video,但是answer sdp 中第一个是m=audio
2、offer sdp中m=xxx和answer sdp中m=xxx数量不一样或不一致。

第二种情况不做过多阐述,可以很直接的看出来。
重点看一下第一种情况:

offer sdp answer sdp
这里就可以看出来在offer sdpanser sdpm=videom=video 是反的。所以要调换一下answer sdpm=videom=video 的顺序,保证和 answer sdp 一致。

调换时,不能单调换 m= 这一行,一段完整的是一个 m= 开始,到另一个 m= 开始(或结束)才是一个完整的。

贴一下示例代码:

/*** 转换AnswerSdp* @param offerSdp offerSdp:创建offer时生成的sdp* @param answerSdp answerSdp:网络请求srs服务器返回的sdp* @return 转换后的AnswerSdp*/
private fun convertAnswerSdp(offerSdp: String, answerSdp: String?): String {if (answerSdp.isNullOrBlank()){return ""}val indexOfOfferVideo = offerSdp.indexOf("m=video")val indexOfOfferAudio = offerSdp.indexOf("m=audio")if (indexOfOfferVideo == -1 || indexOfOfferAudio == -1) {return answerSdp}val indexOfAnswerVideo = answerSdp.indexOf("m=video")val indexOfAnswerAudio = answerSdp.indexOf("m=audio")if (indexOfAnswerVideo == -1 || indexOfAnswerAudio == -1) {return answerSdp}val isFirstOfferVideo = indexOfOfferVideo < indexOfOfferAudioval isFirstAnswerVideo = indexOfAnswerVideo < indexOfAnswerAudioreturn if (isFirstOfferVideo == isFirstAnswerVideo) {//顺序一致answerSdp} else {//需要调换顺序buildString {append(answerSdp.substring(0, indexOfAnswerVideo.coerceAtMost(indexOfAnswerAudio)))append(answerSdp.substring(indexOfAnswerVideo.coerceAtLeast(indexOfOfferVideo),answerSdp.length))append(answerSdp.substring(indexOfAnswerVideo.coerceAtMost(indexOfAnswerAudio),indexOfAnswerVideo.coerceAtLeast(indexOfOfferVideo)))}}
}

这里提一下,addTransceiver() 调用顺序会影响到生成sdp信息中video、audio信息顺序,如果用到addTransceiver(),调整调用顺序应该也可以解决这个问题。

如有错误欢迎指正。

WebRTC-Failed to set remote answer sdp: The order of m-lines in answer doesn‘t match order in offer.相关推荐

  1. WebRTC错误[1]Failed to set remote answer sdp: Called in wrong state: stable

    WebRTC错误[1]Failed to set remote answer sdp: Called in wrong state: stable 程序之美 WebRTC是近年来发展比较好的开源代码集 ...

  2. WebRTC[7]-Failed to set remote offer sdp: Called with SDP without DTLS fingerprint

    目录 问题 解决 Java: OC: C++: JS: 问题 WebRTC音视频通道建立的前提是完成SDP信息的交换,前端时间遇到了一个SDP信息交换失败的问题,非常具有代表性,今天周末特意整理了这篇 ...

  3. vmware Failed to initialize remote display subsystem

    通常,我们在安装vmware时,程序会在操作系统中新建一个账户"__vmware_user__".而这个账户,千万不要删除.删除则会产生一个错误"Failed to in ...

  4. Weblogic - Failed to bind remote object 错误解决方法

    环境 Solaris 10 Enterprise Weblogic 9.2.1.0 一.错误解决 今天上午,QA测试一同事的应用时,在建立JDBC连接池并绑定到JNDI时出错,弄了许久,同事和QA都没 ...

  5. bubbo调用Failed to invoke remote method异常解决

    bubbo调用服务异常: com.alibaba.dubbo.rpc.RpcException: Failed to invoke remote method: getPlanFlowInfo, pr ...

  6. com.alibaba.dubbo.rpc.RpcException: Failed to invoke remote method解决方法

    com.alibaba.dubbo.rpc.RpcException: Failed to invoke remote method解决方法 参考文章: (1)com.alibaba.dubbo.rp ...

  7. 【错误日志dubbo】Failed to invoke remote method: sayHello, provider:dubbo://192.168.2.xxx

    找不到zookeeper register中的方法 原因:使用了本地tomcat8 解决:在provider和consumer的pom.xml中添加tomcat7plugin maven启动 问题结局 ...

  8. fatal: Authentication failed for ’your remote repertory'

    周末不务正业的考完试,今天闲下来玩玩微信小程序开发.依照官方文档一步一步走下来,不算太难,有兴趣又没接触过的人可以试试. 我使用的是企鹅提供的 Tgit 来做代码托管,基本用法和 github 差不多 ...

  9. Commit failed with error: pathspec 'src/main/java/com/leo/demo/juctest/test.java' did not match any

    Git 提交报错:Commit failed with error: pathspec 'src/main/java/com/leo/demo/juctest/test.java' did not m ...

最新文章

  1. Python3快速入门(五)——Python3函数
  2. 如何提高.NET的性能 ?
  3. C语言入门水题总结2
  4. 意见簿---在批评中成长
  5. python和ui设计哪个更好_Python主流IDE对比:Eric VS. PyCharm
  6. java json传值到前台_json前后台传值
  7. 数据库中的左连接和右连接的区别
  8. MATLAB信号处理——信号与系统的分析基础(4)
  9. Insyde H2OFFT cannot load the driver 解决办法
  10. 51单片机~蜂鸣器,数码管的使用
  11. Unity:骨骼动画
  12. linux NetworkManage和network冲突问题
  13. 人工智能必备数学基础--精华笔记
  14. 打开dll文件时模块加载失败,请确保二进制存储在指定的路径中,或者调试它以检查该二进制或相关的.DLL文件是否有问题
  15. 梅克尔工作室-赵一帆-鸿蒙笔记4
  16. 小米电视4A升级桌面太卡怎么办
  17. html中输出语句怎么写,javascript输出语句有哪些
  18. PMSG并网直流微网 外环采用电压环,稳定直流母线电压,电流采用电流环
  19. MuseScore入门教程(四、保存与发布)
  20. 内存好日子又到头了,DDR3/DDR4要涨价

热门文章

  1. perl 常用模块使用例子
  2. 轻松的玩转Docker的15个小技巧
  3. 怎样建立产品体系?(三)- 什么是产品?
  4. Bootstrap 标签 label
  5. PCIE ARI技术
  6. 同是天涯沦落人,相逢何必曾相识——python字符串操作
  7. openEuler 嵌入式构建
  8. 1、IOS开发--iPad之仿制QQ空间(登录界面搭建+登录逻辑实现)
  9. 家乐福等盈利模式 遭质疑 可能影响社会稳定
  10. 设计模式学习(十一):Builder建造者模式