在这篇文章中,我将详述如何搭建一个RTMP(Real-Time Messaging Protocol)服务器,并使用ffmpeg技术进行本地视频的推流。最后,我们将使用VLC播放器来播放这个RTMP流。
首先,我们需要搭建一个RTMP服务器。为了方便起见,我们将选择Docker作为服务器的环境。Docker的轻量化和可移植性使得它成为构建和部署应用的理想选择。
安装Docker的步骤会根据操作系统的不同而变化。下面是在Ubuntu上安装Docker的命令:
sudo apt-get update
sudo apt-get install docker.io
如果你使用的是其他操作系统,请参照Docker的官方文档进行安装。
我们将使用开源项目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是一款强大的多媒体处理工具,支持几乎所有的音视频格式。
在Ubuntu上,你可以使用下面的命令安装ffmpeg:
sudo apt-get update
sudo apt-get install ffmpeg
如果你使用的是其他操作系统,请参照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是一款开源的跨平台多媒体播放器,它可以播放几乎所有的媒体文件,也可以播放网络流。
在Ubuntu上,你可以使用下面的命令安装VLC:
sudo apt-get update
sudo apt-get install vlc
如果你使用的是其他操作系统,请参照VLC的官方文档进行安装。
Windows直接到VLC官网下载安装包安装即可。
打开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流。希望这些信息能够帮助你快速地实现视频推流和播放。