WebRTC-Failed to set remote answer sdp: The order of m-lines in answer doesn‘t match order in offer.
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 sdp 和 anser sdp 中 m=video 和 m=video 是反的。所以要调换一下answer sdp 中 m=video 和 m=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.相关推荐
- 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是近年来发展比较好的开源代码集 ...
- WebRTC[7]-Failed to set remote offer sdp: Called with SDP without DTLS fingerprint
目录 问题 解决 Java: OC: C++: JS: 问题 WebRTC音视频通道建立的前提是完成SDP信息的交换,前端时间遇到了一个SDP信息交换失败的问题,非常具有代表性,今天周末特意整理了这篇 ...
- vmware Failed to initialize remote display subsystem
通常,我们在安装vmware时,程序会在操作系统中新建一个账户"__vmware_user__".而这个账户,千万不要删除.删除则会产生一个错误"Failed to in ...
- Weblogic - Failed to bind remote object 错误解决方法
环境 Solaris 10 Enterprise Weblogic 9.2.1.0 一.错误解决 今天上午,QA测试一同事的应用时,在建立JDBC连接池并绑定到JNDI时出错,弄了许久,同事和QA都没 ...
- bubbo调用Failed to invoke remote method异常解决
bubbo调用服务异常: com.alibaba.dubbo.rpc.RpcException: Failed to invoke remote method: getPlanFlowInfo, pr ...
- 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 ...
- 【错误日志dubbo】Failed to invoke remote method: sayHello, provider:dubbo://192.168.2.xxx
找不到zookeeper register中的方法 原因:使用了本地tomcat8 解决:在provider和consumer的pom.xml中添加tomcat7plugin maven启动 问题结局 ...
- fatal: Authentication failed for ’your remote repertory'
周末不务正业的考完试,今天闲下来玩玩微信小程序开发.依照官方文档一步一步走下来,不算太难,有兴趣又没接触过的人可以试试. 我使用的是企鹅提供的 Tgit 来做代码托管,基本用法和 github 差不多 ...
- 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 ...
最新文章
- Python3快速入门(五)——Python3函数
- 如何提高.NET的性能 ?
- C语言入门水题总结2
- 意见簿---在批评中成长
- python和ui设计哪个更好_Python主流IDE对比:Eric VS. PyCharm
- java json传值到前台_json前后台传值
- 数据库中的左连接和右连接的区别
- MATLAB信号处理——信号与系统的分析基础(4)
- Insyde H2OFFT cannot load the driver 解决办法
- 51单片机~蜂鸣器,数码管的使用
- Unity:骨骼动画
- linux NetworkManage和network冲突问题
- 人工智能必备数学基础--精华笔记
- 打开dll文件时模块加载失败,请确保二进制存储在指定的路径中,或者调试它以检查该二进制或相关的.DLL文件是否有问题
- 梅克尔工作室-赵一帆-鸿蒙笔记4
- 小米电视4A升级桌面太卡怎么办
- html中输出语句怎么写,javascript输出语句有哪些
- PMSG并网直流微网 外环采用电压环,稳定直流母线电压,电流采用电流环
- MuseScore入门教程(四、保存与发布)
- 内存好日子又到头了,DDR3/DDR4要涨价