当前位置: 首页 > news >正文

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

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

    • 使用 `rpicam-app` 通过网络流式传输视频
      • UDP
      • TCP
      • RTSP
      • `libav`
      • GStreamer
        • RTP
        • `libcamerasrc` GStreamer 元素

文章来源: 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)树莓派摄像头高级使用方法
下一篇 –

相关文章:

  • TikTok矩阵养号实战:住宅IP纯净度与设备指纹联动方案
  • ubuntu搭建nfs服务centos挂载访问
  • 使用Spring Boot Actuator构建用户应用
  • 前馈神经网络
  • macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
  • DataSource学习
  • k8s使用自建nfs做持久化无法控制磁盘使用大小问题处理
  • 游戏测试面试八股汇总(持续更新版)
  • 借助AI识别测试盲区:从需求文档中挖掘遗漏场景
  • 《高等数学》(同济大学·第7版)第四章第二节换元积分法
  • axios取消请求
  • iOS 抖音首页头部滑动标签的实现
  • iOS和桌面双端抓包实战经验总结:Sniffmaster与常见工具组合解析
  • 为什么选择物理服务器租用?
  • iOS超级签申请流程及环境部署
  • 基于OpenCV的风格迁移:图像金字塔方法
  • 安全生产管理是什么?安全生产管理系统都有哪些核心功能?
  • 傲软录屏:轻松录制,高效分享
  • 【时时三省】(C语言基础)静态局部变量(static局部变量)
  • Ubuntu中安装CURL
  • 公司网站建设汇报/社群营销的十大步骤
  • 工信部网站备案规定/网络营销的十大特点
  • 网站开发需要的所有技术/网站建设一条龙
  • 个人做网站需要备案吗/网页模板建站系统
  • 论述农产品电商网站建设/软文营销软文推广
  • 宣传手册设计模板/seo教程论坛