当前位置: 首页 > news >正文

3.5 vss-performance 国标INVITE直播拉流防击穿与流状态去重源码实现

直播 INVITE 防击穿与流状态去重

试用安装包下载 | SMS | 在线演示

项目源码地址:https://github.com/openskeye/go-vss

背景

同一路实时预览可能被多个客户端同时点击,或前端重试导致重复 INVITE。若不加控制,会对设备连续发多路 INVITE、对流媒体重复start_rtp_pub,造成信令混乱与媒体资源浪费。本仓库用进程内集合做「互斥键」与「流是否已存在」判断。

项目中的做法

1.InviteRequestState:按streamName防并发击穿

video_live_invite逻辑中:

  • InviteRequestState.Contains(streamName),直接拒绝或短路后续流程;
  • 否则Add(streamName),并用defer Remove(streamName)保证退出路径释放。

同一流名在同一时刻只允许一条 INVITE 流水线,避免信令风暴。

预览请求 streamName

InviteRequestState
Contains?

拒绝/快速返回

Add + defer Remove

INVITE 流程

2.PubStreamExistsState:流已存在时跳过重复建流

发送侧在推流建立成功路径会PubStreamExistsState.Add(req.StreamName)on_pub_stop等通知里Remove。邀请逻辑里会结合流媒体查询判断是否已有 Pub,避免重复发布。

3.FetchDeviceVideoState:录像能力查询互斥

device_videos中若某设备+通道已在拉取录像列表,后续请求等待或短路,避免对同一设备并发QueryRecord打爆。

CSet 集合

互斥/去重键

streamName
直播

device+channel
录像查询

InviteRequestState

PubStreamExistsState

FetchDeviceVideoState

要点

  1. defer Remove必须覆盖错误分支:否则异常退出会永久占位,后续同流永远无法 INVITE(卡死现象)。合理使用defer,扩展时务必注意。
  2. 集合容量set.New[string](1000)等为预分配,流名极多时关注内存与清理是否及时(依赖bye/stop_stream/on_pub_stop)。
  3. 多实例部署:上述集合仅在单进程内有效;多 VSS 实例前需负载均衡粘性分布式锁/Redis,否则防重失效。

相关代码路径

  • core/app/sev/vss/internal/logic/http/gbs/video_live_invite.go
  • core/app/sev/vss/internal/logic/gbs_proc/send_sip_proc.goPubStreamExistsState.Add
  • core/app/sev/vss/internal/logic/http/notify/on_pub_stop.goRemove
  • core/app/sev/vss/internal/logic/http/base/device_videos.goFetchDeviceVideoState
http://www.cnnetsun.cn/news/2040673.html

相关文章:

  • 从业务视角看SAP EC-PCA配置:利润中心会计如何为多部门绩效考核打好数据基础?
  • Phi-3.5-mini-instruct开发者案例:免写推理代码的轻量AI服务集成实践
  • Qwen3.5-2B效果惊艳:PPT演讲稿截图的要点提炼+听众QA预判生成
  • CSS如何用Flex实现贴底Footer
  • 给生物力学新手的OpenSim保姆级指南:从解剖小白到看懂Hill肌肉模型
  • Qwen3-4B-Instruct应用场景:生物医药专利全文关键信息结构化提取
  • Java的java.lang.Thread.Builder线程构建器与虚拟线程创建的现代API
  • egergergeeert效果展示:FLUX.1-dev驱动的高清概念图生成作品集
  • Suricata规则看不懂?从一条实战HTTP规则拆解,到用Lua脚本自定义检测逻辑
  • nli-MiniLM2-L6-H768行业落地:政务公文语义一致性自动审查系统案例
  • BitNet b1.58-2B-4T应用场景:制造业BOM表解析与技术文档生成
  • 微信私域运营神器OpenClaw部署指南
  • 在RK3399上,用Qt+FFmpeg+MPP+RGA硬解RTSP流,我踩过的那些坑和优化心得
  • AI人才荒!30k月薪抢不过对手,应届生竟成企业必争之地?背后原因令人深思!
  • 面试官:聊聊Redis为什么会有哨兵?
  • Beelink SEi12迷你主机评测:i7-12650H性能与Windows 11体验
  • FLUX.1-Krea-Extracted-LoRA入门必看:BFloat16与FP16精度损失对比测试
  • 7月三星停用消息应用!美国Android 12及以上用户可选这5款替代应用
  • 2026年普通人必看!20个AI风口岗位清单,高薪进阶就靠它!
  • eEver EJ523D芯片:4Kp60视频采集与流媒体处理技术解析
  • c++ csv?_?C++处理csv文件格式的fstream与字符串分割方法详解
  • 破局科技圈“代码内卷”:文商科与非 CS 留学生的“生态位”重塑与护城河构建
  • 从FPN到RetinaNet:目标检测Backbone的演进与P3到P7的特征层设计考量
  • 连续性管理化技术中的业务影响分析恢复策略恢复计划
  • 元素周期表·素数-偶数对称大一统论证(乖乖数学)
  • 2025最权威的六大AI写作方案实际效果
  • OFA VQA镜像效果展示:教育测评图(数学应用题配图/地理等高线图)专业级理解
  • PAT乙级刷题避坑指南:避开“说反话”的栈陷阱和“成绩排名”的结构体误区
  • 深入理解 Transformer:从数据流动看模型架构
  • Qianfan-OCR效果实测:低光照手机拍摄文档→动态增强后识别准确率94.1%