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

Deepstream 使用 REST API 动态管理视频流

在 DeepStream 的示例程序中,deepstream-server-app是一个很有代表性的样例。它的核心目的,是演示如何通过nvmultiurisrcbin使用 REST API 动态管理视频流。

官方 README 里有一句话非常关键:

The deepstream-server-app uses nvmultiurisrcbin to demonstrate REST API server functionality.

也就是说,这个 sample 并不是单纯展示一个固定输入的视频分析 pipeline,而是展示一个可以在运行时通过 HTTP 请求添加、删除、配置视频流的 DeepStream 服务。

nvmultiurisrcbin 是什么?

nvmultiurisrcbin是 DeepStream 提供的一个 GStreamer Bin。它把几个常用能力封装在一起:

  • nvurisrcbin:负责处理单路 URI 输入,比如本地文件、RTSP 流等。
  • nvstreammux:负责把多路输入 batch 到一起。
  • nvds_rest_server:提供 REST API 服务,用于运行时控制 pipeline。

因此,使用nvmultiurisrcbin后,应用不需要自己手动创建每一路 source bin,也不需要自己处理 streammux sink pad 的申请和释放。应用只需要配置nvmultiurisrcbin,然后通过 REST API 动态添加或删除 stream。

deepstream-server-app 的整体 pipeline

这个 sample 的主程序在:

apps/deepstream/sample_apps/deepstream-server/deepstream_server_app.cpp

默认 pipeline 大致是:

nvmultiurisrcbin

-> queue

-> nvdspreprocess

-> nvinfer / nvinferserver

-> nvdsanalytics / identity

-> nvdslogger

-> nvmultistreamtiler

-> nvvideoconvert

-> nvdsosd

-> sink

其中最重要的入口就是nvmultiurisrcbin。它负责输出已经 batch 好的 buffer,后面的推理、分析、显示都和普通 DeepStream 多路 pipeline 类似。

REST Server 默认运行在 nvmultiurisrcbin 内部

配置文件是:

apps/deepstream/sample_apps/deepstream-server/dsserver_config.yml

默认配置里有:

rest-server:

within_multiurisrcbin: 1

这表示 REST server 由nvmultiurisrcbin自己内部启动和管理。同时,multiurisrcbin配置里指定了监听端口、初始输入源、batch size、mux 分辨率等:

multiurisrcbin:

uri-list: file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4

port: 9000

live-source: 1

width: 1920

height: 1080

batched-push-timeout: 33333

max-batch-size: 8

drop-pipeline-eos: 1

这里的port: 9000表示 REST API 服务监听在localhost:9000

通过 REST API 动态添加视频流

sample README 中给出的添加 stream 请求如下:

curl -XPOST 'http://localhost:9000/api/v1/stream/add' -d '{

"key": "sensor",

"value": {

"camera_id": "uniqueSensorID1",

"camera_name": "front_door",

"camera_url": "file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4",

"change": "camera_add",

"metadata": {

"resolution": "1920 x1080",

"codec": "h264",

"framerate": 30

}

},

"headers": {

"source": "vst",

"created_at": "2021-06-01T14:34:13.417Z"

}

}'

其中真正关键的字段是:

  • camera_id:唯一的 sensor ID。
  • camera_url:视频源地址,可以是本地文件,也可以是 RTSP。
  • change:动作类型,比如camera_add

nvmultiurisrcbin内部,只要change字符串包含addstreaming,就会走添加 source 的逻辑。

也就是说,source 类型不是由camera_addcamera_streaming决定的,而是由camera_url决定的:

file:///... -> 本地文件

rtsp://... -> RTSP 实时流

http://... -> HTTP URL

通过 REST API 删除视频流

删除 stream 的请求如下:

curl -XPOST 'http://localhost:9000/api/v1/stream/remove' -d '{

"key": "sensor",

"value": {

"camera_id": "uniqueSensorID1",

"camera_name": "front_door",

"camera_url": "file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4",

"change": "camera_remove"

}

}'

删除时,nvmultiurisrcbin会根据camera_idcamera_url查找对应的 source,然后调用内部 creator API 移除该 source。

这个 sample 还演示了什么?

除了添加和删除 stream,deepstream-server-app还展示了很多运行时控制能力,例如:

  • 更新 ROI。
  • 修改 decoder 的drop-frame-intervalskip-frames
  • 修改nvinfer/nvinferserver的 interval。
  • 修改 encoder 的 bitrate、force-idr、force-intra。
  • 修改nvstreammuxbatched-push-timeout
  • 修改nvvideoconvert的 crop、flip、interpolation。
  • 修改nvdsosd的 process mode。
  • 查询 stream info、metrics、liveness、readiness。
  • 通过 REST API 让应用退出。

这些能力说明deepstream-server-app不只是一个视频分析 demo,而是一个“服务化 DeepStream pipeline”的参考实现。

两种 REST Server 模式

这个 sample 支持两种模式。

第一种是默认模式:

rest-server:

within_multiurisrcbin: 1

REST server 在nvmultiurisrcbin内部运行。这也是官方更推荐的简单用法。

第二种是:

rest-server:

within_multiurisrcbin: 0

这时应用自己启动nvds_rest_server,并使用:

rest_server_callbacks.cpp

里的 callback 来处理 REST 请求。

需要注意的是,这个 app-owned REST callback 版本里,stream add 只检查change是否包含add,不像nvmultiurisrcbin内部实现那样同时接受streaming。所以默认模式下camera_streaming可以添加流,但 app-owned callback 模式下可能不行。

总结

deepstream-server-app展示的是一种更接近生产服务的 DeepStream 使用方式:pipeline 启动后,不再局限于固定输入源,而是可以通过 REST API 动态添加、删除和配置视频流。

nvmultiurisrcbin是这个能力的核心。它把 source 管理、streammux batch、REST API 服务封装在一起,让应用层可以专注于后续的推理、分析、显示或消息输出逻辑。

如果你想构建一个支持多路摄像头动态接入的 DeepStream 服务,deepstream-server-app是最值得先读的 sample。

http://www.rkmt.cn/news/1421421.html

相关文章:

  • 基于ESP32与Blynk的智能花盆:物联网植物健康监测系统实践
  • 7个核心功能深度解析:如何用SPT-AKI存档编辑器重塑你的塔科夫单机体验
  • 2026年宁夏KTV装修深度横评:从模块化快装到沉浸式体验的完整避坑详解 - 年度推荐企业名录
  • PowerMem 记忆系统的遗忘设计,从神经元到代码工程 (十四)
  • 2026年数字人制作公司推荐:综合实力较可靠的10家AI数字人服务商 - 每日行业榜
  • LibreVNA开源矢量网络分析仪:从入门到实战的完整射频测量指南
  • 终极AI语音克隆指南:5分钟快速上手RVC-WebUI语音转换工具
  • Node.js构建AI Agent全流程详解
  • 基于Arduino与MQTT的触摸屏辅助交互系统:从物联网架构到机械臂实现
  • 两种筛
  • 如何高效使用Xcode开发者磁盘映像:iOS开发的终极解决方案
  • Arduino IDE配置ESP32/ESP8266开发环境完整指南
  • 提示词工程:四大支柱与实战技巧,让ChatGPT从聊天AI变智能副驾
  • 2026五月精选:石景山靠谱的空气检测公司 - LYL仔仔
  • 在武汉,让闲置黄金体面“回家”:一份关于信任与价值的回收指南 - 奢侈品回收测评
  • 线性规划建模不靠猜:Claude辅助下的数学符号→自然语言→标准LP格式自动转换(已开源v0.9.3校验工具)
  • 基于XIAO SAMD21的便携式土壤湿度监测仪设计与实现
  • 如何快速解决硬件散热问题:终极Windows风扇控制指南
  • 用so-vits-svc 4.0训练你自己的AI歌声模型:从干声提取、数据清洗到效果调优全流程
  • 西藏本地靠谱旅行社排行:15年资历纯玩定制赛道盘点 - 互联网科技品牌测评
  • # 2026年宁夏KTV模块化装修深度指南:银川包厢设计、音响灯光改装、沉浸式KTV快装避坑手册 - 年度推荐企业名录
  • 2026年国产涡街流量计十大品牌权威测评:技术实力、量化指标与真实案例全景解析 - 仪表品牌榜
  • 20252917 2025-2026-2 《网络攻防实践》实践十报告
  • Kali Linux 2024.2 最新版安装后,第一件事为什么是换源?保姆级阿里云镜像配置教程
  • 2026贵州包车哪家好?实测10大机构,贵州中旅花果园第一营业部凭实力登顶 - 深度智识库
  • 【2026最新】PCL2启动失败/闪退怎么办?三种方法彻底修复,附日志定位流程图
  • Unity开发避坑:为什么你的JsonUtility序列化总是失败?从MonoBehaviour到普通类的完整指南
  • 三步解锁QQ音乐加密音频:qmcflac2mp3终极转换指南
  • 2026年主流抗污瓷砖排行:性能与场景适配综合盘点 - 互联网科技品牌测评
  • 怎么判断传递的是:函数引用还是函数的返回值?