我在之前推荐过几个做视频站用的程序,大多数都是具备ffmpeg转码功能的,但是在视频防盗链和加密这块,这些程序都很遗憾并没有相关的功能。
众所周知,一个规模庞大的视频站是绝对要把视频资源进行加密的,否则盗链等一系列问题的发生会导致服务器的带宽过度浪费。所以现在很多视频站都使用HLS(HTTP Live Streaming)技术加密自己的视频。简单点说HLS就是将一个完整的视频切分成多个ts格式的视频文件,当用户下载m3u8文件时,HLS通过m3u8文件内的索引地址来播放具体的每个ts格式的小段视频。
我觉得在国内大部分个人需要用到这种技术的,百分之90都是用来做X站的吧。。。所以,貌似没什么开源的方案可供选择,毕竟行业比较敏感,不过仔细找了一下,发现一个仅存的用nodejs开发的简易转码切片平台:express-ffmpeg
express-ffmpeg官网:http://ffmpeg.moejj.com
官方有比较详细的安装教程,不过是基于Ubuntu的,我这里写一个CentOS的教程,反正我最后搭建起来使用的话问题不大,但是这个程序总让我感觉有点“半成品”的味道。。。
先来关闭SELinux:
vi /etc/selinux/config
把SELINUX=后面的值改为disabled。
重启机器:
reboot
再来安装FFMPEG:
yum -y install epel-release rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm yum -y install ffmpeg ffmpeg -version
再来安装nvm:
yum -y install wget git wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
安装完成之后断开Xshell,重新登录一次,使用nvm安装nodejs:
nvm install v8.7.0
nodejs安装完成之后,使用npm安装express和pm2:
npm install express -gd npm install -g pm2
接下来安装mongodb数据库,新建一个源文件:
vi /etc/yum.repos.d/mongodb.repo
写入:
[mongodb] name=MongoDB Repository baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/ gpgcheck=0 enabled=1
然后yum直接安装:
yum -y install mongodb-org-server mongodb-org
再来安装一个Nginx,用来实现反向代理,还是新建一个源文件:
vi /etc/yum.repos.d/nginx.repo
写入:
[nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1
然后yum直接安装:
yum -y install nginx
启动并设置开机启动:
systemctl start nginx systemctl enable nginx
现在我们来新建数据库存放目录
cd / mkdir -p data/db mkdir -p data/log
然后运行mongodb:
mongod --dbpath /data/db --fork --logpath /data/log/mongodb.log
进入命令行模式,添加用户:
mongo use admin use ffmpeg db.createUser({user:"ffmpeg",pwd:"ffmpeg",roles:[{role:"readWrite",db:"ffmpeg"}]}) db.auth("ffmpeg","ffmpeg")
注:其中数据库名/账号/密码都是ffmpeg,各位这里可以自己修改,建议修改下密码即可。
完成之后按键盘组合键Ctrl+D退出来,接着查找mongodb运行的进程ID:
ps -ef | grep mongodb
杀之:
kill -9 对应你当前的进程ID
然后重新运行mongodb:
mongod -auth --bind_ip 127.0.0.1 --port 27017 --dbpath /data/db --fork --logpath /data/log/mongodb.log
接着我们拉取express-ffmpeg的项目文件,因为这个项目托管再gitee上面,国外服务器下载可能非常慢。
cd / && mkdir www cd www git clone https://gitee.com/quazero/express-ffmpeg cd express-ffmpeg
新建配置文件目录:
mkdir config && cd config
新建配置文件:
vi auth.js
写入配置信息:
module.exports = { user: "admin", password: "设置一个你的管理员密码", db: "ffmpeg", dbuser: "ffmpeg", dbpassword: "ffmpeg" };
注:其中db/dbuser/dbpassword都要对应我们之前创建的mongodb数据库。
安装程序所需依赖:
cd .. npm install
现在就可以尝试运行项目了:
pm2 start bin/www -i 0
打开你的服务器公网IP+3000端口/admin,例如:127.0.0.1:3000/admin,能访问到如下图界面就说明基本正常:
现在我们配置Nginx的反向代理,首先进入到nginx的conf.d目录:
cd /etc/nginx/conf.d
新建一个站点配置文件:
vi yunzhuanma.conf
写入:
server { listen 80; server_name 你的站点域名; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_http_version 1.1; proxy_redirect off; } }
然后重启Nginx:
systemctl restart nginx
现在你就可以直接使用域名来访问了。
如果服务器重启了,如何重新运行express-ffmpeg?
第一步查找mongodb进程ID:
ps -ef | grep mongo
杀掉:
kill -9 进程ID
重新运行:
mongod -auth --bind_ip 127.0.0.1 --port 27017 --dbpath /data/db --fork --logpath /data/log/mongodb.log
进入到express-ffmpeg根目录:
cd /www/express-ffmpeg
使用pm2再次运行即可:
pm2 start bin/www -i 0
现在使用我们创建的管理员账号登录到后台,首先点击“转码设置”,按如下图设置:
重要!不管你使不使用这个“域名分发”的功能,都要点一下“提交”按钮,否则之后上传的视频无法正常播放!
设置完成之后,我们就可以尝试上传一部视频来试试功能了:
上传完成之后,点击“电影库”,然后点击“转码并切片”:
转码以及切片完成后,点击分享链接,程序会给你一个视频地址,这个地址就是处理后的视频地址了,你可以把这个地址插入到你的其他站点中供人观看:
然后我就看了下这个骚的一匹的视频:
请开始你们的表演~
最新评论
5211314
能不能教我 一点不会