一种视频大数据分布式解码的方法

文档序号:7822284阅读:315来源:国知局
一种视频大数据分布式解码的方法
【专利摘要】本发明公开了一种视频大数据分布式解码的方法,即基于Spark计算框架以及HDFS的视频大数据分布式解码方法,属于计算机领域。该方法主要包括如下步骤,步骤a:将海量视频文件直接上传至HDFS中进行存储;步骤b:自定义Spark的分片模型,该分片包含视频文件的头信息以及完整的视频关键帧边界;步骤c:构造Spark的分布式数据集HadoopRDD,自定义读取分片数据的方式;步骤d:在HadoopRDD的RDD转化中完成分布式解码;步骤e:在HadoopRDD的RDD动作中对解码后视频图像文件进行保存,用于后续的智能视频分析。
【专利说明】一种视频大数据分布式解码的方法

【技术领域】
[0001] 本发明涉及一种计算机视频处理领域,特别是一种视频大数据分布式解码的方 法。

【背景技术】
[0002] 目前视频分析已然在学术以及现实生活中的一个热门领域,原因在于视频数据包 含了大量的有价值的信息,但是视频文件具有容量大,无法直接对其进行分析处理,需要对 视频文件进行解码,获得原始的视频图像帧后,再对图像帧进行分析,这必然涉及到传输、 存储以及解码等工作。


【发明内容】

[0003] 发明目的:本发明提出了一种基于Spark计算框架以及HDFS的视频大数据分布式 解码的方法,解决了现有的海量视频分布式解码方法中存在的不足,有效提高了解码效率, 并且解码准确率达到接近100%。
[0004] 为了解决上述技术问题,本发明公开了一种基于Spark计算框架以及HDFS的视频 大数据分布式解码方法,包括如下步骤:
[0005] 步骤a :将海量(PB级以上)视频文件直接上传至HDFS中进行存储;
[0006] 步骤b :定义Spark计算框架的分片模型(InputSplit),该分片包含视频文件的头 信息以及完整的视频关键帧边界;
[0007] 步骤c :构造Spark的分布式数据集HadoopRDD,定义读取分片数据的方式;
[0008] 步骤d :在分布式数据集HadoopRDD的transformation (RDD转化)中完成分布式 解码;
[0009] 步骤e :在HadoopRDD的action (RDD动作阶段)中对解码后视频图像文件进行保 存,用于后续的智能视频分析。
[0010] 本发明分布式计算是基于Spark,分布式存储是基于HDFS(HadoopDistributed File System, Hadoop分布式文件系统)。
[0011] 所述步骤b中,根据Spark提供的API实现java类InputSplit的子类,该子类 不仅包含数据块在视频文件的起始位置、结束位置、主机信息,还包含视频文件头信息的 结束位置以及主机信息。自定义java类InputFormat类的子类,实现该子类的java类 getSplits方法,修改HDFS数据块(block)的分割方法,以视频图像帧作为分割边界,即对 于每个分割(Split),需判断该分割是否能够得到可解码的帧,从而解决了 HDFS现有分割 方法(按字节)导致的视频图像帧分裂进而无法解码的问题。
[0012] 所述步骤c中,自定义java类RecordReader的子类,该子类的作用是自定义读 取分片数据的方式,并结合步骤b中自定义的InputFormat构造Spark的分布式数据集 HadoopRDD。
[0013] 所述步骤d中,实现HadoopRDD的map转化,对每一个map输入,根据视频解码所 需的头信息,以及FFmpeg解码库实现对海量视频的分布式解码,并按照〈帧的播放时间,视 频中贞图像文件〉格式输出。实现HadoopRDD的reduce转化,对所有HadoopRDD的map转化 的输出结果按key (键)进行排序。
[0014] 所述步骤e中,实现HadoopRDD的action动作,最后结果保存在指定路径下的 SequenceFileOlDFS提供的一种二进制存储文件)中,这些信息能够用于动态监测、前后景 监测、图像识别等智能视频分析。
[0015] 相对于现有技术,本发明具有如下有益效果:
[0016] 1.本发明将海量视频文件直接存储在HDFS中,不需要事先对视频大数据按分布 式文件系统的数据块进行分割,方便了海量视频的存储。
[0017] 2.本发明自定义Spark的数据分片模型ImageInputSplit,继承抽象类 InputSplit,该类不仅包含数据块在视频文件的起始位置、结束位置、主机信息,还包含视 频文件头信息的结束位置以及主机信息。
[0018] 3.本发明自定义InputFormat的子类,实现该子类的getSplits方法,修 改HDFS数据块(block)的分割方法,以视频图像帧作为分割边界,解决了帧分裂导致 视频图像帧缺失的问题。并且自定义分片(ImagelnputSplit)数据的读取方式,即自 定义 RecordReader 类,实现 InputFormat 的 createRecordReader 方法。从而保证了 ImagelnputSplit包含完整的视频关键巾贞边界,解决了传统分布式解码存在的巾贞分裂问题。
[0019] 4?本发明根据以上所述构造Spark的分布式数据集HadoopRDD,通过map、reduce 等转化完成所有解码工作,最后通过action (动作)保存最终的视频图像文件。
[0020] 本发明基于Spark和HDFS,将视频解码任务分发到由可以是较低配置的计算机组 成的集群环境中执行,既节约了系统运行成本,又提高了解码效率,同时解码后的视频图像 帧能够直接用于后续的智能视频分析。
[0021] 本方法在对海量视频文件的解码过程进行创新,不同于传统的基于单机系统的方 法,本方法是面向海量视频文件的解码方法,同时也不同基于MR(Hadoop的分布式计算框 架Map Reduce)的分布式系统,本方法克服了 MR的性能瓶颈,特别是MR无法高效处理小文 件(小于 64M)的缺点。本方法还修改了 HDFS(Hadoop Distributed File System,Hadoop 分布式文件系统)的数据块(block)的分割策略,解决了帧分裂导致视频图像帧缺失的问 题。

【专利附图】

【附图说明】
[0022] 下面结合附图和【具体实施方式】对本发明做更进一步的具体说明,本发明的上述和 /或其他方面的优点将会变得更加清楚。
[0023] 图1方法的整体结构图。
[0024] 图2逻辑分割流程图。
[0025] 图3逻辑分割示例图。
[0026] 图4两种方法所用时间对比图。

【具体实施方式】
[0027] 本发明公开了一种视频大数据分布式解码的方法,即基于Spark计算框架以及 HDFS(HadoopDistributed File System,Hadoop分布式文件系统)的视频大数据分布式解 码方法,属于计算机领域。该方法主要包括如下步骤,步骤a :将海量视频文件直接上传至 HDFS中进行存储;步骤b :自定义Spark的分片模型(InputSplit),该分片包含视频文件的 头信息以及完整的视频关键巾贞边界;步骤c :构造Spark的分布式数据集HadoopRDD,自定 义读取分片数据的方式;步骤d :在HadoopRDD的transformation(RDD转化)中完成分布 式解码;步骤e :在HadoopRDD的action (RDD动作)中对解码后视频图像文件进行保存,用 于后续的智能视频分析。
[0028] 具体而言,如图1所示,本发明提供一种新的视频大数据分布式解码方法,包括如 下步骤:
[0029] 步骤a :将海量视频文件直接上传至HDFS中进行存储;
[0030] 步骤b :自定义Spark的分片模型(InputSplit),该分片包含视频文件的头信息以 及完整的视频关键巾贞边界:
[0031] bl :自定义Spark的分片模型(InputSplit),实现了用户自定义 的ImageInputSplit类,该类继承自抽象类InputSplit,自定义构造方法 ImageInputSpIit(Path file, longbIockStart, long blockLength,String[] blockLocations, long headerStart, long headerLength, String口headerLocations), file是视频文件对象,blockStart是个数据块(block)的起始位置,blockLength是数据块 (block)的长度,blockLocations是数据块所在的主机,headerStart是视频文件头信息的 开始位置,headerLength是视频文件头信息的长度,headerLocations是视频文件头信息, headerLocations是视频文件头信息所在的数据。
[0032] b2 :自定义InputFormat类的子类ImageInputFormat,在其构造方法中初 始化HFFmpegFrameGrabber解码器对象,并覆写getSplits方法,该方法作用是使用 HFFmpegFrameGrabber对象,获取视频文件的头信息以及关键巾贞边界,组成新的数据分片, 返回ImageInputFormat对象集合。获取关键巾贞边界的过程如下:将HFFmpegFrameGrabber 对象设置为视频文件的起始位置,然后通过HFFmpegFrameGrabber对象获取下一巾贞图像, 判断该巾贞是否为关键巾贞,如果是关键巾贞,把该巾贞作为新的ImageFramesSplit对象的起始 中贞,如果不是关键巾贞,继续往下获取直到是关键巾贞,然后停止获取,该ImageFramesSplit对 象结束,并返回ImageFramesSplit对象。逻辑分割流程如图2所示,逻辑分割如图3所 示,图3中,1,3,4是关键巾贞,其余是非关键巾贞。视频文件头信息HeaderSplit也是通过 HFFmpegFrameGrabber 对象对视频文件进行获取。HeaderSplit 和 ImageFramesSplit 组成 新的ImageInputSplit对象,加入到ImageInputSplit对象集合中,最后返回该集合;
[0033] 步骤c :构造Spark的分布式数据集HadoopRDD,自定义读取分片数据的方式:
[0034] cl :步骤 b2 中的 ImageInputFormat 中,createRecordReader 方法返回一个 ImageFrameRecordReader 对象;
[0035] c2 :实现自定义的 ImageFrameRecordReader 类,该类继承 RecordReader 类。在ImageFrameRecordReader类中,初始化initialize方法通过参数设置注 入ImageInputSplit对象,并在方法中创建HFFmpegFrameGrabber解码器对象。在 ImageFrameRecordReader 类中,nextKeyValue 方法首先将 ImageInputSplit 分裂为 HeaderSplit 和 ImageFramesSplit,设置当前Key 的值为 0,对应 Value 的值为 HeaderSplit 的二进制数据,接着判断HFFmpegFrameGrabber解码器对象是否超出该ImageFramesSplit 对象的结束位置,如果没有超出,继续获取下一图像巾贞,如果超出,该ImageFramesSplit结 束。通过每次迭代执行nextKeyValue方法来判断是否还有可获取的图像帧,直接设置当 前的Key和Value,Key为图像帧的播放时间,Value为图像帧的二进制数据,分别在方法 getCurrentKey 和 getCurrentValue 中返回对应的值;
[0036] 步骤d :在HadoopRDD的transformation (RDD转化)中完成分布式解码:
[0037] dl :根据 Spark 提供的 API (Application Programming Interface),编写 map 的 函数,该函数的作用是根据map的传入参数key [0]对应的value (视频文件头信息)对所 有key [i] (i>0)对应的value值(视频图像帧的二进制数据)进行解码。
[0038] d2 :图像解码后,将视频图像播放时间作为key,视频帧图像文件作为value,以 〈key, value〉形式作为map的输出。
[0039] d3 :根据Spark提供的API编写reduce的函数,该函数的作用是对步骤b2输出的 数据按其key值(视频帧播放时间)进行排序;
[0040] 步骤e :在HadoopRDD的action(RDD动作)中对解码后视频图像文件进行保存, 用于后续的智能视频分析:
[0041] el :根据 Spark 提供的 API,调用 HadoopRDD 的 saveAsSequenceFile 方法,将最终 数据保存在指定路径下的SequenceFile中。其中文件中的key值是视频帧的播放位置, value值是视频图像文件。
[0042] 实施例:
[0043] 本实施例中,Spark与HDFS集群由9台x86的PC机组成,每台PC机CPU为 Intel(R)Core (TM)i7-2600 CPU03. 40GHz,内存为 4G,硬盘为 500G,其中 1 台作为集群 Master,8台作为集群Slave,用于解码的视频文件的大小分别为30M,60M,90M,1G,2G, 4G的MP4视频。本实施例将上述不同大小的视频文件分别进行本方法解码、单机解码和 Hadoop (MapReduce结合HDFS)分布式解码,并对三种解码方式的解码时间以及准确性做了 对比。
[0044] 本方法解码和单机解码的所用时间对比如图4所示。本方法的解码的时间远远小 于单机解码的时间。
[0045] 设Hadoop分布式解码后的视频记为H,本方法解码后的视频记为S。测试结果如 表1 :
[0046]

【权利要求】
1. 一种视频大数据分布式解码的方法,其特征在于,包括如下步骤: 步骤a :将海量视频文件直接上传至HDFS中进行存储; 步骤b :定义Spark计算框架的分片模型,该分片包含视频文件的头信息以及完整的视 频关键巾贞边界; 步骤c :构造 Spark计算框架的分布式数据集HadoopRDD,定义读取分片数据的方式; 步骤d :在分布式数据集HadoopRDD的RDD转化中完成分布式解码; 步骤e :在分布式数据集HadoopRDD的RDD动作阶段中对解码后视频图像文件进行保 存,用于后续的智能视频分析。
2. 根据权利要求1所述一种视频大数据分布式解码的方法,其特征在于:所述步骤b 中,根据Spark提供的API实现InputSplit的子类,自定义InputFormat类的子类,实现 InputFormat类的子类的getSp 1 i ts方法,修改HDFS数据块的分割方法,以视频图像巾贞作为 分割边界,即对于每个分割,判断该分割是否能够得到可解码的帧;InputSplit子类包含 数据块在视频文件的起始位置、结束位置、主机信息,视频文件头信息的结束位置以及主机 信息。
3. 根据权利要求1所述一种视频大数据分布式解码的方法,其特征在于:所述步骤 c中,定义RecordReader的子类,从而定义读取分片数据的方式,结合步骤b中自定义的 InputFormat构造 Spark的分布式数据集HadoopRDD。
4. 根据权利要求1所述一种视频大数据分布式解码的方法,其特征在于:所述步骤d 中,实现分布式数据集HadoopRDD的map转化,对每一个map输入,根据视频解码所需的头 信息,以及FFmpeg解码库实现对海量视频的分布式解码,按照〈帧的播放时间,视频帧图像 文件〉格式输出;实现HadoopRDD的reduce转化,对所有HadoopRDD的map转化的输出结 果按key进行排序。
5. 根据权利要求1所述一种视频大数据分布式解码的方法,其特征在于:所述步骤e 中,实现HadoopRDD的action动作,最后结果保存在指定路径下的HDFS提供的二进制存储 文件 SequenceFile 中。
【文档编号】H04N19/44GK104394415SQ201410748160
【公开日】2015年3月4日 申请日期:2014年12月9日 优先权日:2014年12月9日
【发明者】高翔, 宋智军, 曹博琦 申请人:中国电子科技集团公司第二十八研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1