树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频

    • [使用 `rpicam-app` 通过网络流式传输视频](#使用 rpicam-app 通过网络流式传输视频)

文章来源: http://raspberry.dns8844.cn/documentation

原文网址

使用 rpicam-app 通过网络流式传输视频

本节介绍来自 rpicam-vid 的本机流。您还可以使用 libav 后端进行网络流。

UDP

要使用Raspberry Pi作为服务器通过UDP流式传输视频,请使用以下命令,将 <ip-addr> 占位符替换为客户端或多播地址的IP地址,并将 <port> 占位符替换为您要用于流式传输的端口:

复制代码
$ rpicam-vid -t 0 --inline -o udp://<ip-addr>:<port>

要使用Raspberry Pi作为客户端查看通过UDP流式传输的视频,请使用以下命令,将 <port> 占位符替换为您要从中流式传输的端口:

复制代码
$ vlc udp://@:<port> :demux=h264

或者,在客户端上使用以下命令使用 ffplay 进行流式传输:

复制代码
$ ffplay udp://<ip-addr-of-server>:<port> -fflags nobuffer -flags low_delay -framedrop

TCP

您还可以通过TCP流式传输视频。要将Raspberry Pi用作服务器:

复制代码
$ rpicam-vid -t 0 --inline --listen -o tcp://0.0.0.0:<port>

要使用Raspberry Pi作为客户端查看通过TCP流式传输的视频,请使用以下命令:

复制代码
$ vlc tcp/h264://<ip-addr-of-server>:<port>

或者,在客户端上使用以下命令以每秒30帧的速度使用 ffplay 进行流式传输:

复制代码
$ ffplay tcp://<ip-addr-of-server>:<port> -vf "setpts=N/30" -fflags nobuffer -flags low_delay -framedrop

RTSP

要使用VLC使用Raspberry Pi作为服务器通过RTSP流式传输视频,请使用以下命令:

复制代码
$ rpicam-vid -t 0 --inline -o - | cvlc stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/stream1}' :demux=h264

要在 Raspberry Pi 5 上获得最佳性能,请使用以下命令,该命令添加了 libav 以强制使用 H264 格式:

复制代码
$ rpicam-vid -t 0 --inline --libav-format h264 -o - | cvlc stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/stream1}' :demux=h264

要使用Raspberry Pi作为客户端查看通过RTSP流式传输的视频,请使用以下命令:

复制代码
$ ffplay rtsp://<ip-addr-of-server>:8554/stream1 -vf "setpts=N/30" -fflags nobuffer -flags low_delay -framedrop

或者,在客户端上使用以下命令使用VLC进行流式传输:

复制代码
$ vlc rtsp://<ip-addr-of-server>:8554/stream1

要取消服务器上的预览窗口,请使用 nopreview。

使用 inline 标志强制流头信息进入每个帧内,这有助于客户端在错过开头时理解流。

libav

您可以将 libav 后端用作音频/视频的网络流源。

要使用Raspberry Pi作为服务器通过TCP流式传输视频,请使用以下命令,将 <ip-addr> 占位符替换为客户端或多播地址的IP地址,并将 <port> 占位符替换为您要用于流式传输的端口:

复制代码
$ rpicam-vid -t 0 --codec libav --libav-format mpegts --libav-audio -o "tcp://<ip-addr>:<port>?listen=1"

您可以使用类似的命令通过UDP流式传输:

复制代码
$ rpicam-vid -t 0 --codec libav --libav-format mpegts --libav-audio  -o "udp://<ip-addr>:<port>"

GStreamer

https://gstreamer.freedesktop.org/\[GStreamer\] 是一个用于读取、处理和播放多媒体文件的Linux框架。本节展示如何使用 rpicam-vid 通过网络流式传输视频。

此设置使用 rpicam-vid 将编码的h.264比特流输出到标准输出。然后,我们使用GStreamer fdsrc 元素接收比特流,并使用额外的GStreamer元素通过网络发送它。在服务器上,运行以下命令来启动流,将 <ip-addr> 占位符替换为客户端的IP地址或多播地址,并将 <port> 占位符替换为您要用于流式传输的端口:

复制代码
$ rpicam-vid -t 0 -n --inline -o - | gst-launch-1.0 fdsrc fd=0 ! udpsink host=<ip-addr> port=<port>

在客户端上,运行以下命令来接收流,将 <ip-addr> 占位符替换为客户端的IP地址或多播地址,并将 <port> 占位符替换为您要用于流的端口:

复制代码
$ gst-launch-1.0 udpsrc address=<ip-addr> port=<port> ! h264parse ! v4l2h264dec ! autovideosink

TIP: 要测试此配置,请在同一设备上的不同终端中运行服务器和客户端命令,使用 localhost 作为地址。

RTP
复制代码
$ rpicam-vid -t 0 -n --inline -o - | gst-launch-1.0 fdsrc fd=0 ! h264parse ! rtph264pay ! udpsink host=<ip-addr> port=<port>

要通过RTP接收,请在客户端上运行以下命令,将 <ip-addr> 占位符替换为客户端的IP地址或多播地址,并将 <port> 占位符替换为您要用于流式传输的端口:

复制代码
$ gst-launch-1.0 udpsrc address=<ip-addr> port=<port> caps=application/x-rtp ! rtph264depay ! h264parse ! v4l2h264dec ! autovideosink

如果客户端不是Raspberry Pi,它可能有不同的GStreamer元素可用。在运行Linux的x86设备上,您可以改为运行以下命令:

复制代码
$ gst-launch-1.0 udpsrc address=<ip-addr> port=<port> caps=application/x-rtp ! rtph264depay ! h264parse ! avdec_h264 ! autovideosink
libcamerasrc GStreamer 元素

libcam 提供了一个 libcamasrc GStreamer元素,可以直接使用它来代替 rpicam-vid 。要使用此元素,请在服务器上运行以下命令,将 <ip-addr> 占位符替换为客户端或多播地址的IP地址,并将 <port> 占位符替换为您要用于流式传输的端口:

复制代码
$ gst-launch-1.0 libcamerasrc ! capsfilter caps=video/x-raw,width=1280,height=720,format=NV12 ! v4l2convert ! v4l2h264enc extra-controls="controls,repeat_sequence_header=1" ! 'video/x-h264,level=(string)4.1' ! h264parse ! rtph264pay ! udpsink host=<ip-addr> port=<port>

在客户端上,我们使用与以前相同的播放管道。

上一篇 -- 树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

下一篇 -- <>

相关推荐
_upupup6 小时前
Linux的调试工具——gdb/cgdb
linux·服务器
JeJe同学6 小时前
Docker镜像导入、容器启动
linux·运维·docker
木子n16 小时前
车载以太网与SOME/IP服务化通信实战-01.从字节到服务:SOME/IP报文解析与四通道开销账
网络·网络协议·tcp/ip·车载以太网·some/ip
Jason_zhao_MR7 小时前
Linux与实时控制如何兼得
linux·嵌入式硬件·机器人·工业控制
Raspberry_Pi_官方账号7 小时前
观察、理解与响应:Raspberry Pi 5 上的低功耗 CNN、VLM 和 SLM 工作负载
人工智能·神经网络·cnn·树莓派·raspberrypi
闲云野鹤在人间7 小时前
MySQL|从理论、安装、备份到主从复制、MHA高可用详解
linux·运维·数据库·mysql·云计算
Escalating_xu8 小时前
【C 语言】数据在内存中的存储:补码、大小端、整型陷阱与 IEEE 754 全解析
java·c语言·网络
一个风轻云淡8 小时前
GCC 和 GDB命令简单解读
java·linux·前端
爱跳舞的烤冷面8 小时前
Linux篇——网络编程
网络
揽秀亭长8 小时前
视频转脚本有哪些方法?5种方案技术拆解
人工智能·音视频