机载视频流回传+编解码方案

news2024/11/29 21:06:38

无线网络,低带宽场景。不能直接转发ROS raw image(10MB/s+),而要压缩(编码)后再传输。可以用rtsp的udp传输或者直接传输话题,压缩方法有theora(ROS image_transport默认支持,软件编解码)或者h264(自己用gstreamer/ffmpeg/opencv写,并结合实际可用的硬件编码器进行编码)

视频流来源发送方案接收方案优点缺点

rtsp +

h264已编码

(IP摄像头)

转发rtsp推流

rtsp拉流 +

h264解码

(gstreamer/ffmpeg)

无额外开销无法再压缩、修改画面

rtsp拉流 +

h264解码 (此处应有ROS image话题)+

h264编码(gstreamer) +

rtsp推流

rtsp拉流 +

h264解码

(gstreamer/ffmpeg)

在原rtsp h264流基础上可以再压缩需要额外编码

ROS话题

image_transport republish (已经是的可省略) +

传输theora话题

接收theora话题 +

image_transport解码 +

republish image话题(仅rqt查看可省略)

通用软件编码;无硬件加速

h264编码(gstreamer) +

rtsp推流

rtsp拉流 +

h264解码

(gstreamer/ffmpeg)

硬件加速专用

 image_transport republish:输入话题是sensor_msgs/Image类型的,输出压缩的各类话题(compressed和theora默认),适用于image_raw话题不是由image_transport产生的情况。

rosrun image_transport republish raw in:=/usb_cam/image_raw out:=/usb_cam/image_raw/theora

 image_transport republish:输入话题是theora压缩过的,输出解压的raw话题

rosrun image_transport republish theora in:=camera/image raw out:=camera/image_decompressed

相关资源:

一些推流方案合集rtsp_除了ffmpeg推流-CSDN博客

rocon_rtsp_camera_relay:读取rtsp流,发布ROS图像话题(网络摄像头ROS驱动、拉流)

rocon_rtsp_camera_relay - ROS Wiki
第八章.ROS-RTSP流相机功能包 - HOMER图数传

这个包比较老了,拉流效果如何,能否用硬件解码器有待验证

gscam:gstramer读取usb/web camera,发布ROS图像话题(网络摄像头ROS驱动、拉流)

GitHub - ros-drivers/gscam: ROS Camera driver for GStreamer-based video streams.
gscam - ROS Wiki

可以用gscam,这是一个gstreamer框架的ROS包,读取的视频流来源可以是网络摄像头(rtspsrc)或者usb摄像头(v4lc),反正都是gstreamer框架的,可以选择解码器(比如jetson支持的nvv4l2decoder解码器),解码发布到sensor_msg/Image话题。

rtsp拉流+nvv4l2decoder解码+发布ROS图像话题(网络摄像头ROS驱动、拉流)

src/amov_gimbal_image_node.cpp · AMOVLAB/Gimbal-SDK-ROS - Gitee.com

这里是opencv拉rtsp流(h264压缩了的),性能可能不如gstreamer或者ffmpeg?用的是xavier NX上的nvv4l2decoder硬件解码器对h264数据进行解码,appsink sync=false表示没有同步,capture.read(frame);不会阻塞?cpu占用高?

video_stream_opencv 发布ROS图像话题(网络摄像头ROS驱动、拉流)

video_stream_opencv - ROS Wiki

读取ROS图像话题+omxh264enc编码+gstreamer rtsp推流(发送方案)低延时

Prometheus/Modules/object_detection/py_nodes/rtsp_stream/gstreamer_rtsp_stream.py at main · amov-lab/Prometheus · GitHub

在xavier NX上测试过。读取ROS图像话题,然后用xavier NX自带的omxh264enc硬件编码器(老旧,现在应该换成nvv4l2encoder)编码成h264的rtp udp数据包发送,然后用gstreamer启动rtsp server。async=false仍然是关闭了同步。 用rtsp动态改变推流参数?

ros_rtsp读取ROS话题+gstreamer rtsp推流(发送方案)

https://blog.csdn.net/qq_42257666/article/details/130559000

 ffmpeg_image_transport(ROS image和ffmpeg压缩解压的转换)

GitHub - daniilidis-group/ffmpeg_image_transport: image transport that uses libavcodec for compression

可以用到硬件加速,ffmpeg自带的,支持的硬件编解码器可能是PC端的,orin NX上还是用gstreamer的nvv4l2编解码器比较好。

rtsp_image_transport(ROS image和rtsp流的转换,拉流、推流)

GitHub - fkie/rtsp_image_transport: RTSP streaming for ROS image topics

解压和压缩用的是ffmpeg,支持硬件加速。既能拉流成ROS图像,也能推流ROS图像,比较全面。但由于是用的ffmpeg进行编解码,支持的硬件编解码器可能是PC端的,orin NX上还是用gstreamer的nvv4l2编解码器比较好。

rtsp拉流方法(地面端、rtsp拉流ROS驱动)

1. 程序VLC Media Player直接播放

2. opencv,解码还是调用的ffmpeg,如何设置解码器为硬件解码器?

3. gstreamer,默认是通过设置 decodebin 元素,GStreamer 会自动选择解码器,也可以设置硬件解码器nvv4l2decoder。

4. ffmpeg,自动调用H.264 解码器(libx264libavcodec),如何设置解码器为硬件解码器?

发送端:RTSP 流重新封装并转发

如果你的发送端需要从 RTSP 流获取视频数据并转发,可以使用以下 GStreamer 管道接收 RTSP 流并通过 UDP 传输 H.264 流:

gst-launch-1.0 rtspsrc location=rtsp://<rtsp-url> ! rtph264depay ! rtph264pay ! udpsink host=127.0.0.1 port=5000

适用于转发rtsp推流到地面端的情况,不用编码解码。

结论

1. 读取摄像头方案

  • 如果是usb/csi摄像头,一般会有驱动,realsense driver或者usb_cam或者gscam,最好有用到硬件解码的,发布出ROS话题。
  • 如果是rtsp流且h264压缩了的网络摄像头(吊舱),需要用opencv / gstreamer / ffmpeg读取rtsp流,解码,再发布出ROS话题。最好解码用到硬件解码器。

2. 机载推流(发送)方案

  • 最推荐:读取ROS话题,用opencv / gstreamer / ffmpeg进行h264编码,最好用硬件编码器。然后用gstreamer推送rtsp流。需要自己写程序。
  • 最简单:如果摄像头是rtsp流的且h264压缩的合适,可以不经过解码编码,直接转发这路rtsp流到地面端。之所以要转发而不是直接用这路rtsp流,是因为这路rtsp应该是用于机载读取发布ROS话题,可能不能再给地面端拉流。这种方法缺点是无法控制压缩参数,而且无法显示程序处理后的图像(比如加上一些识别框的图)。
  • 方便调试(此法注意theora话题刚订阅时会发送header一次,必须要传输到接收端):读取ROS话题,用image_transport republish产生theora话题(已经有的不需要),然后用swarm_ros_bridge转发theora话题到地面站。问题是theora编码是软件cpu的,用不了硬件加速,地面站看到的视频可能延迟比较大,同时swarm_ros_bridge建立连接后暂时不支持取消,地面端只能杀掉swarm_ros_bridge节点来停止传输。  关于theora,可以查看:usb_cam ros包话题说明,image transport包使用-CSDN博客

3. 地面端拉流(接收)方案

  • 最推荐:ubuntu上apt安装vlc播放器,直接可以看rtsp流。
  • 方便调试:rqt_image_view或者rviz查看theora话题。   关于theora,可以查看:usb_cam ros包话题说明,image transport包使用-CSDN博客
  • 用opencv / gstreamer / ffmpeg读取rtsp流,解码,写QT显示窗口,可以加入点选等功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2249998.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp组建scroll-view初始化页面设置scrollTop无效解决办法

官方文档&#xff1a;scroll-view | uni-app官网 一 . scroll-view的基本用法 使用竖向滚动时&#xff0c;需要给 <scroll-view> 一个固定高度&#xff0c;通过 css 设置 height&#xff1b; <scroll-view :scroll-top"scrollTop" scroll-y"true&quo…

Web day02 Js Vue Ajax

目录 1.javascript: 1.js的引入方式&#xff1a; 2.js变量 & 数据类型 & 输出语句&#xff1a; 模板字符串&#xff1a; 3.函数 & 自定义对象&#xff1a; 4. json 字符串 & DOM操作&#xff1a; 5. js事件监听&#xff1a; 6.js的模块化导入或者导出&a…

【面向对象的程序设计——集合框架】主要接口

文章目录 主要接口集合框架的主要接口Collect接口Set接口实现Set接口的类SortedSet接口 List接口&#xff1a;线性表实现List接口的类&#xff1a; Queue接口实现Queue接口的类 Map接口Map接口的定义Map接口的方法SortedMap接口 主要接口 集合框架的主要接口 声明了对各种集合…

工业物联网网关在设备接入物联网中的核心作用

一、工业物联网网关的定义与功能 工业物联网网关是工业领域中的一种重要设备&#xff0c;它位于工业物联网系统的边缘位置&#xff0c;负责连接、管理和协调工业设备与云平台之间的通信。作为边缘计算的关键组件&#xff0c;工业物联网网关能够实现工业设备、传感器、PLC、DCS…

2024年第十三届”认证杯“数学中国数学建模国际赛(小美赛)

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

selinux和防火墙实验

1 、 selinux 的说明 SELinux 是 Security-Enhanced Linux 的缩写&#xff0c;意思是安全强化的 linux 。 SELinux 主要由美国国家安全局&#xff08; NSA &#xff09;开发&#xff0c;当初开发的目的是为了避免资源的误用。 系统资源都是通过程序进行访问的&#xff0c;如…

flink学习(12)——checkPoint

如何设置checkPoint package com.bigdata.day06;/** * 1、需要三句话 * 2、设置完checkPoint后若程序出现异常&#xff0c;会一直重启 * 3、此时是自动进行checkPoint保存 * 4、注意&#xff1a;此时如果有checkpoint ,是不会出现异常的&#xff0c;需要将checkpoint的代码关…

前端面试题-1(详解事件循环)

1.了解浏览器的进程模型 1.什么是进程&#xff1f; 程序运行需要有它自己专属的内存空间&#xff0c;可以把这块内存空间简单的理解为进程 每个应用至少有一个进程&#xff0c;进程之间相互独立&#xff0c;即使要通信&#xff0c;也需要双方同意。 2.什么是线程&#xff1f…

http的文件上传和下载原理

目录 一&#xff1a;上传 1&#xff1a;http请求格式 2&#xff1a;文件上传类型分析 1&#xff1a;md5秒传 2&#xff1a;分片上传 1. 什么是分片上传 2. 分片上传的场景 3&#xff1a;断点续传 1. 什么是断点续传 2. 应用场景 3. 实现断点续传的核心逻辑 4. 实现流…

【计算机视觉】图像基本操作

1. 数字图像表示 一幅尺寸为MN的图像可以用矩阵表示&#xff0c;每个矩阵元素代表一个像素&#xff0c;元素的值代表这个位置图像的亮度&#xff1b;其中&#xff0c;彩色图像使用3维矩阵MN3表示&#xff1b;对于图像显示来说&#xff0c;一般使用无符号8位整数来表示图像亮度&…

VSCode 下载 安装

VSCode【下载】【安装】【汉化】【配置C环境&#xff08;超快&#xff09;】&#xff08;Windows环境&#xff09;-CSDN博客 Download Visual Studio Code - Mac, Linux, Windowshttps://code.visualstudio.com/Downloadhttps://code.visualstudio.com/Download 注意&#xff0…

【Python入门】Python数据类型

文章一览 前言一、变量1.1.如何使用变量1.2.如何定义变量的名字&#xff08;标识符&#xff09; 二、数据类型2.1 整型数据2.2 浮点型数据2.3 布尔型&#xff08;bool&#xff09;数据2.4 复数型数据2.5 字符串类型1 > 字符串相加&#xff08;合并&#xff09;&#xff08;&…

算法基础 - 高斯牛顿法(曲线拟合)

文章目录 1. 高斯牛顿法发展历程2、问题的引出3、高斯牛顿法的前世3.1、一阶&#xff0c;二阶梯度法共有原理3.2、最速下降法&#xff08;一阶梯度法&#xff09;3.3、牛顿法&#xff08;二阶梯度法&#xff09; 4、高斯牛顿法4.1 高斯牛顿法的思想4.2 最小二乘问题4.3 高斯牛顿…

Vue+Element Plus实现自定义表单弹窗

目录 一、基本框架 1.父组件index.vue 2.子组件FormPop.vue 二、细节补充 1&#xff09;input、textarea、select、input number 2&#xff09;daterange、date、monthrange 3&#xff09;数据定义 4&#xff09;没改样式的效果 5&#xff09;最终效果 三、最终代码 …

VMware Workstation Pro下载安装及简单设置

VMware Workstation Pro下载 方法一&#xff1a;官网下载 https://support.broadcom.com/group/ecx/productdownloads?subfamilyVMwareWorkstationPro账号请自行注册&#xff0c;选择最新版本17.6.1 下载后用md5sum_x64.exe验证下载的文件完整性 方法二 百度网盘 通过网…

ospf协议(动态路由协议)

ospf基本概念 定义 OSPF 是典型的链路状态路由协议&#xff0c;是目前业内使用非常广泛的 IGP 协议之一。 目前针对 IPv4 协议使用的是 OSPF Version 2 &#xff08; RFC2328 &#xff09;&#xff1b;针对 IPv6 协议使用 OSPF Version 3 &#xff08; RFC2740 &#xff09;。…

数据结构之循环链表和栈

一、循环链表 1、概念 循环链表&#xff1a;就是首尾相连的链表&#xff0c;通过任意一个节点&#xff0c;都能将整个链表遍历一遍 分类&#xff1a;单向循环链表、双向循环链表 2、单向循环链表的类格式 单向循环链表也就是单向链表的最后一个节点的next域不再为None,而是…

linux安装部署mysql资料

安装虚拟机 等待检查完成 选择中文 软件选择 网络和主机名 开始安装 设置root密码 ADH-password 创建用户 等待安装完成 重启 接受许可证 Centos 7 64安装完成 安装mysql开始 Putty连接指定服务器 在 opt目录下新建download目录 将mysql文件传到该目录下 查看linux服务器的…

HTML 霓虹灯开关效果

HTML 霓虹灯开关效果 1.简介&#xff1a;该代码为纯html&#xff0c;CSS写在了内部&#xff0c;不需要额外引入&#xff0c;霓虹灯开关效果很漂亮&#xff0c;应用在个人物联网项目中是一个比较不错的选择。 2.运行效果&#xff1a; 3.源码&#xff1a; <!DOCTYPE html&g…

uniapp开发支付宝小程序自定义tabbar样式异常

解决方案&#xff1a; 这个问题应该是支付宝基础库的问题&#xff0c;除了依赖于官方更新之外&#xff0c;开发者可以利用《自定义 tabBar》曲线救国 也就是创建一个空内容的自定义tabBar&#xff0c;这样即使 tabBar 被渲染出来&#xff0c;但从视觉上也不会有问题 1.官方文…