郑 娟 ,徐刘杰,吴 豹,李 彪
(1.滁州学院 教务处,安徽 滁州 23000;2.湖南科技学院 信息技术与教育系,湖南 永州 425100;3.滁州学院 计算机与信息工程学院,安徽 滁州 239000)
互联网媒体元素在当代社会发挥越来越重要的作用,数据产生方式由原来被动式的内容定制,变成主动式的用户原创。在众多的网络资源中,视频媒体占据着互联网网络资源的半壁河山。随着用户对视频资源的点播需求越来越多,通过手机、平板等各种终端来快速获取视频资源,已经成为当下一种资源获取的主流形式。如何快速处理这些海量视频文件变得极具迫切性。
国内外相关领域的研究人士对于处理大数据提出了很多的解决方案,但是目前得到最广泛使用的是Hadoop并行计算技术[1]。Hadoop主要包括HDFS和MapReduce两大部分[2]。HDFS提供了完善的分布式存储方案,帮助用户分布式地存储大文件,而MapReduce是种优秀的并行程序框架,帮助用户轻松的写出分布式处理代码[3]。为了应对越来越多的视频在线点播,万维网理事会推荐使用内置的视频标签代替传统的Flash插件进行在线视频点播。但是浏览器厂商对于可点播视频的格式支持力度有限,目前得到最广泛支持的是由H.264编码的MP4格式。面对种类繁多的视频大文件,如何快速地将它们转换为在线播放所支持的编码类型,在当下变得尤为重要。
Hadoop在大文件存储和处理方面有着独特的优势,通过HDFS可以快速地对视频大文件进行分布式存储,通过编写MapReduce程序对HDFS系统中的文件进行并行转码[4]。本系统主要是在Hadoop环境和FFmpeg软件下设计分布式视频转码系统,帮助用户实现在线并行转码操作[5]。利用分布式处理可以降低视频转码所需要的时间,提高视频处理的效率,快速地为用户文件提供在线点播服务。
本系统总体采用B/S结构,用户使用浏览器即可完成所有的后台操作。服务器端通过对用户状态进行实时监听,及时响应用户的操作,调控服务器端资源,针对用户的视频文件进行分布式转码操作[6]。
在浏览器端,用户首先需要登录后台,后台操作界面分为“文件功能区”和“转码功能区”。文件功能区主要包括“文件上传”和“文件管理”,而转码功能区主要为用户提供“创建转码任务”和“查看转码进度”。在文件上传部分,系统设计了分片上传结构,当用户上传视频文件时,系统先将用户的文件分割成一个个文件分块,分别发送到服务器指定存储位置,最终在服务器内归并为原始的视频文件,结构如图1 中的图A。
在服务器端,设计并行工作结构,当系统检测到用户提交转码请求后,首先会把用户需要转码的大文件进行分割,然后把分割后较小的文件存入HDFS中,存储完毕后调用MapReduce程序对每个小文件进行转码操作[7],最终把HDFS中存储的小文件合并为一个最终视频文件,通过分布式工作结构完成视频的并行转码工作,结构如图1中的图B。
图1 系统结构图
1.2.1 用户操作端功能模块
用户操作端为用户提供一个完善的后台操作平台,帮助用户顺利的使用平台,平台功能主要包括“系统设置模块”、“文件功能模块”和“转码功能模块”,具体的结构图如图2所示。
(1) 系统设置模块:此模块主要完成对于操作后台的相关设置,主要包括对于菜单、导航、账户、角色的管理和相关权限分配。
(2) 文件功能模块:主要为用户提供“存储总览”、“文件上传”、“文件管理”等功能。
(3) 转码功能模块:主要为用户提供“添加转码任务”、“查看转码进度”、“转码任务管理”。
图2 后台结构图
1.2.2 服务器端功能模块
服务器端的主要责任是针对用户的视频文件进行分布式存储和并行转码操作,服务器端通过不断监听后台数据库的数据变化获取并创建新的任务,然后对任务进行资源分配,最终完成视频的并行转码[8]。其主要功能模块包括用户任务监控、视频文件分割、文件分布式存储、文件分布式转码、文件块合并等操作,具体的功能结构如图3所示。
图3 转码后端结构图
用户操作端基于PHP和ThinkPHP框架设计了动态操作界面,利用MYSQL数据库进行数据管理。用户操作端主要包括“系统设置”、“文件功能区”和“转码功能区”三大部分。
2.1.1 系统角色管理
系统默认包含超级管理员、管理员和系统用户三种角色,同时系统也支持自定义角色,不同的账户角色在系统中代表着不同的使用权限,系统用户只能查看自己操作权限下的相关内容。
(1)角色管理界面实现。在角色管理界面中,主要包括角色的添加、编辑、删除和角色权限设定等功能。
(2)角色管理主界面功能实现。系统通过查询用户角色表,显示角色列表,并创建相应的按钮事件,用户通过点击相应的按钮即可对用户角色进行管理。
2.1.2 文件分片上传
由于系统处理的数据对象是视频文件,而视频文件通常体积巨大,传统的HTTP文件上传不具备很好的稳定性,系统设计了分片模式,针对视频文件进行分片上传。
(1)客户端文件分片。由于视频文件存储较大,用户在系统中选择视频文件后,系统首先会调用客户端脚本程序把文件进行一系列的分割,系统的分割单位为1MB,文件分割过程中,会向服务器发送一个个碎片文件。
(2)服务器文件融合。客户端会持续向服务器端发送已经被分割好的碎片文件,服务器脚本接受文件后会等待最后一个文件碎片,当最后的数据接收完毕后,服务器执行文件融合功能,把一系列小文件融合为大的数据文件。
2.1.3 添加转码任务
用户上传视频文件完毕后,可以对视频文件添加转码任务,通过点击文件列表后的“添加转码任务”按钮即可打开任务向导。用户通过选择转码文件的格式类型并点击“下一步”按钮,即可完成转码任务的添加。用户提交视频转码请求后,服务器会启动分布式转码模块,对视频资源进行并行转码,并及时更新任务状态,用户可以在后台查看任务转码进度。用户在系统后台,可以对已经存在的转码任务进行历史状态查询、删除等管理操作。
2.1.4 视频在线播放
当转码任务执行完毕后,用户可以通过后台对转码后的视频资源进行在线播放,通过引用HTML视频播放插件,并编写相应的控制器代码[9],实现对指定的文件进行在线播放。
系统利用JAVA语言、Hadoop大数据处理框架、FFmpeg音视频处理软件设计了针对视频文件的分布式处理系统,系统的操作对象是用户视频,具体操作包含“任务创建”、“文件分割”、“分布式存储”和“并行转码”。
2.2.1 任务创建
当用户提交转码任务后,系统会即时感应到数据库内容的变化,并获取相应的任务列表,执行任务创建操作。
2.2.2 文件分割并上传HDFS
转码任务创建成功后,系统会把视频文件进行切片处理,文件在分割过程中,会保持每个小视频文件仍具备视频的二进制格式,保证每个数据文件的完整性,视频切片完毕后,系统会把每个切片视频存储进HDFS中。
2.2.3 MapReduce分布式转码
当文件均存入HDFS后,主控程序开始调用MapReduce分布式模块对HDFS中存储的视频文件进行转码操作。主要是四个步骤,分别是主控进程任务分配、分布式转码、结果集合并、转码文件合并[10]。
本系统主要对文件分片上传、转码任务创建、转码任务状态、视频在线播放进行测试并进行数据分析,具体内容如下所述。
系统后台为了为用户提供了文件上传功能,就必须保证文件上传的速度和稳定性。在测试操作过程中,我们准备了大小为3GB的测试文件,然后通过Windows7系统中内置的性能监视器对网卡的发包状况进行实时监控。通过观察可以发现在文件上传过程中,分片系统能够让网卡发挥100%的工作效率,并且能够长时间维持高速的文件上传状态,结果说明文件的分片上传模式可以为用户提供良好的上传体验。
转码任务的创建过程包括用户后台操作和服务器后台监听两部分,用户后台操作主要包括任务向导提交,服务器后台通过监听用户数据变化及时创建转码任务。
服务器后台程序通过监听用户任务数据表状态,及时调动相应的任务创建模块,针对用户提交的请求创建转码任务发现服务器后台程序能够及时响应用户的合法转码请求,并为用户的转码任务分配必要的资源,最终帮助用户完成视频转码操作。
转码任务状态由管理后台和服务器程序两部分共同维护,状态码如表1所示。
表1 任务状态码
通过测试发现系统能够很好地执行监控任务,能够给予用户清晰的信息展示。
系统针对用户文件提供上传和管理功能,对用户的视频资源提供转码任务创建、转码任务状态监控等功能。系统的设计目标是为用户上传的视频文件进行分布式转码操作,最终将用户的视频文件转码为H.264编码的MP4格式[11]。在系统设计过程中需要解决用户的文件上传、文件管理、视频文件分布式转码等关键技术。针对文件上传部分,系统设计了分片上传模式,针对用户的上传文件首先会进行分片处理,然后依次向服务器发送文件碎片,当传输完毕后,服务器会对文件碎片进行融合,最终形成完整的数据文件。系统基于MYSQL数据库和PHP动态网页语言设计了用户操作后台,用户可以在控制后台进行文件管理、视频文件转码和任务进度监控等操作。针对分布式转码操作,系统首先架构了HDFS分布式存储环境,在HDFS基础上编写了MapReduce代码[8],最终对用户的视频文件进行分布式存储和转码操作。通过分布式的数据存储和数据操作,帮助用户快速地存储视频资源和对视频资源进行快速转码。
[参考文献]
[1]O’Driscoll A, Daugelaite J, Sleator R D. ‘Big data’, Hadoop and cloud computing in genomics [J]. Journal of Biomedical Informatics, 2013, 46(5): 74-81.
[2](美)Tom White.Hadoop权威指南[M]. 周傲英, 曾大聃译. 北京: 清华大学出版社, 2010.
[3]蔡武, 陈湘萍. Hadoop技术内幕[M]. 北京: 机械工业出版社, 2014.
[4]王晓华. MapReduce 2.0源码分析与编程实践[M]. 北京: 人民邮电出版社, 2014.
[5]苏凯雄. 基于FFmpeg的H.264格式转换器的设计与实现[J]. 电视技术, 2016(07): 32-35.
[6]杨帆, 沈奇威. 分布式系统Hadoop平台的视频转码[J]. 计算机系统应用, 2011(11): 80-85.
[7]丁峰. 嵌入式Linux平台下基于FFmpeg库视频格式转换设计[D]. 哈尔滨:哈尔滨工程大学, 2013.
[8]吴锋. 基于Hadoop平台的视频转码系统设计与实现[D]. 上海:上海交通大学, 2014.
[9]刘笑. 基于Hadoop的视频点播关键技术研究[D]. 成都:电子科技大学, 2015.
[10]黄晓成. 面向视频云存储的HDFS负载均衡工具设计与实现[D]. 杭州:浙江大学, 2016.
[11]罗文. 基于HTTP自适应流媒体关键技术的研究及实现[D].南京:南京邮电大学, 2014.