概述

Nginx-RTMP-Docker是一种基于Docker的Nginx流媒体服务器解决方案。具体来说,Nginx是一款高性能的Web和反向代理服务器,RTMP(Real-Time Messaging Protocol)是用于音频、视频数据传输的协议。Nginx-RTMP模块是由Alibaba的李广宇开发的,它可以让Nginx实例支持RTMP协议,从而实现流媒体服务。而Docker提供了一个容器化的平台,可以方便地打包和运行应用程序,不受底层基础设施的影响。在这个解决方案中,Nginx-RTMP模块被封装到Docker镜像中,使得环境配置变得简单,同时也易于在不同的环境中迁移和扩展。

这种解决方案简化了在各种平台上部署高效率流媒体服务的过程,并且提供了快速启动和运行RTMP服务器的能力。因此,Nginx-RTMP-Docker是一个功能强大、易于部署和管理的流媒体服务器解决方案。

下面我将详细描述这一解决方案的特点和优势:

Nginx & docker

Nginx-RTMP模块

Nginx-RTMP模块是一个开源的、基于Nginx的实时消息传输协议(RTMP)模块。它允许Nginx服务器处理RTMP流,如直播视频流,从而实现流媒体服务。该模块支持多种功能,如直播、录播、转码等,为流媒体服务器提供了强大的功能支持。

Docker容器化

Docker是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包成一个可移植的容器,然后在任何支持Docker的环境中运行该容器。通过将Nginx-RTMP模块集成到Docker镜像中,我们可以轻松地部署和管理流媒体服务器。

优势

基于Docker的Nginx-RTMP流媒体服务器具有以下优势:

  • 快速部署:通过预构建的Docker镜像,我们可以快速部署流媒体服务器,无需手动编译和配置Nginx及RTMP模块。
  • 灵活扩展:Docker的容器化特性使得流媒体服务器可以轻松地扩展到多个节点,以满足大规模并发访问的需求。
    易于管理:Docker提供了丰富的工具和命令,可以方便地监控、管理和维护流媒体服务器。

搭建流媒体服务器

1、安装Docker

首先,需要在服务器上安装Docker,并配置好Docker环境。
2、 拉取Nginx-RTMP镜像
从Docker Hub或其他可信的镜像仓库中拉取已经集成了Nginx-RTMP模块的Docker镜像,因此只需要拉取。

docker pull tiangolo/nginx-rtmp:latest

3、运行容器

使用Docker命令运行Nginx-RTMP容器,并映射好必要的端口(如RTMP协议的1935端口和HTTP协议的80端口)。

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

4、配置Nginx-RTMP:根据实际需求,配置Nginx-RTMP模块的相关参数,如直播流地址、录播设置等。

对于已经使用Docker开启的nginx-rtmp服务,你可以通过修改nginx的配置文件(通常是nginx.conf)来更改其配置。但是,由于nginx运行在Docker容器中,你需要通过Docker的数据卷(volume)功能来映射容器内的配置文件到你的宿主机上,然后才能在宿主机上直接修改它。

以下是修改Docker中nginx-rtmp配置的一般步骤:

查找nginx配置文件的位置:

  • 首先,你需要知道nginx配置文件在Docker容器内的位置。

这通常可以在nginx-rtmp的Docker镜像文档或源代码中找到。

  • 创建数据卷:

在宿主机上创建一个目录,用于存放nginx的配置文件。例如,你可以创建一个名为/opt/nginx(windows这是windows下的目录,同样支持)的目录。

  • 停止并删除当前的nginx-rtmp容器(如果它正在运行):

使用docker stop和docker rm命令来停止并删除当前的nginx-rtmp容器。请注意,这将导致所有正在进行的直播流中断。

  • 重新运行nginx-rtmp容器并挂载数据卷:

使用docker run命令重新运行nginx-rtmp容器,并使用-v参数将宿主机上的nginx配置文件目录映射到容器内的相应位置。例如:

bash
docker run -tid --name nginx-rtmp -p 1935:1935 -v /opt/nginx:/etc/nginx:rw tiangolo/nginx-rtmp

在这个例子中,-v /opt/nginx:/etc/nginx:rw表示将宿主机的/opt/nginx目录映射到容器内的/etc/nginx目录,并设置读写权限。

  • 修改nginx配置文件:
    现在你可以在宿主机的/opt/nginx目录下找到并修改nginx的配置文件了。你可以使用任何文本编辑器(如vi、nano、VSCode等)来编辑这些文件。
  • 重启nginx-rtmp容器:
    修改完配置文件后,你需要重启nginx-rtmp容器以使更改生效。使用docker restart命令来重启容器:
bash
docker restart nginx-rtmp

这里的nginx-rtmp是在上面步骤中给容器指定的名称。

  • 测试配置:

最后,你可以使用FFmpeg或其他RTMP客户端来测试你的nginx-rtmp服务器是否按照你的预期进行工作。
请注意,这些步骤可能因你使用的nginx-rtmp Docker镜像和你的具体需求而有所不同。因此,在实际操作中,请根据你的具体情况进行相应的调整。

5、测试与验证:使用推流工具(如FFmpeg或者OBS)将音视频流推送到流媒体服务器,并使用拉流工具(如VLC播放器或者potplayer)从流媒体服务器拉取音视频流进行验证。

arm docker nginx 镜像 tar_docker

验证和测试

首先,我们将安装两款软件:OBS(Open Broadcaster Software)和PotPlayer。OBS是一款功能强大的直播推流软件,支持多种流媒体服务;而PotPlayer则是一款备受赞誉的音视频播放器,以其卓越的播放能力和广泛的格式支持而著称。

接下来,我们将配置OBS软件。在OBS的设置界面中,选择“服务”设置项,并点击“自定义”选项。在服务器地址一栏中,填写rtmp://127.0.0.1/live,这是本地RTMP服务器的地址。随后,在推流码(Stream Key)一栏中,输入test作为推流密钥。完成这些配置后,确保OBS已成功连接到RTMP服务器,并准备开始直播。

最后,当您准备好开始直播时,只需在OBS界面中点击“开始推流”按钮即可。此时,OBS将开始将您的视频和音频内容推送到指定的RTMP服务器。同时,您可以使用PotPlayer来预览或播放推送到RTMP服务器的音视频内容,以确保直播的质量和流畅性。

通过以上步骤,已成功安装了OBS和PotPlayer两款软件,并配置了OBS的推流设置。现在,就可以开始验证了。

arm docker nginx 镜像 tar_服务器_02


接下来,在OBS中配置视频来源。点击界面左下角的“+”号,选择“显示器捕获”作为视频来源。这将允许OBS捕获您的电脑屏幕或特定显示器的内容,并作为直播的一部分进行传输。

完成OBS的视频来源配置后,我们接下来使用PotPlayer来观看推流。打开PotPlayer软件,在“打开”或“URL”输入框中,填写RTMP链接,格式为rtmp://127.0.0.1/live/test。请确保链接中的test与您在OBS中设置的推流码保持一致。

完成上述步骤后,PotPlayer将尝试连接到RTMP服务器并播放推送的直播内容。如果一切正常,您应该能够在PotPlayer中看到OBS捕获的显示器内容,从而验证直播推流是否成功。

arm docker nginx 镜像 tar_Docker_03

此时就可以从播放器看到OBS推送的音视频流;

arm docker nginx 镜像 tar_Docker_04

四、应用场景

基于开源的Nginx-RTMP-Docker实现的流媒体服务器适用于多种应用场景,如在线教育、视频会议、直播娱乐等。它可以帮助开发者快速构建稳定、高效的流媒体服务,满足用户对于音视频流媒体传输的需求。

总之,基于开源的Nginx-RTMP-Docker实现的流媒体服务器具有强大的功能和灵活的可扩展性,可以满足各种应用场景的需求。通过合理的配置和优化,它可以为音视频流媒体的传输和处理提供高效、稳定的支持。

链接

nginx-rtmp-docker githubOpen Brodcaster Saftware download