机载视频流回传+编解码方案
无线网络,低带宽场景。不能直接转发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 解码器(libx264
或 libavcodec
),如何设置解码器为硬件解码器?
发送端: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显示窗口,可以加入点选等功能。
相关文章:
机载视频流回传+编解码方案
无线网络,低带宽场景。不能直接转发ROS raw image(10MB/s),而要压缩(编码)后再传输。可以用rtsp的udp传输或者直接传输话题,压缩方法有theora(ROS image_transport默认支持ÿ…...

Ubuntu 20.04 Server版连接Wifi
前言 有时候没有网线口插网线或者摆放电脑位置不够时,需要用Wifi联网。以下记录Wifi联网过程。 环境:Ubuntu 20.04 Server版,无UI界面 以下操作均为root用户,如果是普通用户,请切换到root用户,或者在需要权…...

【VRChat 改模】开发环境搭建:VCC、VRChat SDK、Unity 等环境配置
一、配置 Unity 相关 1.下载 UnityHub 下载地址:https://unity.com/download 安装打开后如图所示: 2.下载 VRChat 官方推荐版本的 Unity 跳转界面(VRChat 官方推荐页面):https://creators.vrchat.com/sdk/upgrade/…...

人工智能的微积分基础
目录 编辑 引言 微积分的基本概念 1. 导数 2. 积分 3. 微分方程 微积分在人工智能中的应用 1. 机器学习中的优化 2. 反向传播算法 3. 概率与统计 4. 控制理论 5. 自然语言处理中的梯度 6. 计算机视觉中的积分 7. 优化算法中的微积分 8. 微分几何在深度学习中的…...
Android 基础类(01)- Thread类 - readyToRun和threadLoop
一、前言: 在阅读AOSP代码过程中,我们经常会看到Thread子类重写两个方法:readyToRun和threadLoop,不清楚的同学,可能在这儿连调用逻辑都搞不清楚了,因为找不到谁调用了它。我这儿先不去深究Thread内部逻辑…...
C++设计模式之构造器
动机 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。 如何…...

红日靶场-5
环境搭建 这个靶场相对于前几个靶场来说较为简单,只有两台靶机,其中一台主机是win7,作为我们的DMZ区域的入口机,另外一台是windows2008,作为我们的域控主机,所以我们只需要给我们的win7配置两张网卡&#…...

做异端中的异端 -- Emacs裸奔之路3: 上古神键Hyper
谈一下快捷捷冲突的问题。 Emacs几乎穷尽所有组合键 我用下面命令,在Fundamental模式下,枚举所有绑定。 (defun keymap-lookup-test-fn(); printable keys(setq printable-chars (number-sequence 33 126))(setq i 0)(while (< i (length printable…...

Java多线程介绍及使用指南
“多线程”:并发 要介绍线程,首先要区分开程序、进程和线程这三者的区别。 程序:具有一定功能的代码的集合,但是是静态的,没有启动运行 进程:启动运行的程序【资源的分配单位】 线程:进程中的…...

HarmonyOS 5.0应用开发——列表(List)
【高心星出品】 文章目录 列表(List)列表介绍列表布局设置主轴方向设置交叉轴方向 列表填充分组列表填充 滚动条位置设置滚动位置滚到监听 列表项侧滑 列表(List) 列表介绍 列表作为一种容器,会自动按其滚动方向排列…...
自动化电气行业的优势和劣势是什么
优势 市场需求广泛: 自动化电气技术广泛应用于电力系统、制造业、交通、农业等多个领域,随着智能化、数字化趋势的加强,其市场需求持续增长。在智能制造、智能电网等领域,自动化电气技术更是发挥着关键作用,推动了行业…...
第 42 章 - Go语言 设计模式
在Go语言中,设计模式是一种被广泛接受的解决常见问题的最佳实践。这些模式可以分为三类:创建型模式、结构型模式和行为型模式。下面我将结合案例以及源代码对这三种类型的设计模式进行详细讲解。 创建型模式 创建型模式主要关注对象的创建过程…...
【机器学习】---大语言模型
引言:开启大语言模型的奇幻旅程 近年来,人工智能(AI)领域正在经历一场前所未有的技术革命,而其中最耀眼的明星莫过于大语言模型(Large Language Models, LLMs)。这些模型,犹如现代科…...

挑战用React封装100个组件【002】
项目地址 https://github.com/hismeyy/react-component-100 组件描述 组件适用于需要展示图文信息的场景,比如产品介绍、用户卡片或任何带有标题、描述和可选图片的内容展示 样式展示 代码展示 InfoCard.tsx import ./InfoCard.cssinterface InfoCardProps {t…...

MarkDown-插入图片-图片url地址的生成获取方法
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、url地址是什么二、如何获取图片的url地址1.了解图床2.使用图床获取图片URL地址2.1进入网站后,点击右下角“Select Image.”按钮,即可…...

插值、拟合和回归分析的相关知识
目录 0 序言 1 分段线性插值 2 多项式插值 3 样条插值 4 最小二乘拟合 5 多元线性回归 0 序言 在生产实践和科学研究中,常常有这些问题: 插值问题:由实验或测量得到变量间的一批离散样点,要求得到变量之间的函数关系或得到样点之外的…...

【小白学机器学习42】进行多次抽样,样本的分布参数和总体的分布参数的关系
目录 1 进行多次抽样,样本的分布参数和总体的分布参数的关系 2 样本容量越大,多次抽样的样本的分布参数和总体的分布参数的关系 3 随着样本容量增大,多次抽样均值的 平均值,方差的变化 4 随着样本容量增大,多次抽…...
链动星海 质引未来|中信银行加码科技金融 “接力式”服务助力“新质生产力”释放
11月26日,第二届中国国际供应链促进博览会(以下简称链博会)在北京中国国际展览中心开幕。中信集团以“链动星海 质引未来”为主题,亮相先进制造链展区。此次布展由中信金控主办、中信银行承办,携手中信证券、中信建投证…...
黑马2024AI+JavaWeb开发入门Day02-JS-VUE飞书作业
视频地址:哔哩哔哩 讲义作业飞书地址:飞书 一、作业1 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge">&l…...

云计算基础-期末复习
第一章:云计算概论 一、云计算的定义与特征 1. 定义: 云计算是一种通过网络以按需、可扩展的方式获取计算资源和服务的模式。它将计算资源视为一种公用事业,用户可以根据需求动态获取和释放资源,而无需了解底层基础设施的细节。…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...