SRS(Simple Real-time Server)是一个高性能的流媒体服务器,支持 RTMP、HLS、HTTP-FLV 等协议,可以用于推流、拉流、转码等操作。下面将详细讲解如何在 Docker 中配置 SRS 服务器,使用 FFmpeg 推流,最后使用 VLC 播放拉流。

步骤概览

  1. 配置 Docker 环境并拉取 SRS 镜像
  2. 配置 SRS 服务器
  3. 使用 FFmpeg 推流到 SRS 服务器
  4. 使用 VLC 拉流播放视频流

1. 配置 Docker 环境并拉取 SRS 镜像

1.1 安装 Docker

首先,确保你的服务器已安装 Docker。可以使用以下命令检查 Docker 是否已经安装:

docker --version

如果没有安装 Docker,可以参考 Docker 官网 进行安装。

1.2 拉取 SRS 镜像

接下来,我们需要拉取 SRS 的 Docker 镜像。使用以下命令:

docker pull ossrs/srs

该命令会从 Docker Hub 拉取最新版本的 SRS 镜像。

1.3 运行 SRS 容器

运行 SRS 容器:

docker run -d --name srs -p 1935:1935 -p 8080:8080 ossrs/srs

这会启动一个名为 srs 的容器,并将宿主机的 1935 端口和 8080 端口映射到容器的相同端口。1935 端口用于 RTMP 推流,8080 端口用于 HTTP-FLV 或 HLS 播放。

如果你想使用默认配置启动 SRS,可以直接这样运行。如果需要自定义配置,请在后续步骤中修改配置文件。


2. 配置 SRS 服务器

2.1 修改 SRS 配置文件

SRS 的配置文件位于 /etc/srs/srs.conf,我们可以在 Docker 容器中进入并进行编辑。

进入 SRS 容器:

docker exec -it srs /bin/bash

配置文件路径为 /usr/local/srs/conf/srs.conf。可以使用 vi 或 nano 编辑器来修改该配置文件。

vi /usr/local/srs/conf/srs.conf

我们需要确保 RTMP 和 HTTP 服务启用,配置文件示例如下:

# 推流协议
listen          1935;

# HTTP-Flv 播放协议
http_api        127.0.0.1:1985;
http_stream     0.0.0.0:8080;
http_hooks      on;

# RTMP 流媒体服务
vhost __defaultVhost__ {
    # 允许推流
    rtc {
        enabled     on;
        listen      1935;
    }
}

这个配置启动了 RTMP 协议(端口 1935)和 HTTP-Flv 服务(端口 8080),可以推流和拉流。

编辑完成后,保存并退出。

2.2 重启 SRS 容器

为了让配置生效,需要重启容器:

docker restart srs

3. 使用 FFmpeg 推流到 SRS 服务器

接下来,我们使用 FFmpeg 进行推流。确保你已经安装了 FFmpeg。如果没有,可以通过以下命令安装(适用于 Ubuntu 系统):

sudo apt-get update
sudo apt-get install ffmpeg

使用以下命令将视频文件推送到 SRS 服务器的 RTMP 流:

ffmpeg -re -i input_video.mp4 -c:v libx264 -c:a aac -f flv rtmp://<SRS_SERVER_IP>/live/stream
  • input_video.mp4:输入视频文件的路径。
  • rtmp://<SRS_SERVER_IP>/live/stream:RTMP 推流 URL,其中 <SRS_SERVER_IP> 替换为你 SRS 服务器的 IP 地址,live 是虚拟主机,stream 是推流名称。

例如,假设你的 SRS 服务器 IP 是 192.168.1.100,命令会是:

ffmpeg -re -i input_video.mp4 -c:v libx264 -c:a aac -f flv rtmp://192.168.1.100/live/stream

3.1 推流设置解释

  • -re:以实时速度读取输入文件(模拟实时流)。
  • -i input_video.mp4:输入的视频文件。
  • -c:v libx264:使用 libx264 编解码器编码视频。
  • -c:a aac:使用 aac 编解码器编码音频。
  • -f flv:指定输出格式为 flv,这是 RTMP 所需的格式。

4. 使用 VLC 拉流播放视频流

4.1 配置 VLC 播放 RTMP 流

  1. 打开 VLC 播放器。
  2. 在顶部菜单选择 媒体 -> 打开网络串流
  3. 在弹出的对话框中输入 RTMP 流 URL。例如:rtmp://<SRS_SERVER_IP>/live/stream 将 <SRS_SERVER_IP> 替换为你的 SRS 服务器 IP 地址。
  4. 点击 播放,VLC 将会开始拉流并播放视频。

4.2 播放 HLS 流

如果你希望通过 HLS 进行播放,可以将 rtmp:// 地址更改为 http:// 并指定 HLS 播放 URL:

http://<SRS_SERVER_IP>:8080/live/stream.m3u8

HLS 是基于 HTTP 协议的,所以你需要使用 SRS 中的 HTTP 服务(8080 端口)。


5. 总结

  • 配置 Docker 中的 SRS:通过拉取 SRS 镜像并配置 RTMP 服务,启动流媒体服务器。
  • 使用 FFmpeg 推流:通过 RTMP 协议将视频流推送到 SRS 服务器。
  • 使用 VLC 播放:通过 VLC 播放器拉流并观看视频。

此方案适用于需要通过 RTMP 协议进行流媒体推流与播放的场景。如果你需要更复杂的流媒体处理,SRS 也支持多种协议(如 HTTP-FLV、HLS)和功能(如转码、直播录制等)。