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

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流。希望这些信息能够帮助你快速地实现视频推流和播放。

相关文章

文章浏览阅读3.7k次,点赞2次,收藏5次。Nginx学习笔记一、N...
文章浏览阅读1.7w次,点赞14次,收藏61次。我们在使用容器的...
文章浏览阅读1.4k次。当用户在访问网站的过程中遇到404错误时...
文章浏览阅读2.7k次。docker 和 docker-compose 部署 nginx+...
文章浏览阅读1.3k次。5:再次启动nginx,可以正常启动,可以...
文章浏览阅读3.1w次,点赞105次,收藏182次。高性能:Nginx ...