当前位置:网站首页>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
这种单端口的实现受限于操作系统内核句柄和客户端的分发实现,可能存在数据混乱的情况,只能作为一个思路而已,更好的单端口实现还是需要在协议报文中识别是不同的用户,然后分发给不同的组或者目标;
边栏推荐
- momerymap mmap 存储映射I/O
- [深入研究4G/5G/6G专题-55]: L3信令控制-4-软件功能与流程的切分-CU网元的信令
- 浅谈自定义应用层协议与UDP的报文结构和注意事项
- 知识图谱学习笔记——我的第一次知识图谱实践
- Sencha Touch页面跳转创建返回上一级按钮的设计思路
- Sencha Touch延迟加载模块中的小类提高程序进入每个模块时性能
- Using MySQL in Ubuntu/Linux environment: Solve the problem of com.mysql.jdbc.PacketTooBigException: Packet for query is too large
- requestAnimationFrame实现浏览器动画
- 【科研-学习-pytorch】5-boardcasting、合并分割
- The Best Open Source Web Application Firewall to Protect Your Web Applications
猜你喜欢

PostMan导入证书 添加证书

LVGL简介(基于v8.1-8.2)

基于机器学习之模型树短期负荷预测(Matlab代码实现)

EfficientNet v2网络学习记录--更小更快

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

VS中如何添加依赖的库

4-10 Matplotlib 多图布局

使用百度EasyDL实现智能垃圾箱

微信企业号开发之获取AccessToken

LeetCode每日两题01:有序数组的平方 (均1200道)方法:双指针
随机推荐
2022年中国全民健身发展白皮书
ffplay playback control
clickhouse 思维导图
4-8 Matplotlib库 雷达图
Use Ehcache distributed cache to easily create commercial-grade high-concurrency, high-performance API interfaces!
ABAP 报表中如何以二进制方式上传本地文件
Dapr学习(4)之eShopOnDapr部署(Rancher2.63&k3s)
Region Proposal Network(RPN)
谷歌翻译下载-免费谷歌翻译软件下载
4-5 Matplotlib库 散点图
gstreamer 记录
【学习-目标检测】目标检测之—FPN+Cascade+Libra
网络宽度扩充--Inception v1-v4,xception变式学习记录
Loadrunner结合Fiddler实现脚本的录制
WPF效果第一百九十四篇之伸缩面板
入门数据库Days6
Observer pattern
Docker redis master-slave replication setup, the container cannot be started?
JSON basics, transfer JSON data, and introduce four mainstream frameworks, jackson, gson, fastjson, and json-lib!
OpenSceneGraph3.5.1编译