随着媒体技术的发展,以及硬件设备的普及和移动设备的触角延伸之社会各个角落,人们可以随时随地产生信息。而这些海量信息中,有不少多媒体信息。多媒体信息成为了人们信息分享的重要方式。毫不夸张地说,现在是一个信息爆炸的时代。传统的电视,电影,视频网站,及至移动的自媒体(自由人)无时无刻不在吞吐着媒体信息。
这些海量信息的存在给存储和分享都带来了挑战。挑战主要有两方面,一是如何尽可能以小成本来存储这些信息。二是如何让这些千差万别的设备产生的信息能被千差万别是设备观看。解决问题一的方法是在尽可能地缩小这些多媒体信息的同时不降低媒体信息的质量。解决问题二的方法是将这些有千差万别设备产生的格式各异的视频编码成统一的能支持各种设备的视频格式。
幸运地是,确实存在在实践上已经被证明是切实可行的方案存在,即视频编码技术。可以构建视频编码集群,将原始视频编码成目标格式,在再编码的过程中,完成视频压缩和统一制式,从而实现存储降低及制式统一。从视频的角度可以将现在设备分割成两个阵营,一个是苹果阵营,另一个是非苹果阵营。苹果阵营的视频只要是m3u8为封装格式,内部编码配以H264和AAC即可。而非苹果阵营则是MP4为封装格式,内部编码已H264和AAC即可。据初略统计H264+aac的编码组合可以达到2:1到4:1的压缩比,可以显著地降低存储空间。
下图是一个采用gearman框架搭建的简易转码集群(当然该简易集群曾经有1~2人力一个月左右的时间搭建完成,并在生产环境中部署)。
该简易转码集群由四个模块组成:
·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媒体服务器以及如何搭建MP4媒体服务器。