如何搭建视频转码集群、播放服务器

本文由做者张远道受权网易云社区发布。html


转码集群的搭建linux


随着媒体技术的发展,以及硬件设备的普及和移动设备的触角延伸之社会各个角落,人们能够随时随地产生信息。而这些海量信息中,有很多多媒体信息。多媒体信 息成为了人们信息分享的重要方式。绝不夸张地说,如今是一个信息爆炸的时代。传统的电视,电影,视频网站,及至移动的自媒体(自由人)无时无刻不在吞吐着媒体信息。nginx


这些海量信息的存在给存储和分享都带来了挑战。挑战主要有两方面,一是如何尽量以小成原本存储这些信息。二是如何让这些千差万别的设备产生的信息能被千 差万别是设备观看。解决问题一的方法是在尽量地缩小这些多媒体信息的同时不下降媒体信息的质量。解决问题二的方法是将这些有千差万别设备产生的格式各异 的视频编码成统一的能支持各类设备的视频格式。git


幸运地是,确实存在在实践上已经被证实是切实可行的方案存在,即视频编码技术。能够构建视频编码集群,将原始视频编码成目标格式,在再编码的过程当中,完成视频压缩和统一制式,从而实现存储下降及制式统一。从视频的角度能够将如今 设备分割成两个阵营,一个是苹果阵营,另外一个是非苹果阵营。苹果阵营的视频只要是m3u8为封装格式,内部编码配以H264和AAC便可。而非苹果阵营则 是MP4为封装格式,内部编码已H264和AAC便可。据初略统计H264+aac的编码组合能够达到2:1到4:1的压缩比,能够显著地下降存储空间。github


下图是一个采用gearman框架搭建的简易转码集群(固然该简易集群曾经有1~2人力一个月左右的时间搭建完成,并在生产环境中部署)。

该简易转码集群由四个模块组成:web

  • JobServer负责接收API服务器的请求,创建转码Job,将Job分发给transcode-worker。浏览器

  • API服务器负责接收第三方产品的转码请求,将其转发给JobServer。ruby

  • transcode-worker接收JobServer的做用请求,而且完成转码做业。服务器

  • 分布式文件系统主要用于存储原视频和目标视频。之因此用分布式文件系统是由于transcode-worker部署在不一样服务器上,transcode-worker须要可以在分布式环境中访问视频文件。 app

所需技术:

  1. gearman分布式任务调度框架。很是轻量级,支持C,Java,Python,PHP,C#,Ruby等各类语言,具备任何语言背景的人能够再一块儿工做。

  2. ffmpeg,转码领域的瑞士军刀。几乎支持市面上全部商业视频格式。实验室格式除外。

  3. 搭建API的web服务器技术。本人比较习惯J2EE的Spring那套。固然你能够用ruby on rails,点Net等。

  4. 基础的音视频知识。包括H264编码技术,视频解压缩知识等。

到这里,一个内容生产系统基本成型。可是还须要一个视频内容的deliver系统,即视频播放服务器[集群]。这里将详细地记录视频服务器的搭建步骤。

如何搭建flv媒体服务器


环境

操做系统:linux 2.6.32-5-amd64。Linux 版本便可。

服务器:nginx 1.3.3。nginx的版本能够更高。

客户端:jwplayer

搭建步骤

安装nginx with http_module_flv

一、 下载nginx

wget http://nginx.org/download/nginx-1.3.3.tar.gz

二、 解压

tar –xzvf nginx-1.3.3.tar.gz

三、 安装

cd nginx-1.3.3

./configure --prefix=/home/user/nginx_flv --with-http_flv_module

四、 配置

#user nobody;

worker_processes 1;

#error_log logs/error.log;

#error_log logs/error.log notice;

#error_log logs/error.log info;

#pid logs/nginx.pid;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

log_format main 'remoteaddr−remote_user [timelocal]"request" '

'statusbody_bytes_sent "$http_referer" '

'"httpuseragent""http_x_forwarded_for"';

#access_log logs/access.log main;

sendfile on;

#tcp_nopush on;

#keepalive_timeout 0;

keepalive_timeout 65;

#gzip on;

server {

listen 8088;

server_name localhost;

#charset koi8-r;

access_log logs/host.access.log main;

location / {

root /home/fs/video;

index index.html index.htm;

autoindex on;

location ~ \.flv{

flv;

}

}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html

#

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

# deny access to .htaccess files, if Apache's document root

# concurs with nginx's one

#

#location ~ /\.ht {

# deny all;

#}

}

}

说明:绿色部分为配置flv的部分。/home/fs/video目录为资源存放路径,包括jwplayer以及测试用的视频文件都存放于该目录。

五、 配置jwplayer服务器。

下载开源的jwplayer,好比mediaplayer-5.10。解压以后将player.swf以及jwplayer.js置于/home/fs/video。并将测试视频 zyd.flv 也置于/home/fs/video。

六、 测试

在浏览器中输入 http://hostip:8080/player.swf?type=http&file=zyd.flv

能够随意拖动进度条,能够看到视频正常播放。

如何搭建MP4媒体服务器


环境

操做系统:linux 2.6.32-5-amd64。Linux 版本便可。

服务器:nginx 1.3.3。nginx的版本能够更高。

客户端:jwplayer。或者任何播放器便可。

搭建步骤

安装nginx with nginx_mod_h264_streaming

一、 下载nginx 和nginx_mod_h264_streaming

wget nginx.org/download/ng…

git clone github.com/vivus-ignis…

二、 解压

tar –xzvf nginx-1.3.3.tar.gz

三、 安装

cd nginx-1.3.3

#nginx_mod_h264_streaming为第三方模块。

./configure --prefix=/home/user/nginx_flv --add_module=nginx_mod_h264_streaming_2.2.7

四、 配置

#user nobody;

worker_processes 1;

#error_log logs/error.log;

#error_log logs/error.log notice;

#error_log logs/error.log info;

#pid logs/nginx.pid;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

log_format main 'remoteaddr−remote_user [timelocal]"

相关文章
相关标签/搜索