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

无线网络,低带宽场景。不能直接转发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.mzph.cn/bicheng/62467.shtml

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

相关文章

# issue 6 网络编程基础

一、网络的物理结构和光纤千兆网络 首先&#xff0c;我们需要知道网络的物理结构——数据是如何从一台机器传输到另外一台机器的 这个过程是非常重要的。现在很多人做软件开发&#xff0c;只会软件角度&#xff0c;这导致讲软件原理头头是道&#xff0c;但是连数据线都不会接&a…

vscode添加环境变量(mujoco)

文章目录 前言一、创建.env文件二、编写setting.jason 前言 之前一直用pycharm&#xff0c;最近改用cursor了&#xff0c;在pycharm中设置环境变量修改运行配置就行了&#xff0c;vscode要麻烦一些&#xff0c;记录一下。 一、创建.env文件 以mujoco环境变量为例&#xff0c;…

【MySQL】关于查询和KILL进程的权限

在 MySQL 中&#xff0c;如果你希望某个用户能够查询数据库的当前进程&#xff08;查询正在运行的查询和线程&#xff09;以及终止&#xff08;KILL&#xff09;特定进程&#xff0c;你需要为该用户授予以下权限&#xff1a; 查询进程的权限&#xff1a;用户需要 PROCESS 权限&…

彻底理解quadtree四叉树、Octree八叉树 —— 点云的空间划分的标准做法

1.参考文章&#xff1a; &#xff08;1&#xff09;https://www.zhihu.com/question/25111128 这里面的第一个回答&#xff0c;有一幅图&#xff1a; 只要理解的四叉树的构建&#xff0c;对于八叉树的构建原理类比方法完全一样&#xff1a;对于二维平面内的随机分布的这些点&…

uniapp在小程序连接webScoket实现余额支付

webScoket文档&#xff1a;uni.connectSocket(OBJECT) | uni-app官网 /plugins/event.js const Dep function() {this.Evens Object.create(null); } class Event {constructor({dep new Dep()} {}) {if (dep.constructor Object && Object.keys(dep).length 0…

飞塔防火墙只允许国内IP访问

飞塔防火墙只允许国内IP访问 方法1 新增地址对象&#xff0c;注意里面已经细分为中国内地、中国香港、中国澳门和中国台湾 方法2 手动新增国内IP的对象组&#xff0c;目前好像一共有8632个&#xff0c;每个对象最多支持600个IP段

超详细ensp配置VRRP和MSTP协议

一、简介 1、什么是VRRP&#xff1a; &#xff08;1&#xff09;VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;的概念&#xff1a; VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;指的是一种实现路由器冗余备份的协议&#xff0c;常用于…

东风破捉妖师横空出世

一.异动拉升实时监测 东风破就像是一个大盘监测平台&#xff0c;是现实版的捉妖师&#xff0c;一旦妖股横空出世&#xff0c;就会在东风破面前原形毕露。东风破AI算法逻辑是监测存在异动拉升的股票&#xff0c;实时分析上证&#xff0c;深证&#xff0c;创业和科创板的股票数据…

结构体struct的一些细节

struct过于灵活&#xff0c;导致一些细节问题。 下面对有关struct的定义的细节展开讨论。 注意&#xff1a;c/c环境下&#xff0c;union和struct的定义和使用基本是一样的。 定义方式1 struct { ...}abc;特点&#xff1a; 只定义了一个abc变量&#xff0c;而没有定义结构体…

C++的类功能整合

1. 类的基本概念 类是面向对象编程的核心&#xff0c;它封装了数据和操作数据的函数。 #include <iostream> using namespace std;class MyClass { public:int publicData;void publicFunction() {cout << "Public function" << endl;}private:i…

一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。-多语言

目录 C 语言实现 Python 实现 Java 实现 Js 实现 题目&#xff1a;一个5位数&#xff0c;判断它是不是回文数。即12321是回文数&#xff0c;个位与万位相同&#xff0c;十位与千位相同。 程序分析&#xff1a;学会分解出每一位数。 C 语言实现 #include <stdio.h>…

Scala—数组(不可变数组Array、可变数组ArrayBuffer)用法详解

Scala集合概述-链接 大家可以点击上方链接&#xff0c;先对Scala的集合有一个整体的概念&#x1f923;&#x1f923;&#x1f923; 在 Scala 中&#xff0c;数组是一种特殊的集合类型&#xff0c;可以是可变的也可以是不可变的。 1. 不可变数组 在 Scala 中&#xff0c;不可变…

数据库期末复习题库

1. Mysql日志功能有哪些? 记录日常操作和错误信息&#xff0c;以便了解Mysql数据库的运行情况&#xff0c;日常操作&#xff0c;错误信息和进行相关的优化。 2. 数据库有哪些备份方法 完全备份&#xff1a;全部都备份一遍表备份&#xff1a;只提取数据库中的数据&#xff0…

TsingtaoAI具身智能高校实训方案通过华为昇腾技术认证

日前&#xff0c;TsingtaoAI推出的“具身智能高校实训解决方案-从AI大模型机器人到通用具身智能”基于华为技术有限公司AI框架昇思MindSpore&#xff0c;完成并通过昇腾相互兼容性技术认证。 TsingtaoAI&华为昇腾联合解决方案 本项目“具身智能高校实训解决方案”以实现高…

如何使用 Chrome 无痕浏览模式访问网站?

无痕浏览&#xff08;Incognito Mode&#xff09;是 Google Chrome 浏览器提供的一种隐私保护功能&#xff0c;它允许用户在一个独立的会话中浏览网页&#xff0c;而不会记录用户的浏览历史、下载历史、表单数据等。这对于希望保护个人隐私或进行临时性匿名浏览的用户来说非常有…

如何从 Hugging Face 数据集中随机采样数据并保存为新的 Arrow 文件

如何从 Hugging Face 数据集中随机采样数据并保存为新的 Arrow 文件 在使用 Hugging Face 的数据集进行模型训练时&#xff0c;有时我们并不需要整个数据集&#xff0c;尤其是当数据集非常大时。为了节省存储空间和提高训练效率&#xff0c;我们可以从数据集中随机采样一部分数…

无人值守工业控制系统网络安全解决方案

一、现状概述 随着物联网、工业大数据、工业云等技术的发展&#xff0c;工业互联网时代即将到来&#xff0c;工业大数据分析、工业数据可视化、工业生产智能优化分析成为当下发展趋势&#xff0c;使得基于数字技术、网络互连技术的智能监控、无人值守成为可能。目前&#xff0…

.NET 8 实现通用权限开发框架

在.NET 8中实现一个通用权限开发框架&#xff0c;不仅可以提高开发效率&#xff0c;还能保证系统的安全性和可扩展性。本文将介绍如何使用.NET 8构建一个通用权限框架&#xff0c;并提供实例代码展示。 1. 框架概述 一个通用权限开发框架通常包括用户管理、角色管理、权限管理等…

网络安全体系与网络安全模型

4.1 网络安全体系概述 4.1.1 网络安全体系概述 一般面言&#xff0c;网络安全体系是网络安全保障系统的最高层概念抽象&#xff0c;是由各种网络安全单元按照一定的规则组成的&#xff0c;共同实现网络安全的目标。网络安全体系包括法律法规政策文件、安全策略、组织管理、技术…

彻底理解如何保证ElasticSearch和数据库数据一致性问题

一.业务场景举例 需求&#xff1a; 一个卖房业务&#xff0c;双十一前一天&#xff0c;维护楼盘的运营人员突然接到合作开发商的通知&#xff0c;需要上线一批热门的楼盘列表&#xff0c;上传完成后&#xff0c;C端小程序支持按楼盘的名称、户型、面积等产品属性全模糊搜索热门…