我正在尝试把 SimCam1s AI 摄像头添加到 VisionCapsules 运行环境中。
我目前已经做了:
- 把包含深度学习算法结果的元数据加入 IDR 帧的 SEI 部分,然后封装进 RTP 包。
2. 使用 GStreamer 管道验证元数据和视频数据是否正确
Rtsp 源 --> h264 文件管道,用于验证元数据:
gst-launch-1.0 -e rtspsrc location=rtsp://SIMCAM:****@192.168.1.107/live ! rtph264depay ! ‘video/x-h264, stream-format=(string)byte-stream’ ! filesink location=file.h264
Rtsp 源 --> 解码 --> mp4 文件管道,用于验证视频数据:
gst-launch-1.0 -e rtspsrc location=rtsp://SIMCAM:****@192.168.1.107/live! rtph264depay ! ‘video/x-h264, stream-format=(string)byte-stream’ ! decodebin ! avenc_mpeg4 ! mp4mux ! filesink location=file.mp4
BrainFrame 是否支持添加新的 appsink,比如 sub_sink?
我打算写一个 gstreamer 插件,从 h264 视频流中提取 SEI 数据。
感谢你的提问。目前 BrainFrame 还不支持提取 AI 元数据,但我们有兴趣增加这个功能。
我们的计划是:BrainFrame 默认提取 SEI 数据,并连同 numpy 帧一起传给算法胶囊的“process_frame”方法。
如果你用于提取 SEI 元数据的 GStreamer 插件在整个系统中运行良好,也许可以随 BrainFrame 一起发布?
我会和团队其他成员讨论这件事。
你好 Alex,我是 GStreamer 的新手,花了一周时间学习这个框架。目前我写了一个简单的 H264SeiFilter 来提取我们 SEI 中的元数据。在这个插件里我实现了一个 tcp 服务,把元数据发送给 python tcp 客户端。
- 接下来我该怎么做,才能把它传给算法胶囊的“process_frame”方法?
- BrainFrame 是如何从 GStreamer 的 appsink 获取数据的?
- 能给我一些建议吗?
你好 george,感谢你到目前为止的工作。接下来该我们在 BrainFrame 一侧增加元数据提取了。你愿意分享你的 H264SeiFilter Gst 插件,以及用你的 SEI 元数据示例视频运行它的示例吗?
这样我们就可以把插件加入 BrainFrame 部署,并把该功能加入 OpenVisionCapsule 规范。
当然乐意分享,不过这个插件只是一个简单的演示,目前只能提取我们摄像头的元数据。我正在安装 brainframe,计划在完成整体验证后分享一个更完整的插件。
你好 Alex,谢谢你的帮助,BrainFrame 服务端和客户端已经装好了。我该如何把我的 gstreamer 插件注册到 BrainFrame 客户端?
我试着把插件复制到路径“./v0_23_2_client/lib/gstreamer-1.0”,然后用自定义管道运行 BrainFrame 客户端:
rtspsrc location={url} ! rtph264depay name="buffer_src" ! video/x-h264, stream-format=byte-stream ! h264seifilter ! decodebin ! videoconvert ! appsink name="main_sink"


顺便说一下,不带自定义插件的管道是可以工作的:
rtspsrc location={url} ! rtph264depay name=“buffer_src” ! video/x-h264, stream-format=byte-stream ! decodebin ! videoconvert ! appsink name=“main_sink”
你好 George!
1:用你的插件制作自定义 BrainFrame 服务端
插件也需要加到 BrainFrame 服务端容器里。为此,我们可以在你本地机器上制作一个自定义镜像来修改服务端容器(用于测试)。
创建一个名为 Dockerfile 的文件,目录结构如下:
.
├── Dockerfile
└── h264seifilter.so
然后,在 Dockerfile 中写入:
FROM dilililabs/brainframe:0.23.2
WORKDIR /usr/local/lib/gstreamer-1.0/
ADD h264seifilter.so .
# Always end the file in the /brainframe directory so that the
# brainframe_server executable is in the PATH
WORKDIR /brainframe
然后,运行下面的命令构建容器:
docker build --tag custom_brainframe:0.23.2 .
2. 运行自定义 BrainFrame 服务端
现在,我们需要添加一个 docker-compose.override.yml,这样你就可以用自己的自定义镜像,而不是默认的 dilililabs/brainframe:0.23.0 镜像来运行 BrainFrame 服务端。
为此,进入你从我们的下载区下载的 docker-compose.yml 所在位置,按下面的方式建立目录:
.
├── docker-compose.override.yml
├── docker-compose.yml
└── license_file
在 docker-compose.override.yml 中写入:
version: '2.4'
services:
api:
image: custom_brainframe:0.23.2
现在,只需在该目录下运行下面的命令,就可以启动 BrainFrame 服务端:
docker-compose down && docker-compose up
常用命令
如果需要在容器内调试,可以用下面的命令进入容器:
docker run -it --entrypoint bash dilililabs/brainframe:0.23.2
你好 George!
为什么自定义插件需要在两侧(服务端和客户端)都添加?
自定义管道是在哪一侧起作用,服务端还是客户端?
服务端和客户端都会使用自定义管道,所以如果你在自定义管道里用了 h264seifilter 插件,两处都必须有这个插件。
默认管道似乎不支持带有 SEI 的 H264 NALU,所以我只能从原始视频流中过滤掉 SEI 数据。
你是在什么情况下发现它不支持的?BrainFrame 目前确实不会自动提取 SEI 数据。你是发现 SEI 数据干扰了视频流解码吗?
你是在什么情况下发现它不支持的?BrainFrame 目前确实不会自动提取 SEI 数据。你是发现 SEI 数据干扰了视频流解码吗?
我用 vlc 播放器可以无错误地打开带 SEI 数据的 rtsp 流,但 brainframe 客户端一直显示“连接中”。
把 SEI 数据过滤掉之后就可以了。
我已经通过微信把源代码发给你了。
希望对你们默认集成 SEI 数据提取的计划有帮助。
如果还有什么我能帮上忙的,请告诉我。