1. 概述与准备(目标与资源概览)
- 目标:在日本机房的VPS上部署私人影院(例如Jellyfin/Plex)并集成实时/按需转码(ffmpeg),支持HLS/DASH推流与外网播放。
- 必要资源:
日本VPS(推荐带至少1Gbps带宽,CPU 4核+,16GB内存为佳;若需硬件转码,选择带NVIDIA GPU或Intel iGPU的实例)。
- 软件栈:Ubuntu 22.04、Docker/Docker Compose、Jellyfin或Plex、ffmpeg、Nginx(rtmp模块)或nginx + HLS。
2. 选择日本VPS与网络配置(实践要点)
- 选择:比较机房延迟、带宽峰值与流量计费(按需或包月),确认是否允许媒体/流媒体用途(有些供应商限制)。
- 网络:建议固定公网IP与反向DNS;购买额外带宽或流量包以防超支。
- 防火墙端口:开放外部访问端口(例如TCP 80/443,RTMP 1935,或自定义HLS端口),并建议使用云控制台限制管理端口(SSH 22)仅允许指定IP。
3. 系统初始化与基本软件安装(命令级别)
- 登录与更新:ssh root@your_vps_ip,然后执行:
- apt update && apt upgrade -y
- 创建普通用户并配置sudo:
- adduser mediaadmin; usermod -aG sudo mediaadmin
- 安装Docker与Docker Compose:
- apt install -y ca-certificates curl gnupg lsb-release
- curl -fsSL https://get.docker.com | sh
- apt install -y docker-compose-plugin 或安装docker-compose二进制。
- 配置防火墙(ufw示例):
- ufw allow 22/tcp; ufw allow 80/tcp; ufw allow 443/tcp; ufw allow 1935/tcp; ufw enable
4. 使用Docker Compose部署媒体服务(示例文件与说明)
- 在/home/mediaadmin下创建目录:mkdir -p ~/media/{config,data,transcode,nginx}
- 示例docker-compose.yml(精简示例,放在 ~/media/docker-compose.yml):
version: '3.8'
services:
jellyfin:
image: jellyfin/jellyfin:latest
network_mode: bridge
volumes:
- ./config:/config
- ./data:/media
- ./transcode:/transcode
ports:
- "8096:8096"
nginx-rtmp:
image: tiangolo/nginx-rtmp
ports:
- "1935:1935"
- "8080:80"
- 启动:docker compose up -d,并观察docker compose ps与docker logs。
5. 配置转码(ffmpeg 与 Jellyfin 集成、硬件加速)
- Jellyfin默认使用容器内的ffmpeg;确保容器内有ffmpeg或在宿主机安装ffmpeg并挂载。若要硬件加速:
- NVIDIA:安装nvidia-docker2并在compose中添加 runtime: nvidia 与环境变量;容器内使用 --enable-nvenc 编译的ffmpeg或官方支持。
- Intel QuickSync:在宿主机安装iGPU驱动并在容器中映射/dev/dri。
- ffmpeg常用转码命令示例(把input.mp4转码为HLS):
- ffmpeg -i input.mp4 -c:v libx264 -preset fast -b:v 1500k -maxrate 1600k -bufsize 2000k -c:a aac -b:a 128k -f hls -hls_time 6 -hls_playlist_type vod out.m3u8
- 在Jellyfin管理后台 > 播放 > 转码,设置临时目录指向/transcode并配置最大并发转码数。
6. Nginx-RTMP与HLS封装、SSL与域名配置(实操)
- Nginx-RTMP配置要点(nginx.conf):rtmp { server { listen 1935; application live { live on; record off; hls on; hls_path /tmp/hls; } } },把hls_path映射到宿主机目录再由Nginx静态服务提供。
- 使用Let's Encrypt获取证书(推荐使用certbot):certbot certonly --nginx -d your.domain.com,或在宿主机部署nginx反向代理再映射到容器。
- 反代与跨域:配置nginx将https请求反代到Jellyfin或HLS目录,添加CORS头:add_header Access-Control-Allow-Origin "*";(如有需要限制来源请指定域名)。
7. 问:如何验证转码是否生效?
问:我如何确定Jellyfin或ffmpeg的转码正在工作?
答:在Jellyfin后台播放高码率视频并查看管理后台的“活动/转码”面板;同时在宿主机运行top/htop观察ffmpeg进程,或查看容器日志(docker logs 容器名)中是否有ffmpeg调用信息。用curl访问生成的.m3u8文件或通过VLC打开HLS地址以确认播放链路。
8. 问:如何优化性能与避免高带宽成本?
问:我的VPS CPU和带宽经常吃满,有哪些实操优化建议?
答:优先开启硬件转码(NVENC/QuickSync)来减轻CPU;在Jellyfin中设置转码分辨率上限(例如1080p或720p)与码率上限;使用按需转码(只对实时观看转码,预转码将常驻文件);启用缓存与CDN(边缘缓存HLS分片)将显著降低源带宽;合理设置并发转码数以匹配CPU/GPU能力。
9. 问:合规、版权与常见故障如何处理?
问:部署私人影院需要注意哪些法律与技术风险?
答:技术上注意日志与访问控制,使用HTTPS与认证;法律上需遵守日本及目标用户所在地的版权法规,避免未经授权传播受版权保护的内容。常见故障如播放卡顿、404 m3u8、跨域问题,通过查看nginx/jellyfin/ffmpeg日志、检查防火墙、确认文件权限与路径映射来排查。
来源:2日本私人影院vps与流媒体转码服务的集成方案