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

SkeyeVSS开发心得-VSS流播放与注意事项

本文是 VSS流播放详解 的配套开发笔记。项目地址https://github.com/openskeye/go-vss1. 明确三个要点POST /api/video/stream只有一套StreamResp外壳内里走哪路完全由Device.AccessProtocol决定。流媒体是否拉起来不都是StartRelyPull的成功协议 4GB28181在Invite 成功后就返回不会再走文件末尾的StartRelyPull没画面需要去查SIP MS Pub。streamName是全局会话键回放带PlaybackCount后缀、QuerystreamName可覆盖默认值StopMultiMSStream / Invite 防重入 / 快照都围着他的规则改命名规则要谨慎。2. 时间参数直播 / 回放// 回放 if req.EndAt 0 req.StartAt 0 { playType stream.PlayTypePlayback autoStopPullAfterNoOutMs 10000 }回放判定是StartAt 0 EndAt 0毫秒时间戳少一个则仍是直播流名与autoStopPullAfterNoOutMs60s vs 10s都不一致。前端只传endAt、或把秒当毫秒传表现为「以为是回放实际一直 live」Invite/拉流行为全错。联调先打印时间戳数量级。3. MS 节点VoteNode与PlayAddressMSIds投不出节点→ 直接「未设置流媒体源」与设备是否在线无关。IsDef分支非默认要GetMSConf拉端口再PlayAddress默认节点用已有msNode。MS HTTP 管理端口不通时地址数组全空客户端报「没地址」先检测curlhttp://{msAddress}的配置接口。httpsquery通过ms.New(...).WithHttps(req.Https)影响投票与播放侧 HTTPS 能力与 SIP 无关和网关TLS 终止混用时容易出错。4. 协议表协议streamUrl是否StartRelyPull排障1 流媒体源设备StreamUrlstreamUrl ! 会MS 拉流参数、RTSPTCP/UDPMediaProtocolMode→rtspMode2 RTMP 推不设等设备推一般不进StartRelyPullon_pub_start 收到了没、流名与 MS 是否一致3 ONVIF通道StreamUrl同左通道 URL 是否过期、认证、rtsp_mode4 GB28181Invite 链路透传本接口不调StartRelyPullCatalog/Invite/200 SDP/MS RTPPub见下节rtspMode注释在源码里写的是0tcp1udpMediaProtocolMode 0时置rtspMode 1UDP需要和 MS 文档对照核对别凭直觉写反了。5. GB28181stream_playcase devices.AccessProtocol_4: // GB28181协议 if playType stream.PlayTypePlayback { if err : ms.New(l.ctx, l.svcCtx).StopMultiMSStream(/* 流名前缀playback */); err ! nil { // ... } else { time.Sleep(1 * time.Second) } } if res : gbs.InviteLogic.New(...).Invite(gbs.InviteParams{ ... }); res ! nil res.Err ! nil { return res } go l.saveChannelSnapshot(streamName, res.Data) return types.HttpResponse{Data: data}回放先StopMultiMSStreamSleep 1s为的是少抢流前缀拆法依赖streamName与playType字符串改Produce规则时要连同这里一起测。成功路径Invite→ 立刻 HTTP 返回StreamResp媒体建立是异步的。通常「接口通了没画面」多半还在 SIP/MS。请参考 [5.1 信令与 SDP]、[2.4.1.1 SDP]。6.streamName覆盖 Query对齐现有会话if l.c ! nil { if v : l.c.Query(streamName); v ! { streamName v } }前端随便传streamName与Invite 里实际用的名不一致会导致Stop 停错流、快照存错键、前端播放器 404。应对约定覆盖仅用于重连同一会话与video_live_invite同源。7.StartRelyPull失败即整体失败在非 GB 分支在streamUrl ! 时调用 MS/api/ctrl/start_relay_pull任一错误直接 HTTP 错误响应。MS 离线、超时、URL 不可达、鉴权失败——现象都是业务层 4xx/5xx注意排查。8. 快照与播放解耦go saveChannelSnapshot流截图、FFmpeg、目录配置失败不影响播放接口返回成功。当看到没有缩略图就认定播放失败需要先分两条线查拉流 URL 能否播vsSaveVideoSnapshotDir/ FFMpeg 配置。9. 并发与防抖2.4.1.0第六节已讲解stream_play高频重入要考虑dt节流或前端防抖否则 GB 路径尤易出现「第二次 Invite 被拒」。10. 联调清单回放StartAt/EndAt正整数、毫秒、时区是否一致。拉流协议MediaProtocolMode需与现场 RTSPTCP/UDP一致。改stream.New().Produce规则同步测StopMultiMSStream 前缀、快照路径、前端流名。RTMP(2)确认推流已上再播别只看 HTTP 返回。11. 相关文档文档内容2.4.1.0 VSS流播放详解主流程与源码索引2.4.1.2 信令发送流水线Catalog / SendLogic5.1 开发心得-信令字段与 SDPINVITE 头与 SDP 身份

相关文章:

SkeyeVSS开发心得-VSS流播放与注意事项

本文是 VSS流播放详解 的配套开发笔记。 项目地址 https://github.com/openskeye/go-vss 1. 明确三个要点 POST /api/video/stream 只有一套 StreamResp 外壳,内里走哪路完全由 Device.AccessProtocol 决定。流媒体是否拉起来,不都是 StartRelyPull 的…...

Pixel Couplet Gen快速上手:Rust+WASM加速正则解析器性能实测报告

Pixel Couplet Gen快速上手:RustWASM加速正则解析器性能实测报告 1. 项目概览 Pixel Couplet Gen是一款融合传统春节文化与现代像素艺术风格的AI春联生成器。通过ModelScope大模型驱动,这款工具将中国传统的春联创作带入了数字时代,特别采用…...

别再死记硬背分度表了!用Python+Arduino动手复现K型热电偶测温全过程

别再死记硬背分度表了!用PythonArduino动手复现K型热电偶测温全过程 温度测量是工程实践中最基础却又最关键的环节之一。想象一下,当你需要监控3D打印机热床温度、测量自制咖啡烘焙机的内部环境,或是记录太阳能热水器的水温变化时&#xff0c…...

OpenClaw旅行规划专家:Qwen3-14b_int4_awq自动生成行程表与预订提醒

OpenClaw旅行规划专家:Qwen3-14b_int4_awq自动生成行程表与预订提醒 1. 为什么需要AI旅行规划助手 每次计划旅行时,我总会被各种琐事淹没:查天气、比价酒店、确认景点开放时间、安排交通路线……这些重复劳动既耗时又容易出错。直到上个月尝…...

intv_ai_mk11安全使用指南:敏感信息规避策略、输出内容校验方法、数据持久化提醒

intv_ai_mk11安全使用指南:敏感信息规避策略、输出内容校验方法、数据持久化提醒 1. 安全使用概述 intv_ai_mk11是一款基于Llama架构的AI对话助手,能够处理各类知识问答、文案创作和技术讨论。为确保用户数据安全和合规使用,本指南将详细介…...

学术论文利器:OpenClaw+Qwen3.5-9B自动生成LaTeX文档

学术论文利器:OpenClawQwen3.5-9B自动生成LaTeX文档 1. 为什么需要自动化论文写作工具 去年冬天,当我面对第五篇论文的修订时,突然意识到自己把80%的时间花在了重复劳动上:调整表格格式、重新绘制图表、校对参考文献编号。这种机…...

学术研究助手:OpenClaw+Gemma-3-12b-it自动化文献综述生成

学术研究助手:OpenClawGemma-3-12b-it自动化文献综述生成 1. 为什么需要自动化文献综述工具 作为一名经常需要写论文的研究生,我深刻体会到文献综述是整个研究过程中最耗时耗力的环节之一。每次开题或写新论文时,都需要花费数天甚至数周时间…...

ZLMediaKit(webrtc)在CentOS7上的高效部署与常见问题解决指南

1. 环境准备与依赖安装 在CentOS7上部署ZLMediaKit(webrtc)前,需要先搞定基础环境。我遇到过不少新手直接克隆代码就开始编译,结果被各种报错劝退。下面这些依赖就像盖房子前要打的地基,缺一不可。 1.1 更新系统与基础工具 刚装好的CentOS7就…...

【AI】可以操控鼠标的智能体

2026-04-02,以下是当前(截至2026年初)可以操作鼠标的AI智能体最新格局,分为操作系统级控制(真鼠标键盘控制)和浏览器级控制两类:第一梯队:操作系统级鼠标控制(全桌面操控…...

OpenClaw飞书机器人集成:千问3.5-9B对话触发详解

OpenClaw飞书机器人集成:千问3.5-9B对话触发详解 1. 为什么选择飞书OpenClaw的私有化方案 去年团队内部开始尝试用AI助手处理日常事务时,我们面临一个典型困境:公有云机器人虽然开箱即用,但所有对话记录和文件都要经过第三方服务…...

别只盯着PID!用STM32的PWM差速控制,让你的循迹小车转弯更稳(附源码分析)

STM32 PWM差速控制:让循迹小车转弯更稳的实战技巧 循迹小车的核心挑战之一是如何实现平滑稳定的转弯控制。许多开发者习惯性地直接套用PID算法,却忽略了更基础的PWM差速控制策略。实际上,通过精心设计的PWM占空比调整方案,完全可以…...

气动元器件选型(工业自动化场景实战指南)

1. 气动技术基础与工业自动化适配性 气动技术作为工业自动化领域的核心驱动方式之一,其本质是通过压缩空气实现能量传递。想象一下,就像我们用吸管吹动纸团一样简单直接——空压机将电动机的旋转动能转化为气压能,再通过各类阀门控制气流方向…...

公司SEO推广与关键词策略的关系是什么_公司SEO推广的长期效果如何确保

公司SEO推广与关键词策略的关系是什么_公司SEO推广的长期效果如何确保 什么是SEO推广? 我们来了解一下什么是SEO推广。SEO,全称搜索引擎优化,是通过优化网站内容和结构,提高其在搜索引擎自然排名中的位置,从而吸引更…...

从PubMed到知识库:手把手教你用Python把医学文献数据存进MySQL/CSV(含完整代码)

从PubMed到知识库:构建医学文献智能管理系统的Python实战指南 在生物医学研究领域,每天都有数以万计的新文献涌入PubMed数据库。面对如此庞大的知识海洋,研究人员常常陷入两难:如何高效获取目标文献?更重要的是&#x…...

假芯片识别与防范:工程师实战指南

1. 假芯片泛滥:半导体行业的隐秘危机最近在调试一块电路板时,我发现一个奇怪的现象:明明使用的是同型号的MCU,但部分板子的功耗异常偏高。经过一周的排查,最终发现问题出在芯片上——我们采购到了一批"套牌"…...

Cesium实战:5分钟搞定飞机轨迹飞行与流光道路效果(附完整代码)

Cesium实战:5分钟实现飞机轨迹飞行与流光道路特效 第一次接触Cesium时,我就被它强大的三维地理可视化能力震撼了。作为一个长期从事WebGIS开发的工程师,我一直在寻找能够快速实现复杂三维场景的工具。直到遇到Cesium.js,才发现原来…...

Python实战:用图论算法解决外卖骑手路径规划(VRP)问题

Python实战:用图论算法解决外卖骑手路径规划(VRP)问题 外卖配送效率直接影响用户体验和平台运营成本。当3名骑手需要处理10个订单时,如何科学分配任务并规划最优路径?本文将构建一个包含时间窗口约束的VRP模型&#xf…...

SeqGPT-560M入门指南:Web界面操作+Jupyter调试+API调用三路径并行

SeqGPT-560M入门指南:Web界面操作Jupyter调试API调用三路径并行 1. 从零开始:认识SeqGPT-560M 如果你正在寻找一个开箱即用、能快速处理中文文本分类和信息抽取的AI工具,那么SeqGPT-560M绝对值得你花十分钟了解一下。 简单来说&#xff0c…...

Unity中如何通过Shader与Bounds控制实现视锥体外物体渲染

1. 为什么需要控制视锥体外物体渲染 在Unity的默认渲染流程中,摄像机只会渲染位于视锥体(Frustum)范围内的物体,这个机制被称为视锥体剔除(Frustum Culling)。这个优化手段能显著提升渲染效率,避…...

别再让MCU直连MOSFET了!用N531搭建你的第一个栅极驱动电路(附PCB文件)

从零构建高效MOSFET驱动电路:N531实战指南 在嵌入式开发中,直接使用MCU的GPIO驱动功率MOSFET是一个常见但危险的做法。我曾亲眼见过一个智能家居项目因为这种设计导致整个控制板烧毁——MOSFET开关缓慢产生的高温不仅损坏了功率器件,还反向影…...

如何成为一名出色的SEO优化师

如何成为一名出色的SEO优化师 在当今的数字化时代,搜索引擎优化(SEO)已经成为了每个企业和个人网站获得流量和提升品牌知名度的关键手段。但是,成为一名出色的SEO优化师并非易事,需要掌握一系列专业知识和技能。本文将…...

别再只会用‘Let‘s think step by step’了:DeepSeek-R1原生思维链的实战调优指南

别再只会用‘Let‘s think step by step’了:DeepSeek-R1原生思维链的实战调优指南 当你在深夜调试一个复杂的代码生成任务时,模型突然输出了一个完全不符合预期的结果。你盯着屏幕,反复检查自己的prompt——明明已经加上了经典的"Lets …...

Python项目依赖管理:如何用pipreqs精准生成requirements.txt(附常见问题解决)

Python项目依赖管理实战:从pipreqs到高效协作的全链路优化 在Python项目开发中,依赖管理就像建筑的地基——它不显眼却决定了整个项目的稳定性。想象一下这样的场景:你花了三天时间调试一个诡异的问题,最后发现只是因为测试环境缺…...

从GIS小白到地图处理高手:我的Global Mapper V26完整安装与汉化避坑实录

从GIS小白到地图处理高手:我的Global Mapper V26完整安装与汉化避坑实录 第一次打开Global Mapper时,我被满屏的英文界面和专业术语吓退了——这大概也是许多GIS初学者共同的经历。作为一款被行业专家誉为"地理信息瑞士军刀"的软件&#xff0c…...

告别命令行!用wxPython+wxFormBuilder给Python脚本做个Windows桌面GUI界面(附完整代码)

告别命令行!用wxPythonwxFormBuilder给Python脚本做个Windows桌面GUI界面(附完整代码) 每次写完一个实用的Python脚本,比如数据爬虫、自动化工具或者数据处理程序,总会遇到一个尴尬的问题——怎么让不懂命令行的同事或…...

OpenClaw故障排查大全:千问3.5-27B接口调用常见错误解决

OpenClaw故障排查大全:千问3.5-27B接口调用常见错误解决 1. 开篇:当OpenClaw遇上千问3.5-27B 上周深夜,我的OpenClaw突然罢工了——一个原本运行良好的自动化脚本在调用千问3.5-27B模型时频繁报错。作为个人效率工具的重度用户,…...

TSMaster安全算法实战:如何用DLL快速实现SeedKey解锁(附常见错误排查)

TSMaster安全算法实战:如何用DLL快速实现Seed&Key解锁(附常见错误排查) 在汽车电子诊断领域,安全访问机制(Seed&Key)如同车辆的电子钥匙,是保护ECU数据安全的重要屏障。作为深耕诊断协议…...

BusyBox根文件系统制作避坑指南:如何让QEMU模拟的ARM板成功挂载你的第一个Linux系统

BusyBox根文件系统制作避坑指南:如何让QEMU模拟的ARM板成功挂载你的第一个Linux系统 当你在QEMU上启动一个精心编译的ARM Linux内核时,最令人沮丧的莫过于看到内核在挂载根文件系统时崩溃。作为嵌入式Linux开发的关键环节,根文件系统的构建往…...

MCP协议实战:用npx免安装部署文件系统服务的完整指南

MCP协议实战:用npx免安装部署文件系统服务的完整指南 在当今快速迭代的开发环境中,如何高效部署和管理文件系统服务成为许多开发者面临的挑战。传统方式往往需要全局安装各种工具包,不仅占用系统资源,还可能引发版本冲突。本文将带…...

MCP23017按键矩阵驱动库:嵌入式I²C GPIO扩展与中断控制

1. 项目概述MentorBitMatrizPulsadores 是一款专为 MentorBit 兼容硬件平台设计的嵌入式驱动库,核心目标是简化基于 MCP23017 IC GPIO 扩展器的按键矩阵(Keypad Matrix)控制与状态读取。该库并非从零实现底层 IC 通信协议,而是构建…...