libcamera-vid -t 0 --width 640 --height 480 --framerate 30 --inline -o - \| gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=35 ! udpsink sync=false host=127.0.0.1 port=5600
libcamera-vid:这是 libcamera 项目提供的命令行工具,用于捕获视频流。libcamera 是一个用于管理相机硬件的框架,特别是在树莓派等设备上。
-t 0:设置捕获的视频持续时间。0 表示无时间限制,意味着视频录制将会持续到手动停止或程序结束。
--width 640 --height 480:设置捕获视频的分辨率为 640x480 像素。适用于低带宽或处理能力较低的场景。
--framerate 30:设置视频的帧率为 30 帧每秒 (fps),即每秒捕获 30 帧图像。
--inline:这表示启用内联 (inline) 标志,通常用于将视频流中的关键帧和其他信息打包在一起,以便处理器和接收方可以更高效地解码视频流。
-o -:将输出设置为标准输出 (- 表示标准输出),意味着视频数据将被直接发送到管道,而不是保存到文件中。
2. 管道 (|)
管道 (|) 将 libcamera-vid 命令的输出直接传递给后续的命令 (gst-launch-1.0) 作为输入。在这里,它把从相机捕获到的原始视频流传递给 GStreamer 进行处理。
3. gst-launch-1.0 部分
gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=35 ! udpsink sync=false host=127.0.0.1 port=5600
gst-launch-1.0:这是 GStreamer 的命令行工具,用于构建和执行媒体处理管道。在这个命令中,它用于处理视频流并将其发送到网络。
-v:启用详细模式,输出更多的调试信息。
fdsrc:表示 "文件描述符源"(file descriptor source)。它从标准输入(即从管道传递来的数据)读取数据,并将其作为输入流。这意味着 fdsrc 接收来自 libcamera-vid 输出的视频流。
h264parse:该元素用于解析 H.264 视频流。libcamera-vid 默认输出的是 H.264 编码的视频流,h264parse 用于对该流进行解析,确保它符合 H.264 的标准。
rtph264pay:该元素将 H.264 视频流打包成 RTP(Real-time Transport Protocol)格式,用于网络传输。RTP 是一种广泛用于流媒体和实时通信的协议。rtph264pay 会将解析后的 H.264 数据流打包成 RTP 数据包。
config-interval=1:这会设置每隔 1 个 RTP 包发送一次 H.264 配置数据。通常用于确保接收端能够正确解码视频流中的关键帧。
pt=35:设置 RTP 负载类型(payload type)为 35,这是一个标准的 H.264 视频负载类型。pt 指定了媒体流的编码类型,35 代表 H.264。
udpsink:表示将处理后的 RTP 流通过 UDP 协议发送到网络。udpsink 负责将数据包发送到指定的目标地址。
sync=false:设置为 false,意味着 GStreamer 不会进行时间同步,适用于不需要严格同步的实时视频流。
host=127.0.0.1:指定目标主机为本地机器 (127.0.0.1),即视频流会被发送到本地计算机的 UDP 端口。
port=5600:指定目标端口为 5600,即视频流将通过 UDP 的 5600 端口发送到本地机器。
这条命令的功能是从相机(通过 libcamera-vid)捕获视频流,将其编码为 H.264 格式,通过 GStreamer 处理并封装为 RTP 包,最后通过 UDP 将视频流发送到本地的 5600 端口。
libcamera-vid 负责从摄像头捕获视频流。
gst-launch-1.0 使用 GStreamer 处理视频流,并将其封装为 RTP 包,发送到指定的 UDP 地址和端口。