一种流媒体集中存储系统设计与实现

2015-06-05 09:50杨文娟段洪秀
电视技术 2015年19期
关键词:视频流存储系统硬盘

杨文娟,汤 铭,周 灵,段洪秀,杨 艳

(中国传媒大学南广学院 传媒技术学院,江苏 南京 211172)

一种流媒体集中存储系统设计与实现

杨文娟,汤 铭,周 灵,段洪秀,杨 艳

(中国传媒大学南广学院 传媒技术学院,江苏 南京 211172)

从网络吞吐量、磁盘读写性能等关键指标上分析了流媒体集中存储的需求,并以此为基础设计实现了一种流媒体集中存储系统。结合实现过程中遇到的问题,着重围绕存储进程的管理模式、索引的建立、存储文件的分配与调度、存储介质的保护等几个关键点展开了讨论。

视频;并发;效率;索引

视频监控系统由接入、分发、控制、存储、回放等5大服务组成[1],其中分发和存储服务是系统的核心。而存储和回放服务在设计和实现阶段必须统一考虑,才能够安全高效地利用存储介质,实现快速精准的回放定位。从降低系统耦合性的设计原则出发,存储和回放服务可以从视频监控系统中剥离出来,成为独立的存储与系统。

对于视频点播系统,其主要功能是将各种编码格式和封装格式的视频文件转换成便于在电信或广电网络上传播的流数据[2];而对于安防视频监控系统或者赛事实况转播系统,其主要功能则是一边从前端设备接收流数据,一边向客户端分发,一边将接收到的流数据按照某些格式保存成文件,以备视频点播系统进行查询和回放[3]。后者是本文重点讨论的对象。

流媒体集中存储系统在设计时至少需要考虑以下几个问题:需要多大的带宽和存储介质?流数据以何种方式写入?如何建立便于快速定位的流数据索引?如何为视频文件分配空间并进行调度?本文将在逐一回答上述问题的同时,完成流媒体集中存储系统的设计与实现。

1 数据吞吐量及存储消耗量需求计算

普通安防监控一般设置为12 f/s(帧/秒)可使人影不拖沓;25 f/s能表现快速运动的物体,常用于道路监控或赛事直播。随着分辨率、帧率、画质以及画面内容复杂度的不同,一路原始视频流的码率可能介于512 kbit/s~10 Mbit/s之间。为便于叙述,下文中一律按常见的4 Mbit/s计算。

通过计算可以得出:100路视频每秒钟写入磁盘总量约为50 Mbyte(4 Mbit/s×100/8);一路视频流每天需要消耗存储介质约为42.187 5 Gbyte(4 Mbit/s×3 600×24/8/1 024);100路视频每月消耗存储123.6 Tbyte(42.187 5×100×30/1 024)。 至此可以明确本文视频存储系统的目标是如当100路4 Mbit/s视频流并发写入时,如何提升磁盘写入效率,保证并发写入的速度之和(包括建立索引的消耗)超过50 Mbyte。

2 流数据并发写入存储介质

集中存储系统具有多路并发接收、并发保存、接收和保存同时持续进行的特点。在此前提下,接收流数据并存入文件可行的方式有3种,如图1所示。

图1 流数据存入文件方式示意图

2.1 独立进程方式

如图1a所示,每一个进程接收一路视频流,该进程使用保留64 Mbyte内存,其中32 Mbyte用于保存接收的数据,当存满后一次性写入到硬盘,写入硬盘期间使用另外的 32 Mbyte 保存接收的数据,2部分内存交替使用。使用 32 Mbyte 的大缓存机制能够降低机械硬盘磁头的物理运动频率,既提高了系统IO效率,也能对磁盘起到基本的保护作用。

为考察这种方式能否支持数据吞吐量的需求,本文使用市面上常见的希捷7 200转SATA硬盘(存储容量1 Tbyte,实验前已通电使用5 684 h,约合263天)开展了100路数据并发写入实验。为减少机械硬盘的寻道时间,提高硬盘使用效率,降低对硬盘的损伤,不同进程之间通过信号量实现了对硬盘的互斥访问。经过30次测试,单次净写入时间(不含互斥等待时间)、单次总写入时间(含互斥等待时间)如表1所示。

表1 独立进程方式100路视频流存储效率测试结果s

写入时间最大值最小值平均值单次净写入时间074028042单次总写入时间368087230

从表2的实验数据可以得出,100个随机接收数据的独立进程中,每一个都可以在不大于3.68 s的时间内完成 32 Mbyte 视频数据的写入;而通过计算也可以得出使用 32 Mbyte 缓存接收4 Mbit/s的流数据可以持续缓存64 s。由此可以证明,常见机械硬盘可以满足系统的上述设计性能需求。

当满负荷运行时,系统启100个进程,共消耗内存约 6.4 Gbyte。 该方式中各路视频流相互独立、不会互相影响,程序结构简单,鲁棒性好;而且使用了32 Mbyte大缓存机制减少访问硬盘的频率,使用互斥进程锁防止并发写硬盘造成IO操作碎片化。

2.2 单一进程方式

如图1b所示,由单一进程完成数据接收和写入的全部工作。该进程包含若干个线程,其中多个Recv线程接收来自前端设备的流数据,存入各自的缓存中;Write线程通过轮询或接收信号方式访问这些缓存,将其中的内容依次写入硬盘。

系统始终保持只启动1个进程,当满负荷运行时,该进程包含100个Recv线程和1个Write线程,共占用6.4 Gbyte内存。该方式优点在于Write线程实现了硬盘访问串行化,完全杜绝了硬盘并发访问操作,结合缓存机制,实现硬盘使用效率的最优化,写入速度最高;缺点是线程数庞大,调度易出错,且发生错误后可能对所有视频都产生影响,另一方面由于单一进程占用内存过大,无法在32位处理器或安装了32位操作系统的设备上运行。

2.3 共享内存方式

如图1c所示,每个Recv进程接收1路视频流,将其缓存在共享内存的某一区域;统一的Write进程通过轮询或接收信号方式访问这块共享内存的各个区域,将其中内容依次写入硬盘。

当满负荷运行时,系统启动101个进程,其中包含100个Recv进程和1个Write进程,所有进程访问同一块共享内存。该方案结合了方案a中各路视频流相互独立、不会互相影响,程序结构相对独立的优点,和方案b中硬盘访问串行化,防止硬盘并发访问,优化硬盘使用效率,提高写入速度的优点;缺点是由于Windows系统共享内存采用文件映射机制,访问共享内存效率低下,故而只能运行于Linux系统,且程序复杂度仍然大于方案a。

综上所述,通过对独立进程方式的性能考察,结合对系统跨软平台特性、可靠性、稳定性、可维护性的要求,决定暂定方案a。

3 索引的建立与维护

对于流媒体信息而言,存储的目的是为了回看,存储时编制索引的目的是为了在回看时能够快速精准地实现定位[4]。对录像进行检索的过程分为4步:1)确定摄像机;2)确定时间范围;3)返回录像时间轴;4)跳转到指定位置播放。

本文设计采用3级索引,如表2所示。第1级索引保存在配置库中,通过配置记录哪一路视频流存储在哪一台存储主机上;第2级索引保存在各台存储主机上的持久化文件数据库中,为了减少文件的大小,每一路视频的索引独自保存为一个单独的文件,以视频名称作为文件名,记录该路视频在不同文件中的起止时间;第3级索引保存在每个视频数据文件的末尾,记录每一个关键帧所对应的绝对时间和在文件中的偏移量。

表2 索引结构设计示意

级别存放介质结构信息1配置库视频名称,存储主机名2文件数据库视频名称(文件名),文件编号,起始时间,终止时间3文件末尾绝对时间,偏移量

系统先按照1 Gbyte为单位为每个视频文件划分大小。按照极端情况,分别考虑码率为10 Mbit/s和100 kbit/s,则 1 Gbyte 可保存最短13.6 min,最长可保存22.75 h。通过上述计算可知,1 Gbyte最长存储时间应不超过1天。

3级索引的维护:同一个数据文件中只保存同一路视频。每秒钟内,每接收到1个关键帧添加一条3级索引。系统的检索信息中每秒钟不超过1个关键帧,按每天一个文件计算,每个文件最多83 600条索引。第3级别索引每条占用空间 12 byte (时间占8 byte,偏移量占4 byte),每个文件最多不大于0.98 Mbyte,故每个文件尾部预留2 Mbyte空间用于存放3级索引已经足够了。由此也可以推算出该系统最低支持 50 kbit/s 的极低码率。

数据文件中的数据和索引如图2所示,其中SPS,PPS,I,P,B表示标准H264编码的视频流中的各种帧数据,DataEPos和IndexEPos表示数据和索引的实际长度,Blank表示在文件中留空白或任意内容。

图2 数据文件内容示意图

其中,CameraName占32 byte,DataEPos、IndexEPos分别占4 byte。Data EPos指向最后一帧数据末尾的地址,其等于数据长度;Index Epos指向最后一帧索引末尾的地址,该数值-(文件实际长度-2M预留长度)-12 byte=索引长度。每一个索引由12 byte组成,前8 byte为time_t类型,后4 byte为int类型指向关键帧的首地址,即SPS/PPS前帧分隔符的起始位置。

2级索引的维护:当开始录制一路视频的时候,以视频名称为文件名生成文件数据库索引文件。视频数据文件写满发生切换或进程退出时(连续60秒未收到关键帧进程即退出),添加一条2级索引。在极端情况下每1 min视频断1次,即每路视频每1 min产生1条长度为20 byte的记录,每天不超过1 440条记录,共计28.125 kbyte,即每月最多843.75 kbyte,每年最多300.75 Mbyte。设计容量300路同时写入,保存1年的索引需要88 Gbyte索引文件,与数据文件对存储空间的需求相比,可以忽略不计。

1级索引的维护:首先通过配置确定1台摄像机的所有录像文件只保存在同1台主存储网络设备上(同一个IP),该信息作为一级索引保存在数据库中。

4 存储空间预分配与文件调度

由于机械硬盘在反复创建文件的过程中会产生磁盘碎片,越来越多的碎片会严重影响磁盘读写效率并加剧磁头平均旋转距离影响磁盘使用寿命[5]。为解决这个问题,一种可行的方法就是预先在硬盘上划分好等大小的文件,流数据直接写入到已分配好的这些文件中,当录像文件过期后也不删除文件,而是通过标志位将其标记为可回收重复使用的文件。

存储空间预分配程序首先在根磁盘上创建index目录和data目录。然后根据磁盘容量减去88 Gbyte计算出数据文件可用容量,根据可用容量创建文件vss000000.h264~vss999900.h264,其中数字连续递增不重复(不同目录下都从000000开始),理论上1台存储设备的文件数量最大为 100 000, 即约为100 Tbyte。index目录中的88 Gbyte空间为2级索引SQLite文件预留。剩余12 Gbyte存放其他文件,例如不同的挂载点通过“挂载点-路径映射表”预分配及文件调度进程,其中包含1组由3位整数和字符串路径组成的映射对。2级索引中的文件编号为10位整数,其中第1位是保留位, 2~4位为路径编号,后5~10位指向vss012345.h264中的数字。

集中存储系统管理的存储空间大小可以达到100 Tbyte,甚至1 Pbyte级别,按每个文件1 Gbyte计算最多可以有接近1 000 000个文件。所以系统中运行一个单独的进程管理这些文件,提供文件调度功能,称之为文件池。

在文件池中维护一块共享内存Shm-A,用以表明某一路视频当前正在写入某个文件,其内容为一个大小等于最大支持视频并发数量的线性数组,数组的内容为1对“字符串 - 数值”,表示某1路视频名称和其对应的正在写入的文件编号;同时记录最近使用的文件编号。调度进程轮询文件数据库。找到删除2级索引中终止时间早于过期时间的记录。

文件池管理系统需要提供1个接口用于输出文件,该接口功能为:启动某1路视频录制时,先在Shm-A中查找该路视频是否存在未写完的文件,如果存在,直接返回文件编号;否则查找最近使用的文件编号+1的文件,查看其最近修改时间,如果已过期则返回该文件编号;否则判断其是否为新创建文件,是则返回该文件编号;否则查看下一个文件重复上述操作(如果已轮询完所有文件则返回距今最久远的文件编号,并提示磁盘空间不足)。上述4种情况下返回文件编号后,在Shm-A中对应的位置上进行标记,并更新最近使用的文件编号。

录制进程调用文件池接口获取空闲文件向其中写入流数据,当写操作结束时,如果是文件已写满,则在Shm-A中对应位置置为-1;如果视频存储进程退出(因视频中断等原因),则在Shm-A中对应位置仍保留原文件编号以备下次使用(即不作任何处理)。

5 系统运行效果分析

存储系统管理机通过配置库中关于每一路视频由哪一台存储主机保存的信息,调用该台存储主机上的录制进程[6]。录制进程调用文件池接口获得当前适用的存储文件开始写入视频流,写入的同时检测关键帧建立3级索引,由于3级索引精确到秒,将3级索引放置在数据文件尾部,可以提高创建索引效率,减少磁盘IO操作。当一个文件写满或因为异常中断时,录制进程在自身退出前纪录2级索引。当需要回放时,回放服务程序根据全局唯一的1级索引找到存储主机,根据索引主机上的有视频名称指定的2级索引找到文件编号, 根据文件编号从文件路径映射表中定位到数据文件,打开文件后根据3级索引定位到具体的一个关键帧开始回放。

本系统已经应用在多套变电站辅助控制系统和报警安防系统中,经过工程项目的实际运行检验,达到了满意的效果,也印证了本文所述流媒体存储系统的下列设计思想:1)通过内存缓冲与I/O互斥机制满足了大量高清视频数据并发写入磁盘的需求;2)通过文件预分配技术避免了磁盘碎片化,保障了机械硬盘在更长时间内的高效运转,延长了机械硬盘的使用寿命;3)通过多级索引的合理设计提供了秒级的快速精确定位,同时兼顾了存储硬盘的得盘率(用于存储视频数据的空间占硬盘总空间的比率)。

[1] 蔡明,任绮年,易剑光. 视频监控系统中的视频存储系统的设计与实现[J].江南大学学报, 2003(6):115-118.

[2] 屠添翼,石跃祥. 视频监控系统中的图像采集和视频有效存储[J].计算机应用研究, 2005(8):241-242.

[3] 徐景皓. P2P分布式数据容错存储机制[J]. 广播与电视技术,2006(6):72-75.

[4] 王宁.硬盘播控系统与二级存储系统设计[J]. 广播与电视技术,2007(7): 82-84.

[5] 何炬,袁宇.基于SAN的视频监控存储文件系统设计[J]. 电视技术,2011,35(13):98-101.

[6] 王文彬,王文革,王松.海量存储技术在变电站视频监控中的应用[J]. 电视技术,2011, 35(17):97-100.

杨文娟(1986— ),女,硕士,讲师,本文通信作者,主要从事信息与传媒技术教学与研究工作;

汤 铭(1973— ),硕士,高级工程师,主要从事网络安全及安防技术教学与研究工作;

周 灵(1984— ),女,博士生,讲师,主要从事数字媒体技术教学与研究工作;

段洪秀(1981— ),女,硕士,讲师,主要从事信息技术的教学与研究工作;

杨 艳(1975— ),女,硕士,讲师,主要从事计算机应用的教学与研究工作。

责任编辑:闫雯雯

Design and Implementation of Centralized Streaming Storage System

YANG Wenjuan, TANG Ming,ZHOU Ling,DUAN Hongxiu,YANG Yan

(MediaInstituteofTechnology,CommunicationUniversityofChina,Nanjing211172,China)

Some key indicators, such as network throughput and disk I/O performance, are measured for analyzing the needs of centralized streaming storage system. On this base, a kind of centralized streaming storage system is designed and implemented. Combined with problems encountered during the implementation, the following key points are discussed with emphasis: process management, indexes building, files allocation and scheduling, storage media protection.

video; parallel; efficiency; indexing

TN957.52

A

10.16280/j.videoe.2015.19.019

2015-03-04

【本文献信息】杨文娟,汤铭,周灵,等.一种流媒体集中存储系统设计与实现[J].电视技术,2015,39(19).

猜你喜欢
视频流存储系统硬盘
边缘实时视频流分析系统配置动态调整算法研究
基于视频流传输中的拥塞控制研究
分布式存储系统在企业档案管理中的应用
HiFi级4K硬盘播放机 亿格瑞A15
Egreat(亿格瑞)A10二代 4K硬盘播放机
天河超算存储系统在美创佳绩
铁路货场智能大门集装箱全景图像采集方法研究
美国视频流市场首现饱和征兆
我区电视台对硬盘播出系统的应用
华为震撼发布新一代OceanStor 18000 V3系列高端存储系统