把视频部署在VPS上播放,看着操作简单,但实际落地有不少分支选择。需要先确定需求:是个人偶尔观看,还是多人同时访问;视频文件是已经完成转码压制,还是需要服务器实时转码;VPS的带宽和流量配额能不能支撑播放。不同需求对应的实现方案完全不一样,不存在万能方案。
最简单的思路,把VPS当成带公网IP的网络存储。部署Nginx或者Caddy,视频文件放到网站根目录,浏览器直接访问文件路径就能播放。MP4格式浏览器原生支持,打开即可播放,无需额外程序。缺点是只能使用预先编码好的文件,拖动进度条会触发完整HTTP请求,大文件弱网环境播放体验差。如果只是把文件下载回本地观看,直接用SFTP拉取文件更合适,VPS仅做存储。想要网页预览,可以部署filebrowser或者alist。filebrowser很轻量,单二进制程序运行就自带网页界面,支持在线预览视频。alist偏向网盘挂载,可以整合VPS本地目录、OneDrive、Google Drive等资源统一展示,播放采用直链方式,不用手动配置Web服务。两款工具资源占用低,1核1G服务器就可以运行。

如果视频要分享给其他人,或者多台设备统一管理,就要部署媒体服务器。Jellyfin开源方案上手简单,Docker拉取镜像,映射8096端口,启动之后网页端添加媒体库目录,程序自动抓取海报、简介等元数据。手机、电视、电脑都有对应的客户端。Plex和Emby功能相近,部分高级功能需要付费解锁。这类工具核心优势是实时转码:播放端网络差,或是设备不兼容视频编码,服务器会实时把视频转成匹配的码率和分辨率再推送。转码会大量消耗CPU,软转1080p视频基本占满两三个核心,4K视频很难在低价VPS流畅转码。VPS搭载核显支持Intel QSV可以开启硬件转码,降低CPU负载。选购机器前确认硬件条件,很多低价套餐没有GPU。
想要网页端播放更流畅,HLS切片是常用方案。使用ffmpeg把MP4切割成数秒一段的TS分片文件,生成m3u8索引文件,播放器按需加载分片,拖动进度条不用完整下载全部文件。参考命令:ffmpeg -i input.mp4 -c:v libx264 -c:a aac -f hls -hls_time 10 -hls_list_size 0 output.m3u8。切片完成,m3u8与TS文件放到Web目录,前端引入video.js或者hls.js播放。Nginx配置需要添加m3u8、ts文件MIME类型,否则浏览器会直接下载文件而非播放。这套方案适合网页播放场景,不想部署重型媒体服务,VPS只负责分发静态分片文件,压力更小。
带宽和流量是VPS播放视频最容易忽略的限制。大部分低价VPS标注1Gbps端口,但每月流量仅1T至2T。一部1080p电影体积约4到8G,少量用户观看很快耗尽流量。流量超额之后会限速或者额外扣费,成本难以预估。访问人数较多的场景,更合适的方案是视频文件存放对象存储,搭配CDN分发,VPS仅运行转码和调度服务。或者降低码率,使用720p甚至480p切片,牺牲画质节省流量。VPS出口带宽属于共享资源,晚高峰实际可用带宽会下降,不能只参考商家标注带宽上限。
安全层面,不要直接开放可写入的视频目录。Nginx配置目录权限,关闭autoindex,防止其他人浏览文件列表。不希望外人随意访问,开启HTTP Basic Auth,或者在应用层增加登录鉴权。使用alist、Jellyfin自带用户权限系统,比裸奔静态目录安全很多。版权方面,自有、拥有授权的视频资源可以部署,来路不明影视资源放在公网VPS,容易收到DMCA投诉,机房甚至直接关停服务器。
实操建议,优先尝试静态文件播放方案,确认VPS带宽流量满足需求,再考虑媒体服务器或者HLS切片。转码切片操作尽量在本地电脑完成之后上传文件,不要在VPS实时运算,节省VPS的CPU资源。