当前位置: 首页 > news >正文

使用 MediaMTX 和 FFmpeg 推拉 RTSP 流媒体

实时流传输协议 RTSP(Real-Time Streaming Protocol)是 TCP/IP 协议体系中的一个应用层协议,由哥伦比亚大学、网景和 RealNetworks 公司提交的 IETF RFC 标准。该协议定义了一对多应用程序如何有效地通过 IP 网络传送多媒体数据。RTSP 在体系结构上位于 RTP 和 RTCP 之上,它使用 TCP 或 UDP 完成数据传输。

一、RTSP 适用场景:

  1. 视频监控和安防系统:RTSP 在视频监控领域具有广泛的应用。它可以实现监控视频的实时传输、回放、点播和存储等功能,适用于大规模的视频监控系统,如城市安防、企事业单位、交通监控等场景。
  2. 直播服务:RTSP 在直播服务中也发挥着重要作用。它可以实现音视频数据的实时传输和控制,确保直播的流畅性和稳定性。同时,RTSP 还支持多种媒体格式和编码方式,适应不同平台和设备的播放需求。
  3. 点播服务:除了直播外,RTSP 还适用于点播服务。用户可以通过 RTSP 协议向服务器请求特定的音视频资源,进行播放和观看。这种方式适用于视频库、在线教育、远程会议等场景。
  4. 视频会议和远程教育:RTSP 在视频会议和远程教育领域也具有一定的应用价值。它可以实现音视频数据的实时传输和控制,确保会议的顺利进行和远程教育的有效性。
  5. 流媒体服务器与媒体播放器之间的通信:RTSP 协议是流媒体服务器与媒体播放器之间的主要通信协议,用于建立和控制媒体会话。通过 RTSP 协议,媒体播放器可以向流媒体服务器请求媒体数据,实现音视频内容的播放。

二、FFmpeg 操作 RTSP 的参数:

FFmpeg 是一个非常强大的开源工具,可以用来处理音频和视频,也可以进行 RTSP 视频流的推拉。

要使用 FFmpeg 进行 RTSP 视频流的推拉,需要首先确保系统已经安装了 FFmpeg。在大多数 Linux 发行版中,可以通过包管理器(如 apt 或 yum)来安装。在 Windows 或 Mac 上,需要从 FFmpeg 的官方网站下载并安装。

安装完成后,可以通过下面的命令,来查询 FFmpeg 操作 RTSP 的参数:

        ffmpeg -h demuxer=RTSP

RTSP demuxer AVOptions:-initial_pause     <boolean>    .D......... do not start playing the stream immediately (default false)-rtsp_transport    <flags>      ED......... set RTSP transport protocols (default 0)udp                          ED......... UDPtcp                          ED......... TCPudp_multicast                .D......... UDP multicasthttp                         .D......... HTTP tunnelinghttps                        .D......... HTTPS tunneling-rtsp_flags        <flags>      .D......... set RTSP flags (default 0)filter_src                   .D......... only receive packets from the negotiated peer IPlisten                       .D......... wait for incoming connectionsprefer_tcp                   ED......... try RTP via TCP first, if availablesatip_raw                    .D......... export raw MPEG-TS stream instead of demuxing-allowed_media_types <flags>      .D......... set media types to accept from the server (default video+audio+data+subtitle)video                        .D......... Videoaudio                        .D......... Audiodata                         .D......... Datasubtitle                     .D......... Subtitle-min_port          <int>        ED......... set minimum local UDP port (from 0 to 65535) (default 5000)-max_port          <int>        ED......... set maximum local UDP port (from 0 to 65535) (default 65000)-listen_timeout    <int>        .D......... set maximum timeout (in seconds) to wait for incoming connections (-1 is infinite, imply flag listen) (from INT_MIN to INT_MAX) (default -1)-timeout           <int64>      .D......... set timeout (in microseconds) of socket I/O operations (from INT_MIN to I64_MAX) (default 0)-reorder_queue_size <int>        .D......... set number of packets to buffer for handling of reordered packets (from -1 to INT_MAX) (default -1)-buffer_size       <int>        ED......... Underlying protocol send/receive buffer size (from -1 to INT_MAX) (default -1)-user_agent        <string>     .D......... override User-Agent header (default "Lavf60.3.100")

也可以参考《 FFmpeg 从入门到精通 》书里的内容:

三、安装 MediaMTX

MediaMTX(原名 rtsp-simple-server)是一个开源的实时媒体服务器和媒体代理,它允许用户发布、读取、代理、录制和播放视频和音频流。MediaMTX 是一个即用型、零依赖的工具,旨在简化媒体流的路由和管理。它通常被用作一个 “媒体路由器”,能够将媒体流从一个端点路由到另一个端点。通过使用 MediaMTX,开发者可以轻松地构建各种实时媒体应用,如视频直播、视频点播、视频会议等。

下载并安装 MediaMTX ,目前最新的 Windows 版本是: mediamtx_v1.8.0_windows_amd64.zip 。

四、使用 FFmpeg 发送 RTSP 流媒体

假设有一个视频文件(例如 input.mp4)并希望将其作为 RTSP 流发送,可以使用以下命令:

ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -maxrate 3000k -bufsize 6000k -pix_fmt yuv420p -g 50 -c:a aac -b:a 160k -ac 2 -ar 44100 -f rtsp rtsp://your_rtsp_server/live/stream

命令参数:

    -re:以原始帧率读取输入(用于模拟实时流)。
    -i input.mp4:指定输入文件。
    -c:v libx264:使用 H.264 视频编码器。
    -preset veryfast:设置 x264 编码器的预设,这里选择了较快的预设以获得更快的编码速度。
    -maxrate-bufsize:设置比特率和缓冲区大小。
    -pix_fmt yuv420p:设置像素格式,这对于某些 RTSP 服务器是必需的。
    -g 50:设置关键帧间隔(GOP大小)。
    -c:a aac:使用 AAC 音频编码器。
    -b:a 160k:设置音频比特率。
    -ac 2:设置音频通道数为 2(立体声)。
    -ar 44100:设置音频采样率为 44100 Hz。
    -f rtsp:设置输出格式为 RTSP。
    rtsp://your_rtsp_server/live/stream:指定 RTSP 服务器的 URL 和流路径。

如:ffmpeg -re -stream_loop -1 -i input.mp4 -c copy -f rtsp rtsp://127.0.0.1:8554/videoFile_test

五、使用 FFplay 播放 RTSP 流媒体

ffplay 可以直接播放 RTSP 流。命令如下:

ffplay -i rtsp://your_rtsp_server/live/stream

ffplay -i rtsp://127.0.0.1:8554/videoFile_test

、使用 FFmpeg 录制 RTSP 流媒体

要录制 RTSP 流,可以使用以下命令:

ffmpeg -rtsp_transport tcp -i rtsp://your_rtsp_server/live/stream -c copy -f mp4 output.mp4

这个命令将 RTSP 流转码为 MP4 格式并保存在本地 output.mp4,采用 TCP 传输方式,可以避免缺省 UDP 传输模式可能丢包导致的花屏、绿屏、灰屏、马赛克等问题。

七、使用 FFmpeg 推送、拉取 RTSP 流媒体(摄像头作为源)

要使用 FFmpeg 发送和播放 RTSP 流媒体,并且以摄像头采集的视频作为源,需要按照以下步骤操作:

首先,需要确保摄像头已经被系统识别,可以通过一些命令方式(如 v4l2-ctl ffmpeg -list_devices true -f dshow -i dummy,对于Windows)来列出和选择。

然后,可以使用以下 FFmpeg 命令将摄像头采集的视频作为源,并发送到 RTSP 服务器:

ffmpeg -re -f v4l2 -input_format h264 -i /dev/video0 -c:v copy -an -f rtsp rtsp://your_rtsp_server/live/stream

命令参数:

    -f v4l2 指定输入格式为 Video4Linux2(Linux上常用的摄像头输入格式)。
    -input_format h264(如果摄像头直接输出 H.264 格式的话)。但通常摄像头输出的是原始格式(如 YUV),可能需要使用 -c:v libx264 来重新编码。
    /dev/video0 是摄像头在 Linux 上的常见设备路径,具体取决于摄像头和系统配置。在 Windows 上,可能需要使用如 dshow 这样的输入选项和设备名。
    -c:v copy 试图直接复制视频流(如果源是编码的格式),但如果源是原始格式,则需要用编码器(如 -c:v libx264)。
    -an 表示不包含音频流(因为摄像头通常不输出音频)。
    -f rtsp 指定输出格式为 RTSP。
    rtsp://your_rtsp_server/live/stream 是 RTSP 服务器的 URL 和流路径。

以摄像头为源,推送 RTSP 流媒体:

ffmpeg -f dshow -i video="HP Wide Vision HD Camera" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:8554/camera_test

 以摄像头为源,拉取 RTSP 流媒体:

ffplay -i rtsp://127.0.0.1:8554/camera_test

 拉取视频显示:

注意事项:

    如果摄像头输出的是原始格式而不是 H.264 编码的视频,需要使用视频编码器(如 -c:v libx264 )来重新编码视频流。
    可能需要根据摄像头和 RTSP 服务器的具体配置来调整 FFmpeg 命令中的参数。
    确保网络防火墙和安全设置允许 RTSP 流的传输。
    如果 RTSP 服务器需要身份验证或其他安全设置,需要在 URL 中包含这些信息,如 rtsp://username:password@your_rtsp_server/live/stream。

                                                                                         老徐,2024/5/2

相关文章:

使用 MediaMTX 和 FFmpeg 推拉 RTSP 流媒体

实时流传输协议 RTSP&#xff08;Real-Time Streaming Protocol&#xff09;是 TCP/IP 协议体系中的一个应用层协议&#xff0c;由哥伦比亚大学、网景和 RealNetworks 公司提交的 IETF RFC 标准。该协议定义了一对多应用程序如何有效地通过 IP 网络传送多媒体数据。RTSP 在体系…...

Mac 电脑安装 Raptor 流程图软件的方法

0. 安装逻辑 &#xff08;1&#xff09;运行 raptor&#xff0c;本质上需要 mac 能够运行 windows 程序&#xff0c;因此需要安装 .NET Runtime 7.0&#xff0c;这是微软程序运行必须的文件。 &#xff08;2&#xff09;运行 raptor 还需要安装依赖文件 mono-libgdiplus。 &am…...

W801学习笔记二十:宋词学习应用

前三章完成了唐诗的应用&#xff0c;本章将实现宋词的学习应用。 宋词与唐诗的区别不大&#xff0c;马上开始。 1、我们需要参考前面唐诗的方式&#xff0c;把宋词文本下载下来&#xff0c;并进行格式整理。 W801学习笔记十七&#xff1a;古诗学习应用——上 2、在菜单中添加…...

EPAI手绘建模APP转换模型和坐标系

(11) 模型转换 图 273 转换工具栏 ① 实体转成曲面&#xff0c;先选择需要转成曲面的实体模型&#xff0c;再点击该按钮。将选择的实体模型转成多个曲面。 ② 曲线转成NURBS样条曲线&#xff0c;先选择需要转成NURBS样条曲线的边模型&#xff0c;修改转换参数&#xff0c;将选…...

STM32快速入门(串口传输之USART)

STM32快速入门&#xff08;串口传输之USART&#xff09; 前言 USART串口传输能实现信息在设备之间的点对点传输&#xff0c;支持单工、半双工、全全双工&#xff0c;一般是有三个引脚&#xff1a;TX、RX、SW_RX&#xff08;共地&#xff09;。不需要一根线来同步时钟。最大优…...

什么是网络安全和网络隐私?

什么是网络安全?这个是我最感兴趣的话题,网络安全说白了就是在网络上的安全,跟现实中一样,现实中为了家里的安全,我们会给家门上锁,会装监控,农村的话可能还会养一条狗,只有我们让别人进我们家,别人才能进来,对于计算机来说也是一样的,我们会设置账户的密码,会设置防火墙,会安…...

树莓派变小路由器放出热点wifi

环境 树莓派4Bubuntu20 作用 树莓派放出wifi后&#xff0c;笔记本电脑连接树莓派的wifi&#xff0c;并且ip配置在一个网段&#xff0c;就可以互相通信&#xff08;笔记本放出wifi&#xff0c;树莓派连接效果一样&#xff09;&#xff0c;这样的好处是树莓派只要一上电就会自…...

数据猎手:使用Java和Apache HttpComponents库下载Facebook图像

引言 在信息驱动的时代&#xff0c;互联网上的数据成为了无可比拟的宝藏。本文旨在探讨如何通过利用Java和Apache HttpComponents库&#xff0c;从全球最大的社交网络平台Facebook上获取图像数据。 作为全球最大的社交网络平台&#xff0c;Facebook聚集了数以亿计的用户&#…...

uniapp——阻止冒泡

点击事件阻止冒泡 click.stop"onSubmit"其他类型&#xff0c;比如视频&#xff1a; 最后加了一个 click.stop <view class"videoBox" v-if"item.video_url"><video :src"i.image(item.video_url)" :controls"true&quo…...

Jmeter性能测试(四)

一、遇到问题解决思路 1、检查请求头是否正确 2、检查请求参数是否正确 3、检查鉴权信息是否正确 4、检查变量作用域 5、检查数据提取是否正确(正则/json提取器) 二、请求头检查 1、在Http信息头管理器查看 2、注意这里的变量作用域是全局的 三、请求参数检查 1、在查看结…...

从零开始精通RTSP之传输ADPCM等音频流

概述 在上一篇文章中&#xff0c;我们详细介绍了使用RTP传输AAC音频流的打包方法。除了AAC编码算法外&#xff0c;常用的音频编码算法还有ADPCM、G711A、G711U、G726等。接下来&#xff0c;我们继续介绍RTP传输ADPCM等音频流的打包方法。 封装方法 RTP封装ADPCM等音频数据时&am…...

box-decoration-break 使用介绍

box-decoration-break属性的使用 一、定义 box-decoration-break是CSS片段模块&#xff08;CSS Fragmentation Module Level 3&#xff09;中的一个属性&#xff0c;主要用于指定背景&#xff08;background&#xff09;、内边距&#xff08;padding&#xff09;、边框&#…...

技术分享 | 京东商品API接口|京东零售数据可视化平台产品实践与思考

导读 本次分享题目为京东零售数据可视化平台产品实践与思考。 主要包括以下四个部分&#xff1a; 1.京东API接口介绍 2. 平台产品能力介绍 3. 业务赋能案例分享 01 京东API接口介绍 02 平台产品能力介绍 1. 产品矩阵 数据可视化产品是一种利用数据分析和可视化技术&…...

OpenHarmony鸿蒙蓝牙BLE调试app

OpenHarmony蓝牙模块提供了ble的功能&#xff0c;本篇提供一个简单的app供测试时使用。代码使用API10&#xff0c;对应4.0Release版本固件。 1.开启BLE 开启BLE前&#xff0c;先在设置界面中打开蓝牙开关。 openBle()函数负责打开ble扫描&#xff0c;并打印扫描结果。主要代…...

HackMyVM-VivifyTech

目录 信息收集 arp nmap nikto whatweb WEB web信息收集 wpscan feroxbuster hydra 提权 系统信息收集 横向渗透 git提权 get root 信息收集 arp ┌──(root㉿0x00)-[~/HackMyVM] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 08:00:27:9d:6d:7b, …...

将unity中相机位置保存为json 文件或者 发送给后端

将unity中相机位置保存保存到服务器 ///相机的位置public Transform cameraTransform;void Start(){// SaveCameraPosition("sd");// ("{\"name\":\"sd\",\"position\":\"(0.00, 5.00, -12.00)\",\"rotation\&qu…...

vue2-表单组件封装

创建组件 components/test/index.vue <template><el-form :model"formData">// <!-- 具名插槽 --><slot name"header" /><el-form-itemv-for"(item, index) in formItem":key"index":label"item.la…...

智能家居4 -- 添加接收消息的初步处理

这一模块的思路和前面的语言控制模块很相似&#xff0c;差别只是调用TCP 去控制 废话少说&#xff0c;放码过来 增添/修改代码 receive_interface.c #include <pthread.h> #include <mqueue.h> #include <string.h> #include <errno.h> #include <…...

Python selenium

1.搭建环境 1.安装&#xff1a; pip install msedge-selenium-tools 不要使用pip install selenium&#xff0c;我的电脑上没法运行 2.下载驱动 Microsoft Edge WebDriver |Microsoft Edge 开发人员 edge浏览器点设置---关于即可找到版本号&#xff0c;一定要下载对应版…...

Python内置函数next()详解

Python的next()函数是一个内置函数&#xff0c;用于从迭代器中获取下一个元素。如果迭代器耗尽&#xff0c;则抛出StopIteration异常。 函数定义 next()函数的基本语法如下&#xff1a; next(iterator[, default])iterator&#xff1a;一个迭代器对象。default&#xff1a;可…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...