webrtc基于DTLS的端口复用技术
DTLS协议:
DTLS(Datagram Transport Layer Security)数据包安全传输协议,用于在不可靠的数据包传输协议上(如UDP)提供数据的安全传输。
UDP多路复用:
一个UDP多路复用,被用来处理共享同一个UDP端口的多个并发的UDT连接。类似同一个tcp port上创建多个socket connection.
UDP多路复用,根据包头的目标Socket ID,将接收到的不同的UDT包分发给相应 的UDT Socket。
换言之,多个UDT Socket绑定到不同的UDP端口时,必然被各自的UDP多路复用 分发处理。
一个UDP多路复用维护两个队列:发送队列和接收队列。
发送队列包含Socket信息的链表。链表节点的Socket必须包含至少一个计划发送的 信息包。Sockets按照下一个信息包发送的时间进行排序。
发送队列维护一个高性能的计时器。当队列的Socket包发送时间到时,队列头部的 Socket的包被发送,并且头部的Socket从队列中删除。如果头部Socket包含多个计划信 息包时,该头部Socket将被重新插入到发送队列里。
接收队列读取输入的信息包,并分发信息包到相应的UDT Socket。如果目标Socket ID 是0,信息包将被分发给当前正在监听的Socket,或者被分发给会合的连接 (Rendezvous connection)。
和发送队列相似,接收队列也包含等待接收信息包的Socket信息链表。如果队列的任 意一个Socket的SYN间隔时间到时,接收队列会检测该Socket的“任意一个定时器”(参 见定时器)是否期满。
ICE其实不算一个传输协议,它更像是标识协议,一般指Binding Request和Response,会在里面带有IP和优先级信息,来标识地址和信道的信息,用于多条信道的选择,比如4G和WiFi都很好时优先选谁。
还会用作会话的心跳,客户端会一直发送这个消息。因此ICE对于负载均衡没有作用,但是它可以用来标识会话,和QUIC的ConnectionID作用类似,因此在经过Load Balance时可以起到识别会话的作用,特别是客户端的网络切换时。
而TURN协议其实是对Cloud Native非常不友好的协议,因为它是需要分配一系列的端口,用端口来区分用户,这种是在私有网络中的做法,假设端口无限,而公有云上端口往往是受限的,比如需要经过Load Balance这个系统时,端口就是有限的。
mediasoup支持:
* Multi-stream: multiple audio/video streams over a single ICE + DTLS transport.
* ICE / DTLS / RTP / RTCP over UDP and TCP.
从srs的配置文件可以更为清晰地看到udp端口复用规则。
#############################################################################################
# WebRTC server section
#############################################################################################
rtc_server {
# The udp listen port, we will reuse it for connections.
# Overwrite by env SRS_RTC_SERVER_LISTEN
# default: 8000
listen 8000;
# For WebRTC over TCP directly, not TURN, see https://github.com/ossrs/srs/issues/2852
# Some network does not support UDP, or not very well, so we use TCP like HTTP/80 port for firewall traversing.
tcp {
# Whether enable WebRTC over TCP.
# Overwrite by env SRS_RTC_SERVER_TCP_ENABLED
# Default: off
enabled off;
# The TCP listen port for WebRTC. Highly recommend is some normally used ports, such as TCP/80, TCP/443,
# TCP/8000, TCP/8080 etc. However SRS default to TCP/8000 corresponding to UDP/8000.
# Overwrite by env SRS_RTC_SERVER_TCP_LISTEN
# Default: 8000
listen 8000;
}
# The protocol for candidate to use, it can be:
# udp Generate UDP candidates. Note that UDP server is always enabled for WebRTC.
# tcp Generate TCP candidates. Fail if rtc_server.tcp(WebRTC over TCP) is disabled.
# all Generate UDP+TCP candidates. Ignore if rtc_server.tcp(WebRTC over TCP) is disabled.
# Note that if both are connected, we will use the first connected(DTLS done) one.
# Overwrite by env SRS_RTC_SERVER_PROTOCOL
# Default: udp
protocol udp; //缺省用udp作为webrtc transport
# We listen multiple times at the same port, by REUSEPORT, to increase the UDP queue.
# Note that you can set to 1 and increase the system UDP buffer size by net.core.rmem_max
# and net.core.rmem_default or just increase this to get larger UDP recv and send buffer.
# Overwrite by env SRS_RTC_SERVER_REUSEPORT
# default: 1
reuseport 1; //启用udp端口复用。
}
mediasoup对udp端口复用配置如下:
webRtcTransport: {
// listenIps: [LISTEN_IP],
enableUdp: true, //配置为all(tcp+udp)
enableTcp: true,
preferUdp: true, //default用udp
preferTcp: false
},
相关文章:
webrtc基于DTLS的端口复用技术
DTLS协议: DTLS(Datagram Transport Layer Security)数据包安全传输协议,用于在不可靠的数据包传输协议上(如UDP)提供数据的安全传输。 UDP多路复用: 一个UDP多路复用,被用来处理共享同一个UDP端口的多个并发的UDT连接。类似同一个tcp port上创建多个socket connec…...
【2024秋招】2023-9-20 度小满信贷系统平台部二面
1 面试官的部门介绍 我们部门是信贷系统平台部,主要是为度小满做一个服务,你应该也接触过信用卡,跟这种差不多,用户可以打进我们的系统申请一个额度,整个部门的规模大概是400-500人左右,我个人来自平台数据…...
【Django 04】Serialization 序列化的高级使用
序列化器 serializers 序列化器的作用 序列化将 queryset 和 instance 转换为 json/xml/yaml 返回给前端 反序列化与序列化则相反 定义序列化器 定义类,继承自 Serializer 通常新建一个 serializers.py 文件 撰写序列化内容 suah as 目前只支持 read_only 只…...
【前端学习】—变量类型和计算(五)
【前端学习】—变量类型和计算(五) 一、JS中使用typeof能得到哪些类型 字符串(String):表示文本数据,用单引号或双引号括起来。 数字(Number):表示数值数据,包括整数和浮点数。 布尔值(Boolean):表示真或假(true或false)的逻辑值。 空值(Null):表示一个空…...
QT中窗口自绘制效果展示
项目中需要使用QT进行窗口自绘,前期先做一下技术探索,参考相关资料代码熟悉流程。本着代码是最好的老师原则,在此记录一下。 目录 1.运行效果 2.代码结构 3.具体代码 1.运行效果 2.代码结构 3.具体代码 myspeed.pro QT core gui…...
Android Studio 直接获取Spinner的值
最近做一个小demo 使用Spinner下拉框来让用户选择地区、周数(第1-12周) 然后参考了一下别人的文章 这里引用这位博主博文: AndroidStudio使用spinner控件并添加监听(极简)_安卓spinner监听事件_天王老子来了我也不…...
渗透测试工具(3)Burpsuite
笔记目录 渗透测试工具(1)wireshark渗透测试工具(2)Nmap渗透测试工具(3)Burpsuite 1.简介 是Web应用程序测试,请求的拦截和修改,扫描web应用程序漏洞,以暴力破解登陆表单,执行会话令牌等多种的随机性检查。 (1)模块介绍 ①Intercept:用于显示和修改Ht…...
大数据之LibrA数据库系统上下电管理
系统上电 操作场景 系统管理员进行例行维护停机后需要重新启动服务器与FusionInsight LibrA集群。如果安装双机Manager,上电后HA将确定主备管理节点。系统启动完成后需要启动依赖集群运行的上层业务。 对系统的影响 系统上电完成以前集群不可用。 前提条件 获…...
Node.js、Vue的安装与使用(Linux OS)
Vue的安装与使用(Linux OS) Node.js的安装Vue的安装Vue的使用 操作系统:Ubuntu 20.04 LTS Node.js的安装 安装Node.js Node.js官方下载地址 1.选择合适的系统架构(可通过uname -m查看)版本安装 2.下载文件为tar.xz格…...
SparkSQL入门
概述 两种模式 Spark on Hive: 语法是Spark SQL语法,实际上是在IDEA上编写java叠加SQL的代码。 Hive on Spark: 只是替换了Hadoop的MR,改为了Spark的计算引擎。 发展历史 RDD > DataFrame > DataSet: 都有惰性机制,遇…...
AC修炼计划(AtCoder Regular Contest 167)
传送门:AtCoder Regular Contest 167 - AtCoder 再次感谢樱雪喵大佬的题解,讲的很详细,Orz。 大佬的博客链接如下:Atcoder Regular Contest 167 - 樱雪喵 - 博客园 (cnblogs.com) 第一题很签到,就省略掉了。 第二题…...
暄桐四阶课程「自在行草」学习装备指南
在2011年,暄桐成立的最初,课程便是面向零基础的成年人设计的。在十余年的教学实践中,暄桐教室为同学们提供了一种系统、有趣、扎实,并可持续进阶的学习可能。许多同学都是在来到暄桐以后,才第一次拿起毛笔,…...
vue3 列表页开发【选择展示列】功能
目录 背景描述: 开发流程: 详细开发流程: 总结: 背景描述: 这个功能是基于之前写的 封装列表页 的功能继续写的,加了一个选择展示列的功能,可以随时控制表格里展示那些列的数据…...
uniapp——自定义组件插槽及使用
案例样式 自定义组件pageBox.vue <template><view><view class"bgColor" :style"{ height: bgHeight rpx }"></view><view class"main"><!-- 主要内容放这里 --><slot></slot></view>&…...
微信native-v3版支付对接流程及demo
1.将p12证书转为pem证书,得到商户私钥 openssl pkcs12 -in apiclient_cert.p12 -out apiclient_cert.pem -nodes 密码是:商户id 2.将获取到的apiclient_cert.pem证书,复制出这一块内容,其他的不要 3.下载这个工具包 https://gi…...
租用服务器后需要注意什么
租用服务器后需要注意什么 1、从IDC服务商中接收到服务器时,需要对服务器的各项性能进行测试确认,并做好记录以便对服务器的性能做到心中有数。 2、在服务器租用交接时,要了解服务器的安全设置情况,对服务器安全技术方面不了解的…...
【公众号开发】图像文字识别 · 模板消息推送 · 素材管理 · 带参数二维码的生成与事件的处理
【公众号开发】(4) 文章目录 【公众号开发】(4)1. 图像文字识别功能1.1 百度AI图像文字识别接口申请1.2 查看文档学习如何调用百度AI1.3 程序开发1.3.1 导入依赖:1.3.2 公众号发来post请求格式1.3.3 对image类型的消息…...
Linux---(三)基本指令大全
前提引入:历史上先出现的键盘还是鼠标? 答案:键盘 ✨所以刚开始的时候绝对没有图形化界面,因此操作系统刚开始兴起的时候绝对没有图形化界面,因为当时没有鼠标。 ✨因为没有图形化界面,只有键盘,…...
基于selenium的pyse自动化测试框架
介绍: pyse基于selenium(webdriver)进行了简单的二次封装,比selenium所提供的方法操作更简洁。 特点: 默认使用CSS定位,同时支持多种定位方法(id\name\class\link_text\xpath\css)…...
【微服务 SpringCloudAlibaba】实用篇 · Nacos注册中心
微服务(5) 文章目录 微服务(5)1. 认识和安装Nacos2. 服务注册到nacos和拉取服务1)引入依赖2)配置nacos地址3)重启 3. 服务分级存储模型3.1 给user-service配置集群3.2 同集群优先的负载均衡 4. …...
CM311-1A刷Armbian后,是U盘运行还是写入EMMC?两种方案的详细对比与选择建议
CM311-1A刷Armbian后:U盘运行与EMMC写入的深度决策指南 1. 两种部署方式的本质差异 将Armbian系统部署在CM311-1A设备上时,技术路线的选择直接影响后续使用体验。U盘运行方案保留了原安卓系统的完整性,相当于在外部存储设备上构建了一个独立L…...
构建智能聊天机器人的核心技术架构与实践
1. 构建终极AI聊天机器人的核心思路 在当今人机交互领域,AI聊天机器人已经从简单的问答工具进化为具备复杂对话能力的智能体。一个真正优秀的聊天机器人需要融合自然语言处理、上下文理解、个性化响应和持续学习四大核心能力。我在过去三年里主导过7个不同行业的对话…...
RH850 CSIH SPI驱动避坑指南:从寄存器配置到中断处理的实战经验
RH850 CSIH SPI驱动避坑指南:从寄存器配置到中断处理的实战经验 在嵌入式开发领域,RH850系列微控制器的CSIH SPI模块因其高性能和灵活性备受工程师青睐。然而,其复杂的寄存器配置和中断处理机制常常成为项目开发中的"拦路虎"。本文…...
STK Orbit Wizard隐藏技巧:除了闪电轨道,这些特殊轨道参数你调对了吗?
STK Orbit Wizard隐藏技巧:除了闪电轨道,这些特殊轨道参数你调对了吗? 在卫星轨道设计的进阶领域,Orbit Wizard常被视为STK软件中的"魔法工具箱"。许多工程师能熟练生成闪电轨道这类标志性轨道,却对参数间的…...
单智能体 vs 多智能体:架构选型指南,90% 的效率提升不等于 17 倍的错误放大!
本文深入探讨了单智能体和多智能体架构的优劣,指出正确的架构选择应基于任务结构而非技术野心。单智能体适合紧密耦合工作,而多智能体在可并行化任务中效率高,但错误放大风险大。行业领导者 Anthropic、OpenAI 等建议从单智能体开始ÿ…...
避开这些坑!用STC15单片机做超声波测距时,定时器溢出和温度补偿到底该怎么处理?
STC15单片机超声波测距实战:定时器溢出与温度补偿的深度优化方案 当超声波测距模块在STC15F2K60S2单片机上运行时,你是否遇到过这些情况:测量数据偶尔出现异常跳变,远距离测量结果不稳定,甚至程序莫名其妙进入死循环&a…...
2026届必备的五大降AI率网站推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 有一类免费的 AI 论文工具,这些为学术写作起到了提供高效解决方案作用。这类系统…...
告别PESQ!2024年语音质量评估,我们该用什么工具?(附Python代码对比)
2024年语音质量评估工具全景指南:从PESQ到现代解决方案 在音频处理领域,语音质量评估一直是算法开发、产品优化和学术研究的关键环节。过去二十年里,PESQ(Perceptual Evaluation of Speech Quality)作为行业标准被广泛…...
告别串口助手!手把手教你用Matlab直接读取STM32的浮点数据(附完整代码)
从STM32到Matlab的无缝数据流:高效浮点传输实战指南 每次调试嵌入式系统时,最让人头疼的莫过于数据导出和分析的繁琐流程。传统方式需要经过串口助手中转、手动保存文件、再导入Matlab的冗长步骤,不仅效率低下,还容易在多次转换中…...
别再纠结Flannel和Calico了!手把手教你根据业务场景选对K8s网络插件
别再纠结Flannel和Calico了!手把手教你根据业务场景选对K8s网络插件 当你在Kubernetes生产环境中面临网络插件选择时,Flannel和Calico这两个名字总会反复出现。就像站在十字路口的旅行者,左边是平坦快捷的柏油马路,右边是功能丰富…...
