【webrtc】Chrome和Firefox在SDP协商过程中,针对localhost的不同处理

2024-04-24 09:04

本文主要是介绍【webrtc】Chrome和Firefox在SDP协商过程中,针对localhost的不同处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

内网下chrome端webrtc协商失败

现象

我有一个webrtc服务器在局域网内,使用chrome浏览器访问时,发现webrtc在做媒体协商时失败。

具体表现是,在交换sdp后,ice的状态是oniceconnectionstatechange: failed

但是换成Firefox浏览器时,媒体沟通就成功了,语音可以正常发送。

分析

对比一下两者的sdp的区别
下面是Chrome 准备的candidate

 {"candidate":"candidate:3173604209 1 udp 2113937151 e4a90cba-1bbb-4f52-a637-b19c53879494.local 53121 typ host generation 0 ufrag 8jU2 network-cost 999","sdpMid":"0","sdpMLineIndex":0,"usernameFragment":"8jU2"}

而Firefox 准备的candidate就多了

onIceCandidate:
{"candidate":"candidate:0 1 UDP 2122252543 192.168.56.1 53785 typ host","sdpMid":"0","sdpMLineIndex":0,"usernameFragment":"7565cd52"
}onIceCandidate: 
{"candidate":"candidate:2 1 UDP 2122187007 192.168.35.14 53786 typ host","sdpMid":"0","sdpMLineIndex":0,"usernameFragment":"7565cd52"
}onIceCandidate: 
{"candidate":"candidate:4 1 TCP 2105524479 192.168.56.1 9 typ host tcptype active","sdpMid":"0","sdpMLineIndex":0,"usernameFragment":"7565cd52"
} onIceCandidate: 
{"candidate":"candidate:5 1 TCP 2105458943 192.168.35.14 9 typ host tcptype active","sdpMid":"0","sdpMLineIndex":0,"usernameFragment":"7565cd52"
}

这里主要区别是似乎Chrome准备的candidate没有任何内网ip信息!

Google了一下,原来是为了Google为了解决Webrtc leaks问题(主要是因为webrtc协商过程中携带了内网信息,可能会成为安全隐患)所以在chrome中默认隐藏了。

刚才我们在chrome的candidate中看到的 e4a90cba-1bbb-4f52-a637-b19c53879494.local,就是隐藏的内网信息。那么这个xxxx.local别人怎么识别呢? 这里要提一下mDNS

什么是mDNS

mDNS(Multicast DNS,多播DNS)是一种基于DNS(域名系统)的协议,它允许局域网内的设备在没有传统DNS服务器的情况下相互发现和通信。mDNS使用组播技术,通过在局域网内发送广播消息来实现设备的发现和通信。它使用的默认端口是5353

mDNS的工作原理是,当一个设备加入到局域网中,如果它开启了mDNS服务,就会向局域网内的所有设备发送组播消息,告知自己的存在以及IP地址等信息。其他开启mDNS服务的设备接收到这些消息后,就可以响应并提供自己的信息。这样,局域网内的设备就可以通过mDNS相互发现并知道彼此的IP地址,从而实现通信。

mDNS的限制

它的本意是在访问公网时,把内网信息隐藏。 但是如果是纯内网环境,这个功能就是多此一举了。 另外,如果要其他设备支持,也必须支持mDNS才可以。

所以回到我遇到的问题,之所以chrome不可以,就是因为它使用mDNS来隐藏了自己的内网信息。而局域网中的服务器不支持mDNS,所以无法获取到它的真实地址。
而Firefox可以,是因为Firefox没有采用这种方案。

解决方案

那么如何在chrome里正常使用呢?

在chrome中输入 chrome://flags/ 然后找到Anonymize local IPs exposed by WebRTC 把它关掉,重启后就好了。
在这里插入图片描述

参考文档

https://bloggeek.me/psa-mdns-and-local-ice-candidates-are-coming/

这篇关于【webrtc】Chrome和Firefox在SDP协商过程中,针对localhost的不同处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/931315

相关文章

电脑提示xlstat4.dll丢失怎么修复? xlstat4.dll文件丢失处理办法

《电脑提示xlstat4.dll丢失怎么修复?xlstat4.dll文件丢失处理办法》长时间使用电脑,大家多少都会遇到类似dll文件丢失的情况,不过,解决这一问题其实并不复杂,下面我们就来看看xls... 在Windows操作系统中,xlstat4.dll是一个重要的动态链接库文件,通常用于支持各种应用程序

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

Golang 日志处理和正则处理的操作方法

《Golang日志处理和正则处理的操作方法》:本文主要介绍Golang日志处理和正则处理的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录1、logx日志处理1.1、logx简介1.2、日志初始化与配置1.3、常用方法1.4、配合defer

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos

Spring Boot 整合 Apache Flink 的详细过程

《SpringBoot整合ApacheFlink的详细过程》ApacheFlink是一个高性能的分布式流处理框架,而SpringBoot提供了快速构建企业级应用的能力,下面给大家介绍Spri... 目录Spring Boot 整合 Apache Flink 教程一、背景与目标二、环境准备三、创建项目 & 添

pytest+allure环境搭建+自动化实践过程

《pytest+allure环境搭建+自动化实践过程》:本文主要介绍pytest+allure环境搭建+自动化实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、pytest下载安装1.1、安装pytest1.2、检测是否安装成功二、allure下载安装2.