Docker RTMP服务器搭建与视频流推送示例(流媒体服务器tiangolo/nginx-rtmp,推流客户端ffmpeg)

news2025/2/23 18:40:10

文章目录

  • RTMP服务器搭建与视频流推送
    • 第一部分:搭建RTMP服务器(流媒体服务器)
      • 1.1 安装Docker
      • 1.2 搭建RTMP服务器
    • 第二部分:使用ffmpeg进行视频推流(推流客户端)
      • 2.1 安装ffmpeg
      • 2.2 使用ffmpeg推流
    • 第三部分:使用VLC播放RTMP流
      • 3.1 安装VLC
      • 3.2 使用VLC播放RTMP流
        • `-stream_loop`参数实现视频流重复播放
    • 总结

RTMP服务器搭建与视频流推送

在这篇文章中,我将详述如何搭建一个RTMP(Real-Time Messaging Protocol)服务器,并使用ffmpeg技术进行本地视频的推流。最后,我们将使用VLC播放器来播放这个RTMP流。

第一部分:搭建RTMP服务器(流媒体服务器)

首先,我们需要搭建一个RTMP服务器。为了方便起见,我们将选择Docker作为服务器的环境。Docker的轻量化和可移植性使得它成为构建和部署应用的理想选择。

1.1 安装Docker

安装Docker的步骤会根据操作系统的不同而变化。下面是在Ubuntu上安装Docker的命令:

sudo apt-get update
sudo apt-get install docker.io

如果你使用的是其他操作系统,请参照Docker的官方文档进行安装。

1.2 搭建RTMP服务器

我们将使用开源项目nginx-rtmp-docker来搭建RTMP服务器。首先,克隆该项目到你的本地目录:

git clone https://github.com/tiangolo/nginx-rtmp-docker.git
cd nginx-rtmp-docker

在这里插入图片描述
我克隆不了,我直接上页面上把代码下载下来了:

在这里插入图片描述

在这里插入图片描述

然后,使用Docker运行服务器:

docker run -d -p 1935:1935 --name=nginx-rtmp tiangolo/nginx-rtmp

在这里插入图片描述
在这里插入图片描述

此时,你已经成功地在本地启动了一个RTMP服务器,它监听在1935端口。

注意:
实际上我们并未用到上面git clone https://github.com/tiangolo/nginx-rtmp-docker.git下载的文件,我们用的是镜像tiangolo/nginx-rtmp中默认的nginx.conf,如果要自定义nginx内容,可以编辑nginx.conf,然后将这个文件在创建容器时挂载进去。不懂的可以参考项目主页。

第二部分:使用ffmpeg进行视频推流(推流客户端)

接下来,我们将使用ffmpeg对视频进行推流。ffmpeg是一款强大的多媒体处理工具,支持几乎所有的音视频格式。

2.1 安装ffmpeg

在Ubuntu上,你可以使用下面的命令安装ffmpeg:

sudo apt-get update
sudo apt-get install ffmpeg

如果你使用的是其他操作系统,请参照ffmpeg的官方文档进行安装。

2.2 使用ffmpeg推流

首先,你需要有一个视频文件用于推流。然后,使用以下命令进行推流:

ffmpeg -re -i input.mp4 -c copy -f flv rtmp://localhost/live/stream

这里,“input.mp4”是你的视频文件,“rtmp://localhost/live/stream”是你的RTMP服务器地址。

在这个例子中,ffmpeg是用于将视频文件推送(stream)到我们建立的RTMP服务器。而这个RTMP服务器就是通过Docker运行的nginx-rtmp容器提供的。

docker run -d -p 1935:1935 --name=nginx-rtmp tiangolo/nginx-rtmp命令启动了一个名为"nginx-rtmp"的容器,它监听主机的1935端口。

ffmpeg -re -i input.mp4 -c copy -f flv rtmp://localhost/live/stream命令将名为"input.mp4"的视频文件转换成流,然后推送到"rtmp://localhost/live/stream"。其中"localhost"指的是本地主机,即RTMP服务器所在的主机。“1935"是RTMP协议默认的端口号,如果没有特别指定,就会使用这个端口。”/live/stream"是推流的路径和名称,你可以根据需要自定义。

所以,在URL上看,ffmpeg推流到"rtmp://localhost/live/stream"实际上就是推流到了我们通过Docker启动的nginx-rtmp容器的1935端口。

简单来说,ffmpeg是推流客户端,而nginx-rtmp容器是流媒体服务器,二者之间通过RTMP协议进行通信。

因为我的流媒体服务器(nginx-rtmp)和ffmpeg推流客户端是在我的ubuntu虚拟机(192.168.121.50)上运行,我希望我的windows电脑能够用VLC播放我的RTMP流,所以我执行以下命令:

ffmpeg -re -i forest4kTest.mp4 -c copy -f flv rtmp://192.168.121.50/live/stream

在这里插入图片描述

注意:
因为RTMP协议通常使用FLV容器格式进行流媒体传输,所以-f选项后应该是flv而不是mp4

第三部分:使用VLC播放RTMP流

VLC是一款开源的跨平台多媒体播放器,它可以播放几乎所有的媒体文件,也可以播放网络流。

3.1 安装VLC

在Ubuntu上,你可以使用下面的命令安装VLC:

sudo apt-get update
sudo apt-get install vlc

如果你使用的是其他操作系统,请参照VLC的官方文档进行安装。

Windows直接到VLC官网下载安装包安装即可。

在这里插入图片描述

3.2 使用VLC播放RTMP流

打开VLC,然后在“媒体”菜单下选择“打开网络串流”。在弹出的对话框中,输入你的RTMP服务器地址,比如"rtmp://localhost/live/stream",然后点击“播放”。

我在我的windows上用VLC打开视频流地址:rtmp://192.168.121.50/live/stream

在这里插入图片描述

在这里插入图片描述

可以看到视频流能被正常播放出来。

我的测试视频文件,需要的话可从此处下载。

-stream_loop参数实现视频流重复播放

注意:
如果发现在ffmpeg命令运行结束后就无法用VLC播放rtmp://192.168.121.50/live/stream了,解决这个问题的一个方法是保持ffmpeg持续运行以提供实时流。如果你想要流源(如视频文件)在播放完毕后自动重复播放,可以添加-stream_loop选项来使ffmpeg循环播放视频:

ffmpeg -re -stream_loop -1 -i forest4kTest.mp4 -c copy -f flv rtmp://192.168.121.50/live/stream

其中-stream_loop -1表示无限循环播放输入的视频。

总结

本文详细介绍了如何搭建一个RTMP服务器,如何使用ffmpeg进行视频推流,以及如何使用VLC播放RTMP流。希望这些信息能够帮助你快速地实现视频推流和播放。

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

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

相关文章

matlab 直道转向时方向盘最小转角算法

1、内容简介 略 33-可以交流、咨询、答疑 2、内容说明 汽车主动转向,直道转向时方向盘最小转角算法,一个m脚本和simulink的计算结果 略 3、仿真分析 略 4、参考论文 汽车主动转向关键技术研究

ElasticSearch概述+SpringBoot 集成ES

ES概述 开源的、高扩展的、分布式全文检索引擎【站内搜索】 解决问题 1.搜索词是一个整体时,不能拆分(mysql整体连续) 2.效率会低,不会用到索引(mysql索引失效) 解决方式 进行数据的存储(只存储…

自动驾驶轨迹规划之碰撞检测(二)

欢迎大家关注我的B站: 偷吃薯片的Zheng同学的个人空间-偷吃薯片的Zheng同学个人主页-哔哩哔哩视频 (bilibili.com) 目录 1.基于凸优化 2.具身足迹 3. ESDF 自动驾驶轨迹规划之碰撞检测(一)-CSDN博客 大家可以先阅读之前的博客 1.基于…

FFMPEG解码实时流,支持cpu、gpu解码

官网下载的ffmpeg目前只能下载到X64版本的库,具体编译请参考windows编译ffmpeg源码(32位库)_windows 32位ffmpeg动态库-CSDN博客 直接上代码 int VideoDecodeModule::Open(std::string strUrl) {AVFormatContext *pFormatCtx nullptr;AVCo…

nestjs之JWT认证实现流程

nestjs的jwt认证利用了 Passport.js 的认证机制。要根据这个源码实现您自己的 AuthGuard,需要理解几个关键部分:如何集成 Passport.js、如何处理认证结果,以及如何使用 NestJS 的依赖注入系统。 先自定义一个策略函数类 // wsy.strategy.ts …

idea 安装免费Ai工具 codeium

目录 概述 ide安装 使用 chat问答 自动写代码 除此外小功能 概述 这已经是我目前用的最好免费的Ai工具了,当然你要是有钱最好还是用点花钱的,比如copilot,他可以在idea全家桶包括vs,还有c/c的vs上运行,还贼强&am…

宝塔发布网站问题汇总和记录

1、添加网站站点后打不开 解决办法,关闭防跨站攻击2 2、laravel项目部署到linux的时候出现The stream or file "/home/www/storage/logs/laravel.log" could not be opened in append mode 给目录加权限 chmod -R 777 storage 3、Class "Redis"…

5G阅信在汽车销售行业的应用与优势

5G阅信在汽车销售行业的应用与优势包括:提升客户体验,提供更快速、稳定的网络服务;实时数据传输,更好地了解客户需求;增强现实应用,提供更真实、直观的购车体验;创新营销方式,如短视…

介绍一个强大的免费开源.net反编译工具

dnSpy dnSpy 是一个用C#开发,开源的调试器和.NET 汇编编辑器。 即使您没有任何可用的源代码,也可以使用它来编辑和调试程序,并可以把代码导出成.net工程。

esp32-idf Eclipse Log日志打印demo

Log日志打印demo 1、代码例程 esp32-S2 芯片 / Eclipse软件 开发环境 #include <stdio.h> #include "sdkconfig.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "esp_system.h" #include "esp_…

web自动化实现登录的几种方式

目录 前言 一、pythonunittest框架实现登录功能 二、pythonselenium实现登录功能 三、pythonrequests库实现登录功能 前言 今天主要想介绍python语言不同的自动化测试框架的结合方式来模拟登录功能。想了解自动化测试框架的同学不要错过哦&#xff01; 一、pythonunittest框…

MT6761芯片参数规格_MTK联发科4G智能模块

联发科MT6761平台采用12nm制程内建主频达 2.0 GHz 的 4 核 ARM Cortex–A53 处理器&#xff0c;IMG PowerVR GE 等级图形处理器&#xff0c;以及高速的 LPDDR4x 低功耗存储或是成本效益较高的 LPDDR3 内存。 内置微型化超低功耗的传感器中枢组件&#xff0c;适用于支持如计步器…

Python进程池multiprocessing.Pool

环境&#xff1a; 鲲鹏920:192核心 内存&#xff1a;756G python&#xff1a;3.9 python单进程的耗时 在做单纯的cpu计算的场景&#xff0c;使用单进程核多进程的耗时做如下测试&#xff1a; 单进程情况下cpu的占用了如下&#xff0c;占用一半的核心数&#xff1a; 每一步…

微服务实战项目_天机学堂01_初识项目

文章目录 一.项目简述二.Jenkins三.模拟真实业务:紧急bug修复和代码阅读四.测试和部署五.代码阅读-获取登录用户 一.项目简述 Q:天机学堂是什么? A:天机学堂是一个基于微服务架构的生产级在线教育项目 主要有两个端(项目已上线,可以点击查看): 管理后台: https://tjxt-admi…

【控制篇 / 分流】(7.4) ❀ 02. 对不同运营商IP网段访问进行分流 ❀ FortiGate 防火墙

【简介】公司有两条宽带用来上网&#xff0c;一条电信&#xff0c;一条联通&#xff0c;访问常用的某些网站速度时快时慢。领导要求&#xff0c;根据上网流量的目标运营商IP归属&#xff0c;将流量送到相应的运营商出口去&#xff0c;避免跨运营商上网。那么应该怎么做&#xf…

分销商城多端uniapp 可编译5端 - 等级提现额度

等级提现额度 等级提现额度是一种常见的财务管理策略&#xff0c;通常用于在线平台、金融服务或游戏中&#xff0c;用于控制不同等级用户的提现限额。这样的机制有助于平台管理资金流动性&#xff0c;防范欺诈&#xff0c;并鼓励用户提升他们的活跃度或忠诚度。以下是一个简单的…

HTML--JavaScript--语法基础

变量与常量 这个基本上没啥问题 变量命名规则&#xff1a; 变量由字母、数字、下划线、$组成&#xff0c;且变量第一个字符不能为数字 变量不能是系统关键字和保留字 语法&#xff1a; var 变量名 值&#xff1b;所有Javacript变量都由var声明 定义赋值字符串&#xff1a; …

大数据与人工智能赋能精益生产:掀起工业革命的浪潮!

随着科技的飞速发展&#xff0c;大数据和人工智能已经成为当今社会的热门话题。在这场科技革命中&#xff0c;大数据和人工智能如何赋能精益生产&#xff0c;引领工业革命的浪潮呢&#xff1f; 一、大数据&#xff1a;精益生产的智慧源泉 在精益生产中&#xff0c;大数据的应用…

力扣刷MySQL-第一弹(详细解析)

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;力扣刷题讲解-MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出…

【数据结构】常见八大排序算法总结

目录 前言 1.直接插入排序 2.希尔排序 3.选择排序 4.堆排序 5.冒泡排序 6.快速排序 6.1Hoare版本 6.2挖坑法 6.3前后指针法 6.4快速排序的递归实现 6.5快速排序的非递归实现 7.归并排序 8.计数排序&#xff08;非比较排序&#xff09; 9.补充:基数排序 10.总结…