当前位置:网站首页>VOIP使用单端口替换动态端口池进行UDP通信
VOIP使用单端口替换动态端口池进行UDP通信
2022-08-09 01:15:00 【fdsafwagdagadg6576】
做过VOIP的同学都知道,基于UDP实现RTP包收发时需要进行SDP协商或者ICE协商,通常服务器都是用一个端口池来和客户端进行RTP包的转发,而当前的网络环境下,开放端口池给运维带来了维护的风险,也给部分代理场景下带来了实现的复杂度,所以如果使用一个端口用来做媒体数据包的转发,那带来了极大的便利;
以WebRTC的服务器Janus为例,主要需要修改libnice返回的端口配置;以RtpProxy的实现为例,修改SIP协商时,始终返回固定端口给对方,注意需要关闭O_NONBLOCK属性:
1、rtpp_create_listener方法中,原来是通过在端口池中随机选择一个可用的端口,现在只需要返回固定端口就可以了:
1 2 3 4 5 6 |
|
2、设置端口复用属性:
1 2 3 4 |
|
3、收到第一个RTP包时,调用accept方法,在内核中生成对方IP/端口和fd句柄之间的映射关系,注意,调用accept方法后,不能再使用recvfrom 或者 sendto 方法发送数据包,替换为recv/send方法,如使用这两个接口,则目的地址只能为NULL:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
|
经过验证,在高内核版本上,单端口复用会出现ICE连接失败的现象,只能依靠一个端口监听,然后通过ICE连接标识做多用户分发!

--
补充更新-2021-04-30
这种单端口的实现受限于操作系统内核句柄和客户端的分发实现,可能存在数据混乱的情况,只能作为一个思路而已,更好的单端口实现还是需要在协议报文中识别是不同的用户,然后分发给不同的组或者目标;
边栏推荐
猜你喜欢

全文翻译:EDPB 基于设计和默认的数据保护指南

Proe/Creo智能硬件产品结构设计要点「干货分享」

makefile file compilation

Use Ehcache distributed cache to easily create commercial-grade high-concurrency, high-performance API interfaces!

猿辅导联合多方专家共议新课标:语文将更强调“实践性”

《LC刷题总结》——贪心

【学习-目标检测】目标检测之—FPN+Cascade+Libra

5-3 Seaborn 分布绘图

Transformer前言:self-attention与Multi-Headed Attention的详细理解

STM32H750VBT6 Keil5 error :flash download failed cortex-M7
随机推荐
【.NET 6】开发minimal api以及依赖注入的实现和代码演示
d初化模板构造器
网络安全基础-基本dos命令(一)
Mysql高级篇(逻辑架构和存储引擎)
远程控制项目遇到的bug
易周金融分析 | 互联网系小贷平台密集增资;上半年银行理财子公司综合评价指数发布
轻量化网络ChannelNet--channel-wize Conv在channel维度卷积
等到中心化的平台不再,衍生于这个平台的一切都将化作泡影
Use jdbc to handle MySQL's utf8mb4 character set (transfer)
TP测试查询数据库字段为null或空的字段
Observer pattern
OIDC 思维导图
4-5 Matplotlib库 散点图
LeetCode每日一题:搜索插入位置 (均1200道)方法:二分查找
《LC刷题总结》—— 二叉树
Qt中QFile、QByteArray QDataStream和QTextStream区别
【学习-目标检测】目标检测之—FPN+Cascade+Libra
Wireshark抓包工具
tf.pad()--填充操作
Oracle最后一个商用免费版本JDK1.8.202