rtsp_topic

news2025/7/15 5:23:19

1.打开推流服务器

2.接收ros图像

3.ffmpeg命令推流

pushflow.cpp

 

// 1.包含头文件;
#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"
#include <iostream>
#include <csignal>
#include <opencv4/opencv2/opencv.hpp>
#include <cv_bridge/cv_bridge.h>
#include <sensor_msgs/msg/image.hpp>
using namespace std::chrono_literals;
using std::placeholders::_1;

FILE *fp = nullptr;
 
// 3.定义节点类;
class MinimalSubscriber : public rclcpp::Node
{
  public:
    MinimalSubscriber(std::string name)
    : Node(name)
    {
      // 3-1.创建订阅方;
      //subscription_ = this->create_subscription<std_msgs::msg::String>("rtsptopic", 10, std::bind(&MinimalSubscriber::topic_callback, this, _1));
      
      std::string rtspUrl = "rtsp://127.0.0.1:8554/test";
      std::stringstream command;
      command << "ffmpeg "
              << "-re "
              << "-f rawvideo "
              << "-vcodec rawvideo "
              << "-pix_fmt bgr24 "
              << "-s 1080x720 "
              << "-r 19 "
              << "-i - "
              << "-an "
              << "-q:v 1 "
              //<<"-c:v libx264 "
              << "-f rtsp "
              << rtspUrl;//<<" "
              //<< "-c copy";

      fp = popen(command.str().c_str(),"w");
     
      

      //if(fp!= nullptr){
      subscription_ = this->create_subscription<sensor_msgs::msg::CompressedImage>("detectResultMatTopic", 10, std::bind(&MinimalSubscriber::topic_callback, this, _1));
      //subscription_ = this->create_subscription<sensor_msgs::msg::CompressedImage>("pubImageTopic", 10, std::bind(&MinimalSubscriber::topic_callback, this, _1));
      //pclose(fp);
       // }

    }

  private:
    
    rclcpp::Subscription<sensor_msgs::msg::CompressedImage>::SharedPtr subscription_;
    // 3-2.处理订阅到的消息;

    void topic_callback(const sensor_msgs::msg::CompressedImage::ConstPtr  msg) const
    {
      cv_bridge::CvImagePtr cv_ptr_compressed = cv_bridge::toCvCopy(msg,sensor_msgs::image_encodings::BGR8);
      cv::Mat imgCallback = cv_ptr_compressed->image;

      cv::Mat des1080;

      cv::resize(imgCallback, des1080, cv::Size(1080, 720), 0, 0, cv::INTER_NEAREST);
      //cv::imshow("imgCallbackrtsp",des1080);
      //cv::waitKey(1);

      fwrite(des1080.data,sizeof(char),des1080.total()*des1080.elemSize(),fp);
    }
    
};


 
int main(int argc, char * argv[])
{
  // 2.初始化 ROS2 客户端;
  rclcpp::init(argc, argv);
  // 4.调用spin函数,并传入节点对象指针。
  auto node = std::make_shared<MinimalSubscriber>("rtsp");
  rclcpp::spin(node);

  //rclcpp::init(argc, argv);
  // 4.调用spin函数,并传入节点对象指针。
  //auto node = std::make_shared<MinimalSubscriber>("detect");
  //rclcpp::spin(node);
  //rclcpp::spin(std::make_shared<MinimalSubscriber>());
  // 5.释放资源;
  //rclcpp::shutdown();
  // 5.释放资源;
  rclcpp::shutdown();
  return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.5)
project(rtsp_topic)

# Default to C99
if(NOT CMAKE_C_STANDARD)
  set(CMAKE_C_STANDARD 99)
endif()

# Default to C++14
if(NOT CMAKE_CXX_STANDARD)
  set(CMAKE_CXX_STANDARD 14)
endif()

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  add_compile_options(-Wall -Wextra -Wpedantic)
endif()

# find dependencies
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)

find_package(cv_bridge REQUIRED)
find_package(image_transport)
find_package(sensor_msgs REQUIRED)

find_package(OpenCV REQUIRED)
include_directories( ${OpenCV_INCLUDE_DIRS})

add_executable(rtsp
  src/pushflow.cpp
)

target_link_libraries(rtsp ${OpenCV_LIBS})




# ros
target_link_libraries(rtsp
  ${rclcpp_LIBRARIES} 
)

ament_target_dependencies(rtsp
  rclcpp
  std_msgs
  sensor_msgs 
  cv_bridge 
  OpenCV
  image_transport
)
 


# 安装可执行文件
install(TARGETS rtsp
  DESTINATION lib/${PROJECT_NAME}
)

ament_package()

package.xml

<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
  <name>rtsp_topic</name>
  <version>0.0.0</version>
  <description>TODO: Package description</description>
  <maintainer email="jetson@todo.todo">jetson</maintainer>
  <license>TODO: License declaration</license>

  <buildtool_depend>ament_cmake</buildtool_depend>

  <depend>rclcpp</depend>
  <depend>std_msgs</depend>

  <test_depend>ament_lint_auto</test_depend>
  <test_depend>ament_lint_common</test_depend>

  <export>
    <build_type>ament_cmake</build_type>
  </export>
</package>

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

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

相关文章

什么是好的数据库设计?

良好的数据库设计对确保数据的准确性、一致性和完整性至关重要&#xff0c;同时确保数据库高效、可靠且易于使用。设计必须解决快速且轻松地存储和检索数据的问题&#xff0c;同时稳定地处理大量数据。经验丰富的数据库设计师可以创建一个强大、可扩展和安全的数据库架构&#…

3.1 SQL概述

思维导图&#xff1a; 前言&#xff1a; 前言笔记&#xff1a;第3章 关系数据库标准语言SQL - **SQL的定义**&#xff1a; - 关系数据库的标准和通用语言。 - 功能强大&#xff0c;不仅限于查询。 - 功能覆盖&#xff1a;数据库模式创建、数据插入/修改、数据库安全性与…

爱德华、书客、柏曼的护眼台灯谁的护眼能力更好?三款护眼台灯真实测评

为人父母以后最大的感受就是希望孩子能够健康成长&#xff0c;而且现在生活水平也变好了&#xff0c;都想尽可能给孩子最好的&#xff0c;什么学习专用的书桌啊、柜子啊、学习用品等等。但是随着孩子慢慢步入更高的年级&#xff0c;作业也在不断增加&#xff0c;孩子完成作业的…

处理ElementUI组件默认样式多次重复问题

问题截图&#xff1a; 解决办法&#xff1a; 在postcss.config.js文件里添加配置项&#xff1a; module.exports {plugins: {autoprefixer: {},cssnano: {} //添加这行代码}, } 处理结果&#xff1a; github issues&#xff1a; https://github.com/ElemeFE/element/is…

如何使用前端包管理器(如npm、Yarn)?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

React js原生 详解 HTML 拖放 API(鼠标拖放功能)

最近碰到了个需求&#xff0c;大概就是要通过可视化拖拽的方式配置一个冰柜&#xff0c;需要把预设好的冰柜内部架子模板一个个拖到冰箱内。一开始的想法是用鼠标事件&#xff08;mousedown、mouseup等&#xff09;那一套去实现&#xff0c;能实现但是过程过于复杂&#xff0c;…

Linux 回顾总结

学习前提&#xff08;环境搭建&#xff09;&#xff1a;RHCSA Linux环境搭建-CSDN博客 目录 一、shell 二、文件 三、用户和组管理 四、权限 五、软件 六、网络 七、磁盘 一、shell Linux的操作界面常称为Shell&#xff0c;Shell是操作系统提供给用户使用的界面&#xf…

【Python】PaddleOCR文字识别国产之光 从安装到pycharm中测试 (保姆级图文)

目录 官方项目地址Python环境搭建&#xff08;也就是使用Anaconda的python&#xff09;1. 安装Anaconda1. 打开终端并创建conda环境 安装PaddlePaddle&#xff08;CPU演示&#xff09;安装PaddleOCR whl包如果安装shapely库报错&#xff08;我没有报错&#xff0c;其他类似库安…

MongoDB 索引和常用命令

一、基本常用命令 1.1 案例需求 存放文章评论的数据存放到 MongoDB 中&#xff0c;数据结构参考如下&#xff0c;其中数据库为 articledb&#xff0c; 专栏文章评论 comment 字段名称 字段含义 字段类型 备注 _id ID ObjectId或String Mongo的主键的字段 articlei…

【Mybatis】基于Mybatis插件+注解,实现敏感数据自动加解密

一、介绍 业务场景中经常会遇到诸如用户手机号&#xff0c;身份证号&#xff0c;银行卡号&#xff0c;邮箱&#xff0c;地址&#xff0c;密码等等信息&#xff0c;属于敏感信息&#xff0c;需要保存在数据库中。而很多公司会会要求对数据库中的此类数据进行加密存储。 敏感数据…

光伏三相并网逆变器的控制策略与性能分析

微❤关注“电击小子程高兴的MATLAB小屋”获得资料&#xff08;专享优惠&#xff09; 光伏三相并网逆变器的控制策略与性能分析 引言&#xff1a; 随着可再生能源的日益重视和发展&#xff0c;光伏发电系统在电力系统中的地位越来越重要。其中&#xff0c;光伏三相并网逆变器…

什么台灯最好学生晚上用?开学适合孩子学习的台灯

作为学龄期儿童的家长&#xff0c;最担心的就是孩子长时间学习影响视力健康。无论是上网课、写作业、玩桌游还是陪伴孩子读绘本&#xff0c;都需要一个足够明亮的照明环境&#xff0c;因此选购一款为孩子视力发展保驾护航的台灯非常重要。推荐五款适合孩子学习的台灯。 1. 书客…

distcc分布式编译

distcc https://gitee.com/bison-fork/distcc.git 下载工具链 mingw&#xff0c;https://www.mingw-w64.org/downloads/#w64devkitperl&#xff0c;https://strawberryperl.com/releases.html免安装zip版本&#xff0c;autoconf等脚本依赖perlautoconf、automake&#xff0c…

软件测试学习(四)自动测试和测试工具、缺陷轰炸、外包测试、计划测试工作、编写和跟踪测试用例

目录 自动测试和测试工具 工具和自动化的好处 测试工具 查看器和监视器 驱动程序 桩 压力和负载工具 干扰注入器和噪声发生器 分析工具 软件测试自动化 宏录制和回放 可编程的宏 完全可编程的自动测试工具 随机测试&#xff1a;猴子和大猩猩 使用测试工具和自动…

SpringBoot 前端406 后端Could not find acceptable representation

原因:返回对象没有get方法,无法转成JSON格式

2023年10月13日历史上的今天大事件早读

54年10月13日罗马帝国皇帝克劳狄一世逝世 467年10月13日北魏孝文帝拓跋宏出生 982年10月13日辽国皇帝辽景宗逝世 1847年10月13日李沅发起义 1884年10月13日国际标准时间日 1925年10月13日前英国首相撒切尔夫人出生 1927年10月13日鲁丝-埃尔德飞渡大西洋失败 1928年10月1…

电脑怎么剪辑视频?高手分享的独家秘诀

视频剪辑是一项有趣而具有创造性的活动&#xff0c;可以帮助您将录制的视频片段转化为有趣、有启发性的作品。无论您是想创建家庭影片、Vlog视频、教程&#xff0c;还是其他任何类型的视频&#xff0c;掌握视频剪辑技巧都是必要的。那电脑怎么剪辑视频呢&#xff1f;在本篇文章…

竞赛 深度学习 机器视觉 车位识别车道线检测 - python opencv

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习 机器视觉 车位识别车道线检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) …

QTableWidget中cell 和 item区别

1.cell&#xff1a;某行某列中单元格。cell相当于一个容器&#xff0c;如箱子。里面不管有没有东西&#xff0c;cell都在那里。 2.item&#xff1a;item是某行某列单元格中的内容&#xff0c;即cell箱子中所放置的东西&#xff0c;即实实在在的东西。 通过调用 itemClicked()…

VMware虚拟机安装Linux教程(史上最全)

前言 许多想学网络安全的小伙伴&#xff0c;因为自己电脑是Windows系统的&#xff0c;并且电脑里面有很多重要文件&#xff0c;一般这种情况最好是安装一个虚拟机&#xff0c;然后虚拟机安装Linux的操作系统&#xff0c;这样就不会对原本的系统和文件产生影响。 需要网络安全…