Qualcomm Robotics RB5 平台软件用户指南(6)
4.3 记录器:2 流并发用例
笔记
在实施用例之前确保 Weston 正在运行。
有关上游 GStreamer 插件和元素的信息,请参阅 GStreamer 文档,网址为 https://gstreamer.freedesktop.org/documentation/plugins_doc.html。
4.3.1 两个 H.264 流:保存到文件
先决条件:确保 Weston 正在运行。
该gst-launch管道可同时捕获、编码和存储两个 H.264/AVC 编码视频流。两路码流由一路 4K 分辨率流和一路 480p 分辨率流组成。
-
对于 Linux Ubuntu:
gst-launch-1.0 -e qtiqmmfsrc name=qmmf camera=0 ! video/x-raw\(memory:GBM\),format=NV12,width=3840,height=2160,framerate=30/1 ! queue ! qtic2venc ! queue ! h264parse ! mp4mux ! queue ! filesink location=/data/output/mux_4k.mp4 qmmf. ! video/x-raw\(memory:GBM\),format=NV12,width=640,height=480,framerate=30/1 ! queue ! qtic2venc ! queue ! h264parse ! mp4mux ! queue ! filesink location=/data/output/mux_480.mp4
-
对于嵌入式 Linux:
gst-launch-1.0 -e qtiqmmfsrc name=qmmf camera=0 ! video/x-raw\(memory:GBM\),format=NV12,width=3840,height=2160,framerate=30/1 ! queue ! qtic2venc ! queue ! h264parse ! mp4mux ! queue ! filesink location=/data/output/mux_4k.mp4 qmmf. ! video/x-raw\(memory:GBM\),format=NV12,width=640,height=480,framerate=30/1 ! queue ! qtic2venc ! queue ! h264parse ! mp4mux ! queue ! filesink location=/data/output/mux_480.mp4
-
该qtiqmmfsrc元素用于捕获和编码两个视频流。
-
h264parse和元素mp4mux处理缓冲区并准备存储。
-
队列元素确保每个路径/轨道独立于另一个运行。
-
这些filesink元素将缓冲区存储在相应的文件中。
-
要停止用例,请按CTRL + C,然后运行以下命令。
-
使用以下命令从设备中提取录制的内容adb pull。
adb pull /data/mux_4k.mp4
-
在主机 PC 上播放内容。
adb pull /data/mux_480.mp4
-
-
播放设备上的内容。
4.3.2 两个 H.264 流:保存到文件并通过 TCP 进行流式传输
先决条件:确保 Weston 正在运行。
以下gst-launch管道提供两个 1080p 分辨率 H.264/AVC 编码视频流的捕获。一个流存储到文件,而另一个流通过网络 (TCP) 传输。
gst-launch-1.0 -e qtiqmmfsrc name=qmmf camera=0 ! video/x-raw\(memory:GBM\),format=NV12,width=3840,height=2160,framerate=30/1 ! queue ! qtic2venc ! queue ! h264parse ! mp4mux ! queue ! filesink location=/data/output/mux1.mp4 qmmf. ! video/x-raw\(memory:GBM\),format=NV12,width=640,height=480,framerate=30/1 ! queue ! qtic2venc ! h264parse config-interval=-1 ! mpegtsmux name=muxer ! queue ! tcpserversink port=8900 host=127.0.0.1
-
该qtiqmmfsrc元素用于捕获和编码两个视频流。
-
h264parse和元素mp4mux处理第一个流中的缓冲区并准备存储它们。
-
该filesink元素存储文件中第一个流的缓冲区。
-
h264parse和元素mpegtsmux处理来自第二个流的缓冲区并为流式传输做好准备。
-
然后该tcpserversink元素将缓冲区发送到网络上。队列元素确保每个路径/轨道独立运行。
-
播放设备上的内容。
-
要停止用例,请按CTRL + C,使用以下命令从设备中提取录制的内容adb pull ,然后在主机 PC 上播放该内容。
adb pull /data/mux1.mp4
查看主机上的 TCP 流
先决条件:
- 在主机上安装 adb 和VLC Media Player 。
- 在环境变量中设置二进制和可执行文件路径。
要查看主机上的 TCP 流,请执行以下操作:
-
在Linux主机上,运行以下命令:
adb forward tcp:8900 tcp:8900
vlc -vvv tcp://127.0.0.1:8900
-
在Windows主机上执行以下命令:
-
运行命令。
adb forward tcp:8900 tcp:8900
-
启动VLC 媒体播放器。
-
选择媒体/打开网络流(或按 CTRL + N)
-
输入网络 URL。tcp://127.0.0.1:8900
-
单击“播放”。
-
4.3.3 两个 H.264 流:保存到文件和实时相机预览
先决条件:确保 Weston 正在运行。
以下gst-launch管道在显示用例上提供同步记录和实时预览:
-
对于 Linux Ubuntu:
export XDG_RUNTIME_DIR=/run/user/root && gst-launch-1.0 -e qtiqmmfsrc name=qmmf camera=0 ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! waylandsink fullscreen=true enable-last-sample=false qmmf. ! video/x-raw\(memory:GBM\),format=NV12,width=3840,height=2160,framerate=30/1 ! queue ! qtic2venc ! queue ! h264parse ! mp4mux ! queue ! filesink location=/data/output/mux1.mp4
-
对于嵌入式 Linux:
export WAYLAND_DISPLAY=wayland-1 && export XDG_RUNTIME_DIR=/run/user/root && gst-launch-1.0 -e qtiqmmfsrc name=qmmf camera=0 ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! waylandsink fullscreen=true enable-last-sample=false qmmf. ! video/x-raw\(memory:GBM\),format=NV12,width=3840,height=2160,framerate=30/1 ! queue ! qtic2venc ! queue ! h264parse ! mp4mux ! queue ! filesink location=/data/output/mux1.mp4
- 该qtiqmmfsrc元件用于生成4K分辨率编码视频流和1080p分辨率YUV流。
- 和h264parse元素mp4mux处理编码视频流。
- 该filesink元素将流存储在设备上的文件中。
YUV流由元素渲染在显示面板上waylandsink。
要停止用例,请按CTRL + C,使用以下命令从设备中提取录制的内容adb pull,然后在主机 PC 上播放该内容。
adb pull /data/mux1.mp4
要在设备上播放内容,请参阅验证 Weston。
4.4 记录器:3 流并发用例
有关上游 GStreamer 插件和元素的信息,请参阅 GStreamer 文档,网址为https://gstreamer.freedesktop.org/documentation/plugins_doc.html。
4.4.1 三个视频流:保存到文件
以下gst-launch管道提供同步 1080p 视频录制用例:
gst-launch-1.0 -e qtiqmmfsrc name=qmmf camera=0 ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! queue ! qtic2venc ! queue ! h264parse ! mp4mux ! queue ! filesink location=/data/output/mux1.mp4 qmmf. ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! queue ! qtic2venc ! queue ! h264parse ! mp4mux ! queue ! filesink location=/data/output/mux2.mp4 qmmf. ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! queue ! qtic2venc ! queue ! h264parse ! mp4mux ! queue ! filesink location=/data/output/mux3.mp4
-
该qtiqmmfsrc元素用于捕获和编码所有三个视频流。
-
h264parse,元素mp4mux处理缓冲区并准备存储。
-
队列元素确保每个路径/轨道独立于另一个运行。
-
这些filesink元素将缓冲区存储在相应的文件中。
-
播放设备上的内容。
-
要停止用例,请按CTRL + C,使用以下命令从设备中提取录制的内容adb pull,然后在主机 PC 上播放该内容。
adb pull /data/mux1.mp4 adb pull /data/mux2.mp4 adb pull /data/mux3.mp4
4.4.2 三个视频流:保存到文件、通过 TCP 流式传输以及实时预览
先决条件:确保 Weston 正在运行。
以下gst-launch管道提供同步 4K 录制、显示屏上的 1080p 实时预览和 480p 流媒体用例。
gst-launch-1.0 -e qtiqmmfsrc name=qmmf camera=0 ! video/x-raw\(memory:GBM\),format=NV12,width=3840,height=2160,framerate=30/1 ! queue ! qtic2venc ! queue ! h264parse ! mp4mux ! queue ! filesink location=/data/output/mux1.mp4 qmmf. ! video/x-raw\(memory:GBM\),format=NV12,width=640,height=480,framerate=30/1 ! queue ! qtic2venc ! h264parse config-interval=-1 ! mpegtsmux name=muxer ! queue ! tcpserversink port=8900 host=127.0.0.1 qmmf. ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! waylandsink fullscreen=true enable-last-sample=false
-
该qtiqmmfsrc元素用于生成两个编码视频流(4K 和 480p 分辨率)和一个 1080p YUV 流。
-
h264parse第一个编码视频流由和元素处理mp4mux。
-
该filesink元素将其存储在设备上的文件中。
-
h264parse第二编码流由和元件处理mpegtsmux,并由该tcpserversink元件通过 TCP 进行流传输。
-
第三原始 YUV 流由该元素渲染在显示面板上waylandsink。
-
播放设备上的内容。
-
要停止用例,请按CTRL + C,使用以下命令从设备中提取录制的内容adb pull ,然后在主机 PC 上播放该内容。
adb pull /data/mux1.mp4
查看主机上的 TCP 流
先决条件:
- 在主机上安装 ADB 和VLC Media Player 。
- 在环境变量中设置二进制/可执行文件路径。
要查看主机上的 TCP 流,请执行以下操作。
-
在Linux主机上,运行以下命令:
adb forward tcp:8900 tcp:8900
vlc -vvv tcp://127.0.0.1:8900
-
在Windows主机上,运行以下命令。
-
运行命令。
adb forward tcp:8900 tcp:8900
-
启动VLC 媒体播放器。
-
选择媒体/打开网络流(或按 CTRL + N)
-
输入网络 URLtcp://127.0.0.1:8900
-
单击“播放”。
-