首页 > 范文大全 > 正文

利用FFMPEG技术搭建流媒体服务器

开篇:润墨网以专业的文秘视角,为您筛选了一篇利用FFMPEG技术搭建流媒体服务器范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要: 最近几年,数字视频行业的发展飞速,数字视频摄像机逐渐成为人们生活中一个重要的组成部分。与此同时,视频的格式与编码方式也随之增加,FFMPEG的问世促进了音视频之间的转换。在此主要研究在Linux操作系统下如何进行FFMPEG的安装、编译,如何利用ffmpeg平台进行视频格式间的转换,生产效率高、配置简单、容错性强是该视频转换与的主要特点,同时系统还可以对视频进行压缩,且压缩效率很高,能够明显提高网络传输效率。

关键词: 视频; 音频/视频转换; 流媒体; FFMPEG

中图分类号: TN919?34 文献标识码: A 文章编号: 1004?373X(2014)18?0023?03

Establishing of streaming media server by FFMPEG technology

LI Jun?ting

(Fire Brigade of Hebei Province, Shijiazhuang 050035, China)

Abstruct:In recent years, the rapid development of the digital video industry, digital video cameras become an important part in people's lives gradually. Meanwhile, the video format and encoding mode also increases. However, the advent of FFMPEG promotes the conversion between audio and video. How to install and compile FFMPEG under the Linux operating system, and how to use FFMPEG platform to convert between video formats are studies in this paper. High production efficiency, simple configuration and strong fault?tolerant are the main features of the video converter and release. The system can also compress video, has high compression efficiency, and can significantly improve the network transmission efficiency.

Keywords: video; transformation between audio and video; streaming media; FFMPEG

信息技术的发展很大程度地改变了人们的生活方式。当前,手机走进了人们的视野,成为人们日常生活不可或缺的一部分。而且现在的手机制造者越来越看重它的娱乐价值,手机功能的日渐强大让人们意识到用它来观看电视绝对不再是什么奢望。然而由于手机某些功能的限制,并非任何格式的视频都可以播放出来,况且手机的内存也是有限的,无法存储大容量的电影,因此上就需要转换和压缩视频的格式。为了能够让用户更为方便地预览视频,就需要把其转换成FLV格式[1]。

本文主要介绍视频转换系统在Linux操作系统下运用Java语言,通过FFMPEG平台研发而成的。这样用户就可以在线播放视频,也可以是下载到手机上来播放。

1 系统的目的

本系统提供了一个视频转换,上传,一体化的平台,在这个平台上,管理员在上传完源视频后,源视频就会被自动转换系统进行相应的分析与转换,随之会产生视频缩略图。之后转换过后的视频就会被视频系统在网络上进行。最后用户就可以在手机或者是电脑上观看浏览[2]。编码,分辨率,帧数等属性的制定其实是系统利用设备描述文件来制定的。多个目标文件可以同时输出,自动地在许多不同的设备与其用途之间做调配,选择最优的文件质量和文件尺寸。视频还可以通过自动分割来满足不同设备的不同需要,提升用户的使用质量,在视频中添加水印之后还能够保护所有人的权益。

2 系统设计

2.1 功能方面的设计

在视频的上传,转换与上,本系统为用户提供的服务相当完整。FIP方式和Web方式是视频上传的两种方式。FIP方式的上传速度很快,且适合上传大容量的视频;Web方式上传相对简单方便一些,适合上传的是单个的视频文件。所谓视频文件的转换,就是把源视频转换成需要的其他格式的视频。Web和WAP两种方式既可以供用户通过手机浏览,也可以在网上浏览。

2.2 性能方面的设计

该系统支持并发计算,在单个服务器上用户可以并发多个请求。而且包含队列的管理与防阻塞的机制。利用多台服务器进行分布计算和并发式计算可以进行量视频的转换,也可以通过管理接口,包括性能,日志,负载报告等[3]。

3 系统的实现

系统逻辑结构图如图1所示。

图1 系统整体结构

3.1 系统研发平台

系统的研发是在Linux系统下进行的,采用[JSP+Tomeat]的架构来进行视频的上传和的。视频的转换采用Java作为开发语言,通过操作FFMPEG系统来实现。

3.2 视频的上传

视频的上传方式有两种:FTP方式和Web方式:

FTP方式:适合于对大批量的视频进行上传。在视频上传的过程中,每一个视频对应的有两个文件,一个就是视频文件其本身,而另外一个就是与之对应的相关属性信息,有简介,标题,标签等。比如1.avi,1.txt就是一个视频对应的两个文件。

Web方式:主要适合于上传单个视频。在上传系统中通过采用[spsmartupload]件,可以方便的对文件进行上传。

3.3 数据库

系统的后台数据库为Oracle 10G,主要储存视频的相关信息。包括有视频的标签、简介、标题、格式、大小、时长、尺寸等。

3.4 视频转换

系统的核心就是视频转换。其主要功能就是把上传的视频转换成需要的各种格式,如3GP格式、FLV格式等。转换时主要就是运用的就是FFMPEGJ进行的。以下是视频转换的流程图如图2所示。

FFMPEG简介:FFMPEG作为一个视频,音频转换器,可支持绝大多数符合工业标准的编码,还能够从一种格式转换成另外的一种格式[4],并能利用摄像头捕获到音频,视频等。用FFMPEG进行视频转换的前提就是对FFMPEG的下载,安装,编译要正确,FFMPEG的最新版本可以通过SVN方式进行下载,SVN要在LINUX系统下安装,成功安装后执行命令:

svn checkout svmsvamphyerhpqu ffmljghnmk ffmpcg

图2 视频转换模块流程

通过一定时间的下载,目录下面就会产生一个名为ffmpeg的文件夹,这就是FFMPEG源文件。如果下载和安装了以下文件,就会使ffmpeg能够支持更多格式之间的转换。以下文件也需要下载并安装:[26204-510.zip],[26073-510.zip],[lame.tar.gz],[xvidcore-1.1.0.zip],[zlib-1.2.3.tar.gz],[libtheora.tar.gz],[libvorbis-1.1.1.tar.gz],[libogg-1.1.1.tar.gz],[faac-1.24.tar.gz],[faad2-2.0.tar.gz],[a52dec-0.7.4.tar],[all-20061022.tar]等文件,安装好这些文件后就能够进行FFPEG的编译工作。3GP是绝大多数手机都支持的格式,而要想让本系统支持3GP格式,编译的时候也要加上[-enable-amr_nb-enable-amr_wb]参数,最后,完整的编译命令为:

[./configure-enable-shared-enable-mp3lame-enable-libogg-enable-vorbis]

[enable-faad-enable-faac-enable-xvid-enable-a52][enable-amr_nb-fixed-enable-arm_wb-enable-amr_if2-enable-gpl-cpu=i686 make]

[make] [install]

通过以下测试可以检测到安装的是否成功,先上传一个视频文件,如test.avi,执行以下的命令:

[ffmpeg-itest.avi-acodecaac-ar8000-ac1-ab8-qscale5-s176*144-vcodech263-r10-g180test.3gp]

要是视频能够成功转换,那就表明FFMPEG已经安装成功了。下一步就可以根据具体的需要进行视频转换了。FFMPEG的命令如下:

[ffmpeg[[options][-iinput_file]]???{[options]output_file}???]

对于那些输入的原始文件,可能需要格式选项。[ffmpeg]在缺省的情况下会尽量地进行无损转换,输出与输入相同的音频,视频参数。为了使经过转换的视频质量尽最大可能的好,默认配置通常不会被采用,而是要根据视频的不同,采用最佳的配置参数。

视频转换中,运用Java的防阻塞机制与多线程机制。首先由调度程序[JobQueue]从源文件目录[Source_File]下转移一个尚未转换的视频和对应属性的文件到临时文件夹[Temp_File]下,[JobQueue]把文件参数传给转换程序[Convert_Robot],由[Convert_Robot]来进行视频的转换。[Convert_Robot]首先利用FFMPEG命令读取视频的属性信息,包括时长、格式、尺寸、帧速等参数,然后根据这些参数来进行视频转换。根据系统的需要,每个视频会出现4种版本的视频普通版3GP,清晰版3GP,NV格式的,快速版3GP,如此一来就可以满足不同的用户的不同需要。3GP格式的主要针对手机用户,可以供他们下载到手机上观看。而NV格式主要是为了供用户在网上直接观看视频。对于那些过长的视频,系统会进行自动地截取,来满足用户下载时在时间上的需求。为了保护版权所有人的权益,在视频的转换过程中可以加入水印。同时还截取了每个视频的第一秒作为此视频的缩略图。视频转换完成之后,转换成功的视频会被放入Publish_File文件夹中。在Image文件夹下放入缩略图,同时也把属性文件中的简介、视频标题、标签等信息储存到Oracle数据库里。要是视频转换发生了错误,错误的信息就会被记录到日志文件中。同时,转换系统还可以根据服务器的负载情况灵活地调整线程,争取转换视频的效率最高[5]。

3.5 视频

用户可以在视频模块看到最后的转换产品。为了便于用户观看视频,视频模块提供了两种方式:通过互联网在线观看和下载到手机上观看。使用电脑观看的用户可以直接点击Flash格式进行在线观看,因为Flash格式的视频完全不需要下载就可以直接观看。对于手机用户,可以在三种3GP格式中选出一种进行下载。与此同时,这两种方式都有个自动的搜索入口,用户可以进入搜索入口来搜索自己想要的视频。这个搜索入口可以索引数据库中的视频信息,它采用的是一种比较先进的索引技术,即Lucene索引技术,以便用户能够方便而又快捷地搜索到自己所需要的视频[6]。

4 结 语

生产效率高、配置简单、容错性强是本视频转换与的主要特点。线程数的控制可以通过配置文件来进行。转换速度得到很大地提高,与此同时还有超时机制。经过测试,在一台内存为1 GB,Pentimu 4,CPU 293 GHz的 PC上,一小时大约能够转换300个视频,这样的转换速度非常地接近实时转换。该系统还可以对视频进行压缩,且压缩效率很高,用H.263的编码标准,一个大小为20 MB的视频转换成3GP格式之后,在手机观看质量不受影响的前提下,大约能够压缩到400 KB的大小,这样很大程度地节约了网络传输的时间,明显提高了网络传输的效率。该系统经过稍微的改变之后,能够执行更为复杂的功能。现今越来越多的手机都能够支持视频播放,且用户也越来越习惯于在手机上观看视频,因此上视频的需求量将会越来越大,使用此系统的市场前景相当广阔。

参考文献

[1] 胡成,任平安,李文莉.基于Android系统的FFmpeg多媒体同步传输算法研究[J].计算机技术与发展,2011(10):85?87.

[2] 刘建敏,杨斌,王俊丽.嵌入式Linux下基于FFmPeg的视频硬件编解码[J].单片机与嵌入式系统应用,2011(6):28?31.

[3] 王莹,李莉,王华.Symbian平台下基于FFmpeg的H.264解码器的移植[J].现代电子技术,2011,34(11):43?46.

[4] 何圆圆,何凯.基于FFmpeg的H.264视频解码器的研究与实现[J].电脑知识与技术,2012(35):67?69.

[5] 王洪波.搭建流媒体服务器[J].安徽电子信息职业技术学院学报,2005(6):95?96.

[6] 向伟昌.流媒体服务器性能测评系统的设计与实现[D].长沙:国防科学技术大学,2004.