基于Docker+SRS构建家庭流媒体服务器的实战指南

张开发
2026/4/11 18:56:04 15 分钟阅读

分享文章

基于Docker+SRS构建家庭流媒体服务器的实战指南
1. 为什么需要家庭流媒体服务器最近几年智能电视越来越普及但很多用户都遇到了一个共同的烦恼买了新电视回家发现想看的内容分散在各个视频平台需要开通多个会员才能观看。更让人头疼的是不同平台对视频格式的支持也各不相同经常遇到下载好的电影在电视上无法播放的情况。我自己就遇到过这样的困扰。去年给父母买了台新电视本想让他们享受高清影视内容结果发现他们喜欢的很多老电影都需要单独付费。更麻烦的是我从网上下载的一些经典影片因为格式问题根本无法在电视上播放。这时候我就萌生了自己搭建家庭流媒体服务器的想法。传统NAS虽然能解决文件存储问题但无法自动处理视频转码。而使用DockerSRS的方案可以完美解决以下痛点多格式兼容自动将各种视频格式转码为流媒体格式跨平台播放支持手机、平板、电视等多种终端集中管理所有影视资源统一存储和管理无需重复付费一次搭建永久使用2. 环境准备与SRS服务器部署2.1 硬件和系统要求在开始之前我们需要准备以下环境一台性能尚可的电脑或服务器建议CPU至少4核内存4GB以上安装好Docker环境的Linux系统Ubuntu/CentOS等稳定的家庭网络环境我使用的是闲置的Intel NUC迷你主机配置是i5处理器8GB内存完全够用。如果你手头有旧电脑完全可以利用起来不需要专门购买新设备。2.2 安装Docker如果你的系统还没有安装Docker可以按照以下步骤操作# Ubuntu系统安装Docker sudo apt update sudo apt install -y docker.io sudo systemctl enable --now docker # 将当前用户加入docker组避免每次都要sudo sudo usermod -aG docker $USER newgrp docker安装完成后可以运行docker version命令验证是否安装成功。2.3 部署SRS流媒体服务器SRS(Simple RTMP Server)是一个轻量高效的流媒体服务器特别适合家庭使用。用Docker部署非常简单# 拉取SRS官方镜像 docker pull registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4 # 运行SRS容器 docker run -d --name srs \ -p 1935:1935 -p 1985:1985 -p 8080:8080 \ registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4 \ ./objs/srs -c conf/docker.conf这里解释下各个端口的作用1935RTMP协议默认端口用于推流和拉流1985HTTP API端口用于服务器管理8080HTTP服务端口提供Web管理界面部署完成后可以通过浏览器访问http://你的服务器IP:8080来打开SRS的Web管理界面。3. 视频推流实战3.1 安装FFmpeg工具FFmpeg是处理视频转码和推流的瑞士军刀。在Ubuntu上安装很简单sudo apt install -y ffmpeg安装完成后运行ffmpeg -version检查是否安装成功。如果遇到问题可以参考官方文档或社区解决方案。3.2 基础推流命令假设我们有一个MP4视频文件movie.mp4推流到SRS服务器的命令如下ffmpeg -re -i movie.mp4 \ -c:v libx264 -preset ultrafast -tune zerolatency \ -c:a aac -ar 44100 -b:a 128k \ -f flv rtmp://你的服务器IP/live/movie这个命令做了以下几件事-re按照视频的原始帧率读取-i movie.mp4指定输入文件-c:v libx264使用H.264编码视频-preset ultrafast使用最快的编码预设-c:a aac使用AAC编码音频-f flv输出格式为FLV最后是推流地址3.3 循环推流和播放列表为了让视频能循环播放可以添加-stream_loop -1参数ffmpeg -re -stream_loop -1 -i movie.mp4 \ -c:v copy -c:a copy \ -f flv rtmp://你的服务器IP/live/movie如果想实现多个视频的连续播放可以创建一个播放列表文件playlist.txtfile movie1.mp4 file movie2.mp4 file movie3.mp4然后使用这个播放列表推流ffmpeg -re -f concat -safe 0 -i playlist.txt \ -c:v copy -c:a copy \ -f flv rtmp://你的服务器IP/live/movie4. 客户端播放方案4.1 网页播放器SRS自带了一个简单的网页播放器访问http://你的服务器IP:8080/players/srs_player.html即可使用。在播放地址栏输入rtmp://你的服务器IP/live/movie就能观看。4.2 使用VLC播放VLC是一款强大的跨平台播放器支持各种流媒体协议。打开VLC后点击媒体 → 打开网络串流输入地址rtmp://你的服务器IP/live/movie点击播放4.3 智能电视播放大多数智能电视都支持安装VLC或其他流媒体播放器应用。安装后按照上述方法输入RTMP地址即可。如果电视不支持RTMP可以考虑在服务器端配置HLS或HTTP-FLV输出。5. 进阶配置与优化5.1 配置HTTPS安全访问为了安全考虑建议为Web管理界面配置HTTPS。首先准备SSL证书然后修改SRS配置# 在conf/docker.conf中添加 http_server { enabled on; listen 8080; https { enabled on; listen 8081; key ./conf/server.key; cert ./conf/server.crt; } }重启SRS容器后就可以通过https://你的服务器IP:8081安全访问了。5.2 多码率自适应流为了适应不同网络环境可以配置多码率输出ffmpeg -re -i input.mp4 \ -c:v libx264 -b:v 2000k -maxrate 2000k -bufsize 1000k -g 60 -preset ultrafast \ -c:a aac -b:a 128k \ -f flv rtmp://你的服务器IP/live/high \ -c:v libx264 -b:v 1000k -maxrate 1000k -bufsize 500k -g 60 -preset ultrafast \ -c:a aac -b:a 64k \ -f flv rtmp://你的服务器IP/live/medium \ -c:v libx264 -b:v 500k -maxrate 500k -bufsize 250k -g 60 -preset ultrafast \ -c:a aac -b:a 32k \ -f flv rtmp://你的服务器IP/live/low然后在客户端根据网络状况选择合适的分辨率。5.3 使用硬件加速如果你的服务器有Intel核显或NVIDIA显卡可以使用硬件加速来降低CPU负载# Intel QSV加速 ffmpeg -hwaccel qsv -c:v h264_qsv -i input.mp4 \ -c:v h264_qsv -global_quality 23 \ -c:a aac -b:a 128k \ -f flv rtmp://你的服务器IP/live/movie # NVIDIA NVENC加速 ffmpeg -hwaccel cuda -i input.mp4 \ -c:v h264_nvenc -preset fast \ -c:a aac -b:a 128k \ -f flv rtmp://你的服务器IP/live/movie6. 常见问题排查6.1 推流失败检查如果推流失败可以按照以下步骤排查检查SRS容器是否正常运行docker ps检查端口是否开放telnet 你的服务器IP 1935检查FFmpeg命令是否正确查看SRS日志docker logs srs6.2 播放卡顿优化播放卡顿可能由以下原因导致服务器性能不足监控CPU和内存使用情况网络带宽不够降低视频码率或分辨率编码参数不合适尝试不同的preset和tune参数6.3 音频视频不同步遇到音视频不同步时可以尝试确保推流命令中使用了-re参数检查视频的帧率设置是否正确尝试添加-async 1参数7. 自动化管理方案7.1 使用脚本自动推流可以编写一个简单的bash脚本来自动推流#!/bin/bash VIDEO_DIR/path/to/your/videos RTMP_URLrtmp://你的服务器IP/live/movie while true; do for video in $VIDEO_DIR/*.mp4; do ffmpeg -re -i $video \ -c:v libx264 -preset ultrafast \ -c:a aac -b:a 128k \ -f flv $RTMP_URL done done7.2 监控和自动重启使用supervisor来监控FFmpeg进程意外退出时自动重启[program:ffmpeg] commandffmpeg -re -stream_loop -1 -i /path/to/video.mp4 -c copy -f flv rtmp://你的服务器IP/live/movie autostarttrue autorestarttrue stderr_logfile/var/log/ffmpeg.err.log stdout_logfile/var/log/ffmpeg.out.log7.3 集成到家庭媒体中心如果你使用Kodi或Plex等媒体中心软件可以通过插件或自定义配置集成SRS流媒体服务实现更友好的用户界面和管理功能。

更多文章