service-maker在前几个版本就推出了,DeepStream9.0做了增强:
- Added Pyservice maker support for Smart-Recording(就是实时录制码流)
如果你用过 NVIDIA DeepStream,应该很熟悉它的典型开发方式:围绕 GStreamer 元素搭建 pipeline,配置 nvstreammux、nvinfer、nvtracker、nvmsgconv、nvmsgbroker 等插件,再处理 metadata、pad、probe 和生命周期问题。它性能强,但上手成本并不低。
DeepStream Service Maker 正是为了解决这个问题而出现的。根据 NVIDIA 官方介绍,Service Maker 是构建在 DeepStream SDK 之上的高层抽象层,目标是把实时多媒体处理和 AI 推理应用的开发复杂度降下来,让开发者把更多精力放在业务逻辑上,而不是底层 GStreamer/GLib 细节上。官方文档甚至将开发时间的变化描述为"从数天缩短到数小时":What is Deepstream Service Maker。
本地 service-maker 目录也印证了这一点。它提供了 C++ 示例、Python pipeline_api 示例、Python flow_api 示例,以及一组可复用的 runtime modules,比如 FPS 测量、延迟测量、消息 metadata 注入、Smart Recording 动作、视频 feeder/receiver 等。
1. C++:把 GStreamer 封装成对象化 API
Service Maker 的 C++ API 不是让你直接操作裸 GStreamer pipeline,而是通过 Pipeline、BufferProbe、metadata observer 等对象封装常见操作。
例如本地 sources/apps/cpp/deepstream_test1_app 中,应用可以用链式方式添加元素、连接元素、挂载 probe:
Pipeline pipeline("deepstream-test1");
pipeline.add("filesrc", "src", "location", file)
.add("h264parse", "parser")
.add("nvv4l2decoder", "decoder")
.add("nvstreammux", "mux", "batch-size", 1)
.add("nvinfer", "infer", "config-file-path", CONFIG_FILE_PATH)
.link("src", "parser", "decoder")
.attach("infer", new BufferProbe("counter", new ObjectCounter))
.start()
.wait();
这种写法保留了 DeepStream 原有插件体系的能力,但减少了很多样板代码。
2. Python Pipeline API:保留控制力,同时更易写
Python pipeline_api 更像是 C++ Pipeline API 的 Python 绑定。它适合熟悉 DeepStream pipeline 结构、但希望用 Python 快速开发的人。
在 sources/apps/python/pipeline_api/deepstream_test1_app 中,示例既支持直接用代码拼 pipeline,也支持从 YAML 配置加载 pipeline。你仍然可以明确添加 filesrc、h264parse、nvv4l2decoder、nvstreammux、nvinfer、nvosdbin、sink 等元素,并手动控制 link、probe 和属性。
这类 API 的优势是控制粒度高,适合需要精细调参、接入自定义模型、调试 metadata 或复刻传统 DeepStream sample app 的场景。
3. Python Flow API:面向任务的"声明式"写法
Service Maker 最值得关注的是 Python Flow API。它把 pipeline 进一步抽象成任务链,让代码更接近"我要做什么",而不是"每个 GStreamer 元素怎么接"。
比如本地 flow_api/deepstream_test1_app 中,一个检测、计数、渲染流程可以写成:
pipeline = Pipeline("deepstream-test1")
flow = Flow(pipeline).batch_capture([stream_file_path]).infer(CONFIG_FILE_PATH)
flow.attach(what=Probe("counter", ObjectCounterMarker())).render()()
到了 deepstream_test2_app,同样可以自然扩展为检测、跟踪、二级分类和渲染:
flow = Flow(pipeline).batch_capture([stream_file_path]).infer(PGIE_CONFIG_FILE_PATH)
flow = flow.track(ll_config_file=TRACKER_LL_CONFIG_FILE, ll_lib_file=TRACKER_LL_LIB_FILE)
flow = flow.infer(config=SGIE1_CONFIG_FILE_PATH)
flow = flow.infer(config=SGIE2_CONFIG_FILE_PATH)
flow.attach(what=Probe("counter", ObjectCounterMarker())).render()()
这就是 Flow API 的核心价值:用更 Pythonic 的方式表达视频 AI 任务。
4. 不只是推理:还覆盖生产级能力
本地样例并不只停留在"视频输入 + 模型推理 + 显示结果"。deepstream_test5_app 展示了更接近生产环境的能力组合:
- 多路视频输入与 batch 处理
- 主检测模型和二级分类模型
- 多目标跟踪
- FPS、延迟、OSD 等监控 probe
- Kafka 消息发布
- Smart Recording
- 静态源和动态源管理
此外,deepstream_appsrc_test_app 展示了 BufferProvider 和 BufferRetriever:前者可以把用户数据注入 DeepStream pipeline,后者可以从 pipeline 中取出 buffer 数据。这对接入自定义前处理、外部算法、PyTorch tensor 或跨进程处理都很有用。
5. Runtime Module:让自定义能力模块化
Service Maker 还提供 runtime module 机制。本地 sources/modules 目录下可以看到多个共享库模块,例如 measure_fps_probe、measure_latency_probe、add_message_meta_probe、kitti_dump_probe、sample_video_feeder 等。
这些模块通过 CMake 链接 nvds_service_maker 和 nvds_service_maker_utils,并使用 Service Maker 的自定义工厂宏注册能力。这样应用可以像使用标准组件一样加载自定义 probe、feeder、receiver 或 action。
这对于团队开发尤其重要:底层 C++ 高性能逻辑可以封装成模块,上层 Python 应用只负责组合业务流程。
结语
DeepStream Service Maker 并不是替代 DeepStream,而是给 DeepStream 加了一层更适合工程开发的抽象。
如果你需要极致控制,可以使用 C++ API 或 Python Pipeline API;如果你更关注快速实现业务,可以使用 Python Flow API;如果你要把自定义处理逻辑沉淀成可复用能力,可以使用 runtime module。对于视频分析、智能交通、工业视觉、边缘 AI 和多路流媒体推理应用来说,Service Maker 的价值在于:保留 DeepStream 的性能和插件生态,同时显著降低开发复杂度。