ardupilot开发 --- RTSP视频流 篇

在这里插入图片描述

我年轻时很穷,努力了几年,终于不再年轻了

  • 0. 一些概念
  • 参考文献

0. 一些概念

  • RTSP服务、RTSP推流、RTSP拉流,缺一不可,尤其是RTSP服务。
  • RTSP服务器、RTSP客户端。推流和拉流都是由客户端发起,向服务器发起对应的请求。RTSP推流一般由RTSP相机或app发起,RTSP拉流一般由上位机的app发起。
  • Ubuntu搭建RTSP服务器的方式有以下几种方式:
    • live555
      live555 Media Server

    • gstreamer
      gst-rtsp-server包
      c++编写
      注意:安装gstreamer-1.0时并不会自动安装gst-rtsp-server,gst-rtsp-server需要另行通过make方式安装,如下:

      git clone  -b 1.8 https://github.com/GStreamer/gst-rtsp-server.git  //下载源码
      cd gst-rtsp-server      
      git submodule update --init --recursive
      ./autogen.sh
      sudo make
      sudo make install
      
    • FFmpeg
      搭建不了服务,只能推流或拉流!

    • rtsp-simple-server
      go语言编写

    • EasyDarwin
      easy-darwin

    • ZLMediaKit
      推荐使用!!
      使用文档:https://github.com/ZLMediaKit/ZLMediaKit/wiki/快速开始

  • RTSP服务器默认端⼝是554,在客户端SETUP的时候会把⾃身的RTP和RTCP端⼝告知服务器。在RTSP的session建⽴后,会使⽤RTP/RTCP在约定好的端⼝上传输数据。
  • 向服务端推流框图
    在这里插入图片描述
  • 从服务端拉流框图
    在这里插入图片描述
  • 在Ubuntu上搭建RTSP服务器
    推荐使用ZLMediaKit,以Ubuntu为例:
    使用文档:https://github.com/ZLMediaKit/ZLMediaKit/wiki/快速开始
    • 下载
    git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
    cd ZLMediaKit
    #千万不要忘记执行这句命令
    git submodule update --init
    # 安装依赖,可选。参考文档
    
    • 编译
    cd ZLMediaKit
    mkdir build
    cd build
    #macOS下可能需要这样指定openss路径:cmake .. -DOPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2j/
    cmake ..
    make -j4
    
    • 运行
    cd ZLMediaKit/release/linux/Debug
    #通过-h可以了解启动参数
    ./MediaServer -h
    # 以守护进程模式启动:主进程关闭自动重启。需要加sudo,因为544端口需要管理员权限!!!!
    sudo ./MediaServer -d &
    # 设置log打印等级:0~4,等级越高越简洁,下图是等级0
    sudo ./MediaServer -d -l 0 &
    
    在这里插入图片描述
    • 关闭服务
    sudo killall -2 MediaServer
    
    • log
      log保存在ZLMediaKit/release/linux/Debug/log中。

    • 推流测试
      要先开启RTSP服务再推流不然会报类似下面的错误:
      在这里插入图片描述
      用ffmpeg 推:

      # ZLMediaKit的RTSP服务默认端口是554,可缺省!/live是参数之一,不能少!!!
      ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test
      

      推流成功后查看ZLMediaKit的log可以得到更多有用的信息:
      在这里插入图片描述

    • 拉流播放测试

      ffplay -rtsp_transport tcp -i rtsp://127.0.0.1:554/live/test
      

      注意:rtsp地址要与推流地址保持一致,不然无法拉取和播放!!注意live是参数不能漏!!

  • 推流
    要先开启RTSP服务再推流不然会报类似下面的错误:
    在这里插入图片描述
    用ffmpeg 推:
    # ZLMediaKit的RTSP服务默认端口是554,可缺省!/live是参数之一,不能少!!!
    ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test
    
    推流成功后查看ZLMediaKit的log可以得到更多有用的信息:
    在这里插入图片描述
  • 拉流并播放
    gstreamer:
    gst-launch-1.0 playbin uri=rtsp://127.0.0.1:554/live/test
    gst-launch-1.0 playbin uri=rtsp://admin:WANGfengtu12@10.0.20.190:554/client0x
    gst-launch-1.0 playbin uri=rtsp://admin:WANGfengtu12@10.0.20.61:554/client1x
    gst-launch-1.0 rtspsrc location=rtsp://admin:WANGfengtu12@10.0.20.70:554/client0x ! rtph264depay ! h264parse ! decodebin ! autovideosink
    gst-launch-1.0 rtspsrc location=rtsp://admin:WANGfengtu12@10.0.20.61:554/client1x ! rtph264depay ! h264parse ! decodebin ! autovideosink
    
    vlc:
    vlc rtsp://127.0.0.1:554/live/test
    
    ffmpeg:
    ffplay -rtsp_transport tcp -i rtsp://127.0.0.1:554/live/test
    
  • opencv拉取RTSP视频流
    cv::VideoCapture cap;
    cap.open("rtsp://admin:WANGfengtu12@10.0.20.61:554/client1x",cv::CAP_GSTREAMER);
    cv::Mat frame;
    while(cv::waitKey(1) < 0) // Press any key to exit
    {if (!cap.read(frame)){cerr << "No frames grabbed!\n";break;}
    }
    }
    
    待续…
  • 借鉴的一些例子
    使用ZLMediaKit搭建RTSP服务,使用ffmpeg推流
    https://blog.csdn.net/jaket5219999/article/details/135228010
    使用gst-rtsp-server搭建RTSP服务,使用gstreamer推流和拉流:
    https://blog.csdn.net/Aidam_Bo/article/details/114398506
    https://blog.csdn.net/zhngyue123/article/details/126362312

在这里插入图片描述

在这里插入图片描述

参考文献

https://www.avdancedu.com/e5aee947/
https://blog.csdn.net/weixin_37210821/article/details/131406193

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

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

相关文章

leetcode 动态规划(基础版)删除并获得点数

题目&#xff1a; 给你一个整数数组 &#xff0c;你可以对它进行一些操作。nums 每次操作中&#xff0c;选择任意一个 &#xff0c;删除它并获得 的点数。之后&#xff0c;你必须删除 所有 等于 和 的元素。nums[i]nums[i]nums[i] - 1nums[i] 1 开始你拥有 个点数。返…

【千帆AppBuilder】你有一封邮件待查收|未来的我,你好吗?欢迎体验AI应用《未来信使》

我在百度智能云千帆AppBuilder开发了一款AI原生应用&#xff0c;快来使用吧&#xff01;「未来信使」&#xff1a;https://appbuilder.baidu.com/s/Q1VPg 目录 背景人工智能未来的信 未来信使功能介绍Prompt组件 千帆社区主要功能AppBuilderModelBuilder详细信息 推荐文章 未来…

服务器返回的Json出现了$ref

这是因为返回的对象嵌入了另一个对象 , 但是实际后台业务中它们是不同的对象 . 这个时候可以关闭循环引用来解决这个问题. package cn.com.baidu;import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson.support.spring.FastJsonHttpMessageC…

LUA移植到STM32F4,移植REPL,通过RTT Viewer交互

概述 站内移植LUA多数是使用C函数调用LUA&#xff0c;并没有移植REPL交互端口 本文将REPL也移植进去&#xff0c;做了简单的适配 LUA源码使用标准C库函数&#xff0c;如fgets&#xff0c;fwrite等&#xff0c;在嵌入式环境中要使用fgets&#xff0c;fwrite等C库函数&#xff…

头歌资源库(13)背包问题

一、 问题描述 二、算法思想 这是一个背包问题&#xff0c;可以使用动态规划算法来解决。具体思路如下&#xff1a; 定义一个二维数组dp&#xff0c;dp[i][j]表示前i个物品在背包容量为j时能获取的最大价值。初始化dp数组的第一行和第一列为0&#xff0c;表示当只有一个物品或…

【吊打面试官系列-Mysql面试题】SQL 语言包括哪几部分?每部分都有哪些操作关键字?

大家好&#xff0c;我是锋哥。今天分享关于 【SQL 语言包括哪几部分&#xff1f;每部分都有哪些操作关键字&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; SQL 语言包括哪几部分&#xff1f;每部分都有哪些操作关键字&#xff1f; SQL 语言包括数据定义(DDL)、…

大屏适配方案汇总

1. 适配方案1&#xff1a;rem font-size 我们都知道&#xff0c;在 css 中 1rem 等于 html 根元素设定的 font-size 的 px 值&#xff0c;通过动态的修改html 根元素的 font-size 大小就能动态的改变 rem 的大小&#xff0c;从而实现适配。 原理 动态设置 HTML 根字体大小将…

Android开启HTTP服务

需求&#xff1a;通过手机给设备升级固件&#xff0c;设备有WIFI 方案&#xff1a;升级包放到APP可以访问的目录&#xff0c;手机开热点并启动一个HTTP服务&#xff0c;设备连接手机热点&#xff0c;另外&#xff0c;设备端开启一个 telnet 服务&#xff0c;手机通过 telnet 登…

制作一个苹果软件自动运行工具需要用到的源代码!

在数字化时代的浪潮中&#xff0c;自动化运行工具扮演着越来越重要的角色&#xff0c;这些工具可以极大地提高工作效率&#xff0c;减少人为操作的繁琐和错误。 在苹果软件生态系统中&#xff0c;制作一个自动运行工具同样具有广泛的应用前景&#xff0c;本文将围绕“制作一个…

模拟原神圣遗物系统-小森设计项目,需求分析

需求分析 我操控某个角色的圣遗物时发现&#xff0c;一开始玩啥也不懂慢慢了解&#xff0c;今天才想起要不做一个 &#xff0c;然后开始想需求 跟Ai聊技术 聊着聊着 发现圣遗物 这个东西有点意思 本来今天打算写一下数据库 的外键想起了一些高兴的事情&#xff08;美人鱼&#…

C# WinForm —— 36 布局控件 GroupBox 和 Panel

1. 简介 两个可以盛放其他控件的容器&#xff0c;可以用于把不同的控件分组&#xff0c;一般不会注册事件 GroupBox&#xff1a;为其他控件提供可识别的分组。可通过Text属性设置标题&#xff1b;有边框&#xff1b;没有滚动条&#xff0c;一般用于按功能分组 Panel&#xff…

[BFS广搜]迷阵

描述 小Z每年都会为程设课出一道大作业&#xff0c;荼毒学弟学妹&#xff0c;可谓罪大恶极不可饶恕。 终于有一天&#xff0c;神明也看不下去了&#xff0c;他唤醒上古四大神兽&#xff0c;决定围困小Z&#xff0c;威慑一番。 于是&#xff0c;在小Z下一次醒来时&#xff0c;他…

SpringBoot+Maven项目的配置构建

文章目录 1、application.properties2、pom.xml 1、application.properties 也可使用yml yaml #静态资源 spring.mvc.static-path-pattern/images/** #上传文件大小设置 spring.http.multipart.max-file-size10MB spring.http.multipart.max-request-size10MBspring.mvc.path…

什么是交错计算,有哪些场景会出现交错计算

交错计算指的是在编程技术中&#xff0c;多个进程或任务以交替或交织的方式执行&#xff0c;共享资源并轮流取得进展。这种做法对于提高系统效率特别有用&#xff0c;确保没有单一资源&#xff08;如CPU核心&#xff09;在有其他任务可以使用时保持空闲。 在计算领域&#xff…

Sui的Fastcrypto加密库刷新速度记录

Sui使用的加密库Fastcrypto打破了许多速度记录&#xff0c;Mysten Labs在基准测试和安全分析中的工作修复了许多安全漏洞&#xff0c;同时通过识别新的优化技巧为创新开辟了道路。 最近在伦敦帝国理工学院举行的国际性能工程会议&#xff08;ICPE&#xff09;基准测试研讨会上…

【LeetCode:394. 字符串解码 + 栈 | 递归】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

C# —— while循环语句

作用 让顺序执行的代码 可以停下来 循环执行某一代码块 // 条件分支语句: 让代码产生分支 进行执行 // 循环语句 : 让代码可以重复执行 语法 while循环 while (bool值) { 循环体(条件满足时执行的代码块) …

智慧路灯:照亮未来城市的智慧之光

智慧路灯&#xff0c;顾名思义&#xff0c;是在传统路灯基础上集成物联网、大数据、云计算、人工智能等现代信息技术的新型照明系统。它不仅提供节能高效的照明服务&#xff0c;更成为城市信息采集、传输、发布的载体&#xff0c;以及多种增值服务的平台。 核心功能与技术创新 …

聊聊 Mybatis 动态 SQL

这篇文章&#xff0c;我们聊聊 Mybatis 动态 SQL &#xff0c;以及我对于编程技巧的几点思考 &#xff0c;希望对大家有所启发。 1 什么是 Mybatis 动态SQL 如果你使用过 JDBC 或其它类似的框架&#xff0c;你应该能理解根据不同条件拼接 SQL 语句有多痛苦&#xff0c;例如拼…