1. Docker环境:确保你的主机上已经安装并配置好Docker环境。
2. 基础镜像: 选择一个包含Nginx和RTMP模块的Docker镜像,例如:tiangolo/nginx-rtmp。
3. 推流工具: FFmpeg是一个常用的推流工具,可以用它来模拟直播源。也可以使用OBS
本文演示环境为Ubuntu 20,使用Putty进行远程SSH连接。
云服务器 - 基础型
云服务器 - 基础型Plus
云服务器 - 进阶型
云服务器 - 进阶型Plus
首先,确保你的系统软件包是最新的。执行以下命令来更新系统:
sudo apt update sudo apt upgrade
使用以下命令安装 Docker 和 Docker Compose:
sudo apt install docker docker-compose
默认情况下,只有 root 用户和 sudo 组的用户可以运行 Docker 命令。Ubuntu 操作系统默认 Administrator 用户,如果你希望不使用 sudo 也能运行 Docker 命令,可以将你的用户添加到 docker 组:
sudo usermod -aG docker $(whoami)
要立即生效,可以使用以下命令:
newgrp docker
确保 Docker 服务正在运行:
sudo systemctl status docker
如果 Docker 服务没有启动,可以使用以下命令启动它:
sudo systemctl start docker
确保 Docker 套接字的权限正确:
ls -l /var/run/docker.sock
输出应类似如下:
srw-rw---- 1 root docker 0 Aug 30 08:28 /var/run/docker.sock
这表示 Docker 套接字文件的权限设置为允许 root 和 docker 组的成员访问。
从Docker Hub上拉取一个名为alfg/nginx-rtmp的镜像。
docker pull alfg/nginx-rtmp
基于这个镜像创建一个新的容器,并启动它。将容器内部的1935端口和80端口分别映射到宿主机的1935端口和80端口,以便我们从外部访问。容器退出后自动删除。
docker run -it -p 1935:1935 -p 8080:80 --rm alfg/nginx-rtmp
首先,创建一个目录来存放你的 Docker Compose 文件和相关配置文件:
mkdir nginx-rtmpcd nginx-rtmp
在该目录中,创建一个名为 docker-compose.yml 的文件:
sudo nano docker-compose.yml
将以下内容粘贴到文件中:
version: '3.1'services:nginx-rtmp-test:restart: alwaysimage: alfg/nginx-rtmpcontainer_name: nginx-rtmp-testports:- 1935:1935- 8080:80volumes:- ./conf/nginx.conf:/etc/nginx/nginx.conf- ./html:/usr/share/nginx/html- ./log:/var/log/nginx
保存并退出(在 nano 中,按 Ctrl + O 保存,按 Enter 确认,然后按 Ctrl + X 退出)。
在同一目录中,创建一个名为 nginx.conf 的文件,并添加以下配置内容。这将配置 nginx 以支持 RTMP 流媒体:
sudo nano nginx.conf
将以下内容粘贴到文件中:
# user 指定运行 nginx 的用户和组(第一个参数为用户第二个为组,这里只有用户)user root;# 指定工作进程数(一般设置为CPU核数)worker_processes 1;# nginx 连接配置模块events {# 指定每个工作进程最大连接数为 1024worker_connections 1024;}# RTMP 服务(重点)rtmp {server {# 指定服务端口listen 1935; # RTMP协议使用的默认端口chunk_size 4000; # RTMP分块大小# 指定 HLS 流应用application hls { # hls为流应用的名称,可以随便填live on; # 打开直播流hls on; # 打开 HLShls_path /tmp/hls; # HLS 文件存放路径}}}# http 配置模块http {# 通过 include 加载 mime.types 文件,里面的 types {} 模块将文件扩展名映射到响应的 MIME 类型include mime.types;# 定义响应的默认 MIME 类型default_type application/octet-stream;# 启用或者禁用 sendfile()sendfile on;# 65 s 超时keepalive_timeout 65;# etagetag on;# 过期时间expires 7d;# 虚拟主机配置模块server {# 监听 8080 端口listen 8080;# 监听域名为 localhostserver_name localhost;location /hls { # Serve HLS fragments types {application/vnd.apple.mpegurl m3u8;video/mp2t ts;}root /tmp;add_header Cache-Control no-cache;}}}
在项目目录下执行以下命令启动服务:
sudo docker-compose up -d
验证容器是否正在运行:
sudo docker ps
你应该能看到类似如下输出,显示 nginx-rtmp-test 容器正在运行:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESxxxxxxxxxxxx alfg/nginx-rtmp '/docker-entrypoint.…'
RTMP 流媒体服务可以通过 rtmp://