lala.im:CentOS7部署云转码express-ffmpeg

運維技術·lala.im · 2018-08-28 · 118 人浏览

原文地址:https://lala.im/3961.html,請支持原作者!該處僅作轉載。

我在之前推荐过几个做视频站用的程序,大多数都是具备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

现在使用我们创建的管理员账号登录到后台,首先点击“转码设置”,按如下图设置:

範例
重要!不管你使不使用这个“域名分发”的功能,都要点一下“提交”按钮,否则之后上传的视频无法正常播放!

範例
设置完成之后,我们就可以尝试上传一部视频来试试功能了:

範例
上传完成之后,点击“电影库”,然后点击“转码并切片”:

範例
转码以及切片完成后,点击分享链接,程序会给你一个视频地址,这个地址就是处理后的视频地址了,你可以把这个地址插入到你的其他站点中供人观看:

範例
然后我就看了下这个骚的一匹的视频:

範例
请开始你们的表演~

運維技術 lala.im
Theme Jasmine by Kent Liao