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

本文由作者张远道授权网易云社区发布。


转码集群的搭建


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


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


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


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

   93d892e9-f50b-42fb-baa4-a7f65c2a119c
该简易转码集群由四个模块组成:

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

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

  •   transcode-worker接收JobServer的作用请求,并且完成转码作业。

  •   分布式文件系统主要用于存储原视频和目标视频。之所以用分布式文件系统是因为transcode-worker部署在不同服务器上,transcode-worker需要能够在分布式环境中访问视频文件。  

所需技术:

  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

1、  下载nginx

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

2、  解压

tar –xzvf nginx-1.3.3.tar.gz

3、  安装

cd nginx-1.3.3

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

4、  配置

#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  'remoteaddrremote_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以及测试用的视频文件都存放于该目录。

5、  配置jwplayer服务器。

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

6、  测试

在浏览器中输入 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

1、  下载nginx 和nginx_mod_h264_streaming

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

git clone https://github.com/vivus-ignis/nginx_mod_h264_streaming.git

2、  解压

tar –xzvf nginx-1.3.3.tar.gz

3、  安装

cd nginx-1.3.3

#nginx_mod_h264_streaming为第三方模块。

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

4、  配置

#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  'remoteaddrremote_user [timelocal]"

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个是试用版,如果您下载后本授权已经过期可联系我们。 关于几个参数的标准: 1. 同步周期:软件每隔多少秒就会查询指定的文件夹有没有需要转码视频文件,如果上传量大可以设置短一些。 2. 最大任务数:软件同时执行转码任务的数量,只要你服务器够强大,完全可以马力全开,设置几十个也不是问题。 3. 是否删除文件:源视频文件是否在转码完成后删除?0为不删除,1为删除。 4. 视频来源目录:举例“d:\WWW\web”,末尾无需\或者/,如果视频文件在其他目录,确保该路径没有符号和空格。 5. 转码格式:指的是要把哪些格式的视频转码为mp4,多个视频格式|分隔,比如flv|mpg|mpeg|avi|vod 如果还有其他格式要转 继续在后面添加,原视频格式可以和输出格式相同,比如原来是mp4文件转码出来也是可以是mp4文件,这样原来的mp4文件会根据设置的参数进行重新处理,让视频更符合网络视频播放规范。 6. 码率:设为500效果比较好,是压缩率和清晰度都能均衡到的最好设置,数字越小 画质越差,视频文件越小,反之亦然,设置为0则保持原来视频的码率,可转高清视频。如果原视频码率低于设置码率,则保持原视频码率输出(低画质视频,强制升高码率只会让文件变得更大,但对画质并无改善,故作此设置),如果原视频码率大于设置码率则降低码率按设置码率输出。 7. 是否切片:如果需要把视频分段存放,则勾选。 a. 分片前缀:因为播放器要读取xml里面分段视频的绝对路径,这里需要设置一个相对于网站根目录的绝对地址。 b. 是否保留原文件:这里的源文件是指转码为整个mp4后的视频文件,如果你的视频需要在移动设备播放,xml列表的播放效果可能不太完美,你就需要保留这个整体的mp4文件在移动端播放,当然不需要你也可以删除,只保留分段的视频文件。 8. 分辨率:保持原视频分辨率设置为0 如果要固定分辨率设置为如:720x480 9. 水印:无需水印设置为0,水印设置标准 10:10 从右上角起距左、距右各10像素,具体要求,自己多调试。 :为英文符号,水印图片的名称必须为watermark.png,否则会错。 10. 图片参数:135*71,新版是随机截取视频图片,135*71是图片大小,如需多图截取则用|分隔多个像素,比如135*71|320*240|480*720,不同图片的截取方便缩略图在网站不同位置调用或选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值