Jetson Orin 上的 NVStreamer#
概述#
NVStreamer 是一款 NVIDIA 开发者软件,支持存储和提供视频文件,这些视频文件随后可以使用 RTSP 协议进行流式传输。它对于使用 VST 进行测试特别有用,因为它为创建视频源作为 VST 的输入提供了一种替代摄像机的方法。具体来说,它提供了一种机制来测试特定的视频文件作为 VST 输入。VST 可以配置为接收 RTSP 流,就像它们来自 ONVIF-S 摄像机一样。
设置和启动 NVStreamer#
使用此 NGC 链接 从 NGC 下载应用程序包到您的 Jetson。您需要输入您的 NGC 凭据。在页面上,使用“下载”菜单(右上角)中提供的选项之一。
使用以下命令在您的 Jetson 上解压文件
unzip files.zip
[如果使用直接下载选项]
tar -xvf nvstreamer-2.0.0.tar.gz
运行以下命令以增加操作系统套接字缓冲区大小。这是为了避免在高比特率视频或大型 IDR 帧的情况下发生数据包丢失。如果未增加这些缓冲区大小,您有时可能会看到一些视频文件出现块状伪影。
sudo sysctl -w net.core.wmem_max=2000000
sudo sysctl -w net.core.rmem_max=2000000
使用如下命令行启动 NVStreamer
cd nvstreamer
sudo docker compose -f compose_nvstreamer.yaml up -d --force-recreate
上传视频到 NVStreamer#
现在您已经能够设置 NVStreamer,您可以尝试在 NVStreamer 中上传视频。打开一个 Web 浏览器(我们建议使用 Chrome)并导航到此地址(在同一系统或同一网络上的另一个系统上)
http://[NVStreamer-IP]:31000
注意
HTTP,而非 HTTPS),其中 [NVStreamer-IP] 是本地网络上的主机 IP 地址(您可以使用终端上的 ifconfig 来验证 IP)。
将打开以下 UX

如果视频文件包含 B 帧,NVStreamer 将自动转码该文件,并且根据文件大小,转码文件可能需要几分钟时间。
选择“文件上传”,然后选择您希望像摄像机一样测试的视频磁盘文件(支持的编解码器:h264/h265 容器:mp4/mkv),然后将其拖放到描绘的区域

文件成功上传后,底部左侧将出现绿色线条进度条,之后将进行转码过程。完成后,文件名将以灰色显示,并且将自动创建具有文件名的 RTSP 流

复制或记下 RTSP 地址(包括“rtsp://”;确保前面没有空格)。您将需要将该地址输入到我们将在下一步讨论的另一个 UX 中。
将 RTSP 流添加到 VST#
在此处访问 VST Web 服务器:http://[JETSON-IP]:30080/vst/。(注意:HTTP,而非 HTTPS),其中 [JETSON-IP] 是您正在运行 Docker 容器的 Jetson 设备的 IP 地址。
您将看到类似于此的用户界面

单击“传感器管理”选项卡

单击“RTSP”,并将从 NVStreamer UI 复制的 RTSP 地址 粘贴到“rtsp url”框中。在“location”和“name”字段中填写相同的字符串(它将成为摄像机名称),然后点击“Submit”。您现在可以点击“Streams tab”以查看文件

停止 NVStreamer#
要终止 NVStreamer 实例,请使用以下命令
sudo docker compose -f compose_nvstreamer.yaml down --remove-orphans
注意
如果 NVStreamer 停止,相应的 RTSP 流也将关闭,并且在 VST 中添加的流将停止工作。
Ubuntu 上的 NVStreamer#
如果您有大型视频文件或集合,或者想要使用多个流,那么您可以选择在您的 Ubuntu 桌面或笔记本电脑上安装和使用 NVStreamer。
先决条件#
在继续安装过程之前,请确保您的系统满足以下先决条件
运行 Ubuntu 20.04 或更高版本的 Linux 工作站。
Linux 系统需要足够的可用空间来存储您将要服务的视频文件(通常为数百 GB)。
GPU 对于 NVStreamer 是可选的,如果 Linux 系统上安装了 GPU,则需要
Driver Version: 535.113.01
和CUDA Version: 12.2
。
启动 NVStreamer#
Ubuntu 上的 NVStreamer 使用配置文件,该文件需要定义并挂载到容器中。使用 NVStreamer 配置 中显示的示例配置文件内容,并将其复制到名为 nvstreamer_config.json 的文件中。
运行以下命令以增加操作系统套接字缓冲区大小。这是为了避免在高比特率视频或大型 IDR 帧的情况下发生数据包丢失。如果未增加这些缓冲区大小,您有时可能会看到一些视频文件出现块状伪影。
sudo sysctl -w net.core.wmem_max=2000000
sudo sysctl -w net.core.rmem_max=2000000
使用如下命令行启动 NVStreamer(带 GPU)
sudo docker run -e ADAPTOR=streamer -d --restart always --gpus all -v {local video file path}:/home/vst/vst_release/streamer_videos/ -v {nvstream config file path}:/home/vst/vst_release/updated_configs/ --net=host nvcr.io/nvidia/jps/vst:1.3.0-24.08.1-x86_64 --vstConfigFile /home/vst/vst_release/updated_configs/nvstreamer_config.json
使用如下命令行启动 NVStreamer(不带 GPU)
sudo docker run -e ADAPTOR=streamer -d --restart always -v {local video file path}:/home/vst/vst_release/streamer_videos/ -v {nvstream config file path}:/home/vst/vst_release/updated_configs/ --net=host nvcr.io/nvidia/jps/vst:1.3.0-24.08.1-x86_64 --vstConfigFile /home/vst/vst_release/updated_configs/nvstreamer_config.json
两个目录被挂载到容器中
主机上存储视频文件的目录被挂载到 NVStreamer 容器中的
/home/vst/vst_release/streamer_videos/
。它在上面的命令行中显示为'{local video file path}'
;根据视频在您的系统中的存储位置进行适当修改。确保此主机目录对非 root 用户具有写入权限,因为 NVStreamer 以非 root 用户身份运行。
sudo chmod 777 {local video file path}
NVStreamer 配置目录挂载在
/home/vst/vst_release/updated_configs
。先前创建的nvstreamer_config.json
文件应存储在要挂载的文件夹中。它在上面的命令行中显示为{nvstream config file path}
;根据您在系统中存储nvstreamer_config.json
文件的位置进行适当修改。
成功启动 Docker 容器后,将打印以下消息
'"service_status" : "init_ready"'
卸载 NVStreamer#
要终止 NVStreamer 实例,请使用以下 Docker 命令
sudo docker ps
复制 NVStreamer 实例的 container_id,并在下面的 stop 命令中使用。
sudo docker stop <container_id>