【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

相关文章

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

PLsql Oracle 下载安装图文过程详解

《PLsqlOracle下载安装图文过程详解》PL/SQLDeveloper是一款用于开发Oracle数据库的集成开发环境,可以通过官网下载安装配置,并通过配置tnsnames.ora文件及环境变... 目录一、PL/SQL Developer 简介二、PL/SQL Developer 安装及配置详解1.下

在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

《在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程》本文介绍了在Java中使用ModelMapper库简化Shapefile属性转JavaBean的过程,对比... 目录前言一、原始的处理办法1、使用Set方法来转换2、使用构造方法转换二、基于ModelMapper

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat

本地搭建DeepSeek-R1、WebUI的完整过程及访问

《本地搭建DeepSeek-R1、WebUI的完整过程及访问》:本文主要介绍本地搭建DeepSeek-R1、WebUI的完整过程及访问的相关资料,DeepSeek-R1是一个开源的人工智能平台,主... 目录背景       搭建准备基础概念搭建过程访问对话测试总结背景       最近几年,人工智能技术