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

../_images/NVStreamer_homepage.png

如果视频文件包含 B 帧,NVStreamer 将自动转码该文件,并且根据文件大小,转码文件可能需要几分钟时间。

选择“文件上传”,然后选择您希望像摄像机一样测试的视频磁盘文件(支持的编解码器:h264/h265 容器:mp4/mkv),然后将其拖放到描绘的区域

../_images/Upload_NVStreamer.png

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

../_images/RTSP_file_name.png

复制或记下 RTSP 地址(包括“rtsp://”;确保前面没有空格)。您将需要将该地址输入到我们将在下一步讨论的另一个 UX 中。

将 RTSP 流添加到 VST#

在此处访问 VST Web 服务器:http://[JETSON-IP]:30080/vst/。(注意:HTTP,而非 HTTPS),其中 [JETSON-IP] 是您正在运行 Docker 容器的 Jetson 设备的 IP 地址。

您将看到类似于此的用户界面

../_images/Add_RTSP_Stream.png

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

../_images/Camera_Management_Tab.png

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

../_images/Streams_tab.png

停止 NVStreamer#

要终止 NVStreamer 实例,请使用以下命令

sudo docker compose -f compose_nvstreamer.yaml down --remove-orphans

注意

如果 NVStreamer 停止,相应的 RTSP 流也将关闭,并且在 VST 中添加的流将停止工作。

Ubuntu 上的 NVStreamer#

如果您有大型视频文件或集合,或者想要使用多个流,那么您可以选择在您的 Ubuntu 桌面或笔记本电脑上安装和使用 NVStreamer。

先决条件#

在继续安装过程之前,请确保您的系统满足以下先决条件

  1. 运行 Ubuntu 20.04 或更高版本的 Linux 工作站。

  2. Linux 系统需要足够的可用空间来存储您将要服务的视频文件(通常为数百 GB)。

  3. GPU 对于 NVStreamer 是可选的,如果 Linux 系统上安装了 GPU,则需要 Driver Version: 535.113.01CUDA 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>