SRS 流媒体服务器 Docker 部署指南

1. 整体架构图 2. 拉取所需镜像 首先需要拉取两个Docker镜像: docker pull ossrs/srs docker pull hu849434163457/ffmpeg-python

1. 整体架构图

2. 拉取所需镜像

首先需要拉取两个Docker镜像:

docker pull ossrs/srs
docker pull hu849434163457/ffmpeg-python

3. 准备文件

(Python推流脚本)

import subprocess
​
# 定义 ffmpeg 命令
command = [
    'ffmpeg',
    '-re',                      # 以原生帧率读取输入
    '-stream_loop', '-1',       # 无限循环输入
    '-i', 'link-preview-guide-RYBKVDCD.mp4',  # 输入文件
    '-c:v', 'libx264',          # 视频编码器
    '-preset', 'ultrafast',     # 编码速度优先
    '-tune', 'zerolatency',     # 零延迟优化
    '-b:v', '1000k',            # 视频码率
    '-maxrate', '1000k',        # 最大码率
    '-bufsize', '1000k',        # 缓冲区大小
    '-f', 'flv',                # 输出格式为 FLV
    '-loglevel', 'debug',       # 日志级别
    '-headers', 'Content-Type: video/x-flv',  # HTTP 请求头
    'rtmp://10.18.16.55:1935/live/aa'  # 推流地址(RTMP)
]
​
# 启动 ffmpeg 子进程
try:
    subprocess.run(command, check=True)
except subprocess.CalledProcessError as e:
    print(f"ffmpeg 执行失败: {e}")
​

import subprocess
​
# 定义 ffmpeg 命令
command = [
    'ffmpeg',
    '-re',                      # 以原生帧率读取输入
    '-stream_loop', '-1',       # 无限循环输入
    '-i', 'link-preview-guide-RYBKVDCD.mp4',  # 输入文件
    '-c:v', 'libx264',          # 视频编码器
    '-preset', 'ultrafast',     # 编码速度优先
    '-tune', 'zerolatency',     # 零延迟优化
    '-b:v', '1000k',            # 视频码率
    '-maxrate', '1000k',        # 最大码率
    '-bufsize', '1000k',        # 缓冲区大小
    '-f', 'flv',                # 输出格式为 FLV
    '-loglevel', 'debug',       # 日志级别
    'rtmp://10.18.16.55:1935/live/aa'  # 推流地址(RTMP)
]
​
# 启动 ffmpeg 子进程
try:
    subprocess.run(command, check=True)
except subprocess.CalledProcessError as e:
    print(f"ffmpeg 执行失败: {e}")

需要准备一个测试视频文件

imput.mp4

4. Docker Compose配置

创建docker-compose.host-network.yml文件:

version: '3.8'
​
services:
  srs:
    image: ossrs/srs:latest
    container_name: srs_server
    restart: always
    ports:
#      - "1935:1935/tcp"  # RTMP
      - "8080:8080/tcp"  # HTTP-FLV/HLS
#    volumes:
#      - ./srs_conf:/usr/local/srs/conf
​
  ffmpeg:
    image: hu849434163457/ffmpeg-python:latest
    container_name: ffmpeg_pusher
    restart: unless-stopped
    volumes:
      - ./media:/media  # 挂载媒体文件夹
    command: >
      bash -c "while true; do ffmpeg -re -stream_loop -1 -i /media/input.mp4 -c:v libx264 -preset veryfast -g 30 -b:v 1500k -c:a aac -b:a 128k -f flv rtmp://srs_server:1935/live/streamkey || sleep 5; done"
    depends_on:
      - srs

5. 播放流媒体

使用ffplay播放HTTP-FLV流:

ffplay http://10.18.16.55:8080/live/streamkey.flv

参考链接

  1. SRS GitHub仓库

  2. FFmpeg官方文档

LICENSED UNDER CC BY-NC-SA 4.0
评论