基于Hadoop 的视频转储研究

时间:2022-05-21 01:25:32

基于Hadoop 的视频转储研究

摘要:随着科学技术的发展,用户对视频访问的需求也与日俱增,有效存储和管理海量的视频文件,为用户提供更好的体验,越来越引起人们的关注。Hadoop则提供了一种新的思路,通过Hadoop的HDFS和ffmpeg的结合,视频的转码和存储得到了更好的效果。

关键词:Hadoop ;视频; 转码;存储

中图分类号:TP37 文献标识码:A 文章编号:1009-3044(2015)30-0157-03

Research for Transcoding and Storage of Videos Based on Hadoop

LI Kai 1, DUAN Liang-tao2 , DONG Lin-lin2

(College of Computer Engineering, Qingdao Technological University, Qingdao 266033, China)

Abstract: With the development of science and technology ,the demands of the users for video access are more and more .It is more and more attact people’s attention that the effective storage and management of video files and providing users with better experience.Hadoop provides a new train of thought. Through the combination of Hadoop HDFS function and ffmpeg,the transcoding and storage of the videos obtain the better effect.

Key words: Hadoop; videos; transcoding; storage

随着移动互联网的迅猛发展,与之相应的视频app也越来越多,网络带宽状况也都不相同,终端的播放设备和软件的千差万别便成了困扰视频应用的难题;随着电信网,互联网和广播电视网的三网融合的发展,更要求视频在三个平台上都能播放,因此视频编码格式需要进行转换。由于用户和网络环境都比较复杂,特别是像视频点播这样的应用,对海量视频进行转码的需要更大,否则不能满足多样化终端环境和不同网络的需求。视频转码业务面临越来越严峻的问题:海量化的视频数据,多平台的视频应用,多样性的视频编码标准。[1]

针对上述问题,首先必须有效地存储和管理视频数据,才能为用户提供良好的下载、播放等服务,Hadoop和ffmpeg为我们提供了新的思路。

1 相关知识

Hadoop是一种可以对海量数据进行分布式处理的软件框架。Hadoop对数据的处理有可靠、高效、可伸缩的特点。HDFS是Hadoop的分布式文件系统,是Hadoop的重要组成部分。在使用的时候,HDFS既能够作为存储组件来配合Hadoop其他组件实现云功能;也可以单独的用来构建集群;通过Hadoop的HDFS,用户便能够开发分布式程序,而不用了解分布式文件系统的底层细节,充分利用集群的特点进行存储和高速运输。MapReduce是一个编程模型,也是一个处理和生成超大规模数据集的算法模型的实现[2]。map和reduce函数是其底层过程。Map函数负责读取文件分片中的数据记录,把所有的数据记录都转换成键值对,并把文件分片的统计数据记录下来。Map函数生成的中间结果作为Reduce函数的输入,它会根据键以合并方式来缩小键/值对列表。

FFmpeg拥有领先的音/视频编码库―libavcodec,是用来转换、记录数字音频、视频,并可以将其转化成流的开源视频工具软件。Ffmpeg虽然是在Linux下开发出来的,但它能够在大部分操作系统中编译,其中就包括Windows系统,能够完成多种视频格式的相互转换,FFMPEG支持FLV,AC3,DV,DivX,MPEG,MPEG4等40多种编码,Matroska,ASF,OGG,AVI,MPEG,等90多种解码[3]。

2 总体架构

利用Hadoop平台及FFMPEG工具实现视频数据转储的架构描述如图1所示[4]:

视频转储的流程如下:

1) 本地服务器获取源视频文件,将源视频文件分割成Chuck_1,Chuck_2,Chuck_3,Chuck_4等视频片段;

2) 将视频片段上传到HDFS;

3) 在Hadoop集群用map对视频片段进行转码生成新的视频片段Chuckm_1,Chuckm_2,Chuckm_3,Chuckm_4等;

4) 利用reduce对Chuckm_1, Chuckm_2,Chuckm_3,Chuckm_4等视频片段进行合并。

3 模块实现

根据视频转储处理流程,系统可以分为视频分割、视频转码、视频合并、视频上传、视频下载五个模块。

3.1视频分割

ffmpeg分割视频的指令示例如下:

ffmpeg -ss 00:00:00 -i f.avi -vcodec copy -acodec copy -t 00:06:00 output.avi

首先,调用Convervideo类,然后调用getTime()方法获取视频的总时长,再根据要分割的分片数,获取每一分片的时长,最后调用ffmpeg分割视频指令对视频进行分割,并将分割后的视频路径写入txt中。

视频分割流程如图2所示,分割后的效果图如图3所示,

一般来说,视频分片存储在HDFS上,而视频转码是在本地文件系统进行的,所以首先需要将视频分片文件下载到本地。之后map( )函数接收键值对,再将视频分片根据解析出的视频分片在HDFS上的存储位置,从HDFS下载到本地,在本地完成转码工作。是map()函数输出的键值对。键值对传送到reduce( )函数的过程比较繁杂,包括键值对的缓存,排序,分区,序列化等过程,如图5所示。map( )函数输出结果时,不是直接写入磁盘中。而是使用了缓冲区,一边缓存map结果,一边对结果进行一些预排序。一个map任务对应一个存放map输出的键值对的环形缓冲区。这个缓冲区的大小默认为100M,缓冲区的存放容量达到一定阈值时,一个后台线程便会把缓冲区的内容写入到磁盘中。后台线程从缓冲区取数据的同时,map仍然会向环形缓冲区中写键值对。当后台线程取键值对因为速度比较慢而导致填满环形缓冲区时,map函数就会阻塞。当缓冲区达到阈值时,后台线程便会创建一个来存放缓冲区键值对的spill文件。所以,一个map任务完成时,也就产生了多个spill文件。map( )函数输出的中间键值对的大小应该尽可能地减小,这样才能降低系统开销。因此,本系统中的作为中间键值对的,不是把转码后的视频分片,而是其存储位置[53.3视频合并

视频合并的ffmpeg指令示例:

ffmpeg -f concat -i /home/hadoop/videotest/codelist.txt -c copy outtest.flv

视频的合并处理工作是由Reducer的reduce( )函数完成的。视频合并过程如图6所示:

首先,map()函数将转码视频分片信息传递给reduce()函数,reduce( )函数根据接收的信息,将转码视频分片从目标节点下载到本地,最后调用视频处理类的合并方法将视频合并,把视频合并结果上传至HDFS。reduce函数不输出键值对。

3.4视频上传

如何实现通过云存储平台把文件上传至HDFS集群,关键是后台代码的编写。这里调用HDFS的API,使用的是HDFS中DistributedFileSystem的copyFromLocalFile 方法,将本地文件根据给出的文件路径上传到HDFS,最终实现文件从用户本地上传到HDFS集群。

上传文件调用的org.apache.hadoop.hdfs.DistributedFileSystem类是继承的抽象类 org.apache.hadoop.fs.FileSystem。客户端如果想要进行相关文件操作,访问HDFS集群,必须通过该类来实现。客户端与集群中NameNode通过DistributedFileSystem类建立连接,然后与NameNode进行通信和相关交互,调用DistributedFileSystem类的相关方法来完成元数据的相关操作。具体流程图7所示。

3.5视频下载

客户端通过DistributedFileSystem类与NameNode建立连接,完成元数据的相关操作后,再调用DistributedFileSystem中的open方法,随后打开HDFS输入流FSDataInputStream,将HDFS文件输入流转向本地文件输出流,利用copyToLocalFile方法便实现了文件从HDFS集群到本地的下载过程。具体流程如图8所示:

4 结论

随着互联网的迅猛发展,云存储、云计算成为了国内外研究的热点。在海量数据存储方面,云存储的优越性使之成为业界关注的焦点。开源分布式系统框架Hadoop拥有强大的数据存储能力和计算能力,在云存储的解决方案和系统架构上,基于Hadoop文件系统的应用越来越广泛[6]。本文中,这种通过Hadoop和ffmpeg的结合的方法,能够很好地提升视频转储的效率,为用户提供良好的用户体验。

参考文献:

[1] 方阳.海量视频实时云转码系统设计与实现[D]. 大连:大连理工大学,2013.

[2] 李晓波.基于Hadoop的海量视频数据存储及转码系统的研究与设计[D].杭州:浙江工业大学,2013.

[3] 赵淑漫. FFMPEG转码技术在HTML5视频系统中的研究与应用[D].上海:东华大学,2013.

[4] 熊晓芸,段良涛,王金龙.云平台上AVS视频转码系统的设计与实现[J].电视技术,2016(6).

[5] 郭奕希.基于Hadoop的视频转码系统设计与实现[D].武汉:华中科技大学,2011.

[6] 张兴.基于Hadoop的云存储平台的研究与实现[D].成都:电子科技大学,2013.

上一篇:变个身材靠近你 下一篇:高校家庭困难学生精细化甄别方法初探