目前 直播和点播 存在四种方案
- rtmp(基于flash, 过时 延迟低)
- http-flv(基于flv b站开源的flv.js)
- hls(apple 私有协议 ios video 原生支持)
- dash (行业 chrome原生支持 基于http)
rtmp适合原生客户端,延迟低.由于基于flash的原因.web端已经不能使用了. http-flv 主要是为了兼容之前的rtmp做的过渡 hls在国内很流行,主要是基于m3u8的ts分片 dash国外流行,支持多分辨率根据网速自动切换
技术选型:
- video.js
- 支持多种编码方式
- nginx proxy_cache
- nginx代理并直接磁盘缓存,减轻后端服务器的压力
- 开源云转码平台 express-ffmpeg
- 支持选择分辨率
- 支持水印
- 支持ts加密
- 提供docker镜像
安装并部署express-ffmpeg
docker 部署手册 https://www.moerats.com/archives/782/
详细文档 https://ffmpeg.moejj.com/instruction/#%E9%98%B2%E7%9B%97%E9%93%BE-token
docker run --restart=always --name express-ffmpeg -d \
-p 3000:3000 \
-e localip=192.168.10.75 \
-e usr=moerats \
-e pass=moerats \
-e url=moerats \
-v ~/express-ffmpeg/mongodb:/data \
-v ~/express-ffmpeg/config:/express-ffmpeg/config \
-v ~/express-ffmpeg/movies:/express-ffmpeg/movies \
-v ~/express-ffmpeg/videos:/express-ffmpeg/public/videos \
-v ~/express-ffmpeg/uploads:/express-ffmpeg/public/uploads \
-v ~/express-ffmpeg/images:/express-ffmpeg/public/images \
moerats/express-ffmpeg
后台登录路径为 http://192.168.10.75:3000/moerats/ 管理员登录 admin/moerats
可以进行视频文件上传,转码,添加水印,复制m3u8链接等等. 开箱即用.
安装配置nginx
这里直接使用nginx proxy_cache 缓存m3u8的视频ts文件,节省后端服务器的压力.
http{
# path 为缓存路径
proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=cache:512m inactive=1d max_size=60g;
server {
listen 80;
server_name aaa.com;
location / {
root html;
}
location /hls/ {
# 这里cache 同http块内部的cache 名字保持一致
proxy_cache cache;
proxy_cache_valid 200 30d;
types {
application/vnd.apple.mpegusr m3u8;
video/mp2t ts;
}
#add_header Access-Control-Allow-Origin *;
#add_header Access-Control-Allow-Headers X-Requested-With;
#add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 如果直接挂载共享存储,则可以直接使用 alias 指定文件目录
#alias /videos/;
proxy_pass http://192.168.10.75:3000/;
}
}
}