APP下载

视音频硬盘采集压缩系统设计、应用及分析

2011-06-06周伟锋熊金凯杜歆文

电视技术 2011年20期
关键词:视音频窗体采集卡

周伟锋,熊金凯,李 榕,杜歆文

(苏州广播电视总台技术中心,江苏 苏州 215006)

0 引言

视音频采集的方式有很多,从传统的磁带采集,到现在的蓝光录制、P2卡采集,还有硬盘录像机的应用。基于硬盘的采集由于其低廉的成本、方便的文件传输方式有着不可替代的作用。但是,采集文件庞大的体积、文件格式的兼容性、较长的转码时间使人们对其望而却步,制约了其发展。苏州广播电视总台通过Decklink系列视频采集卡以及MainConcept编解码包的研究,基于DirectShow架构,开发了视音频硬盘采集并实时压缩系统,克服了硬盘录制的种种缺点。

1 硬件结构

对于采集PC的配置无过高要求,可以使用SATA硬盘或者更高速度的SAS盘,SATA硬盘的传输速度能够达到60 Mbyte/s,相对于50 Mbit/s的视频读写速度,带宽完全够用,因此在此方面不需特别考虑。PC至少有一个PCIe扩展槽,用来插Decklink采集卡作为信号输入和采集使用。Decklink采集卡为全数字接口,因此只能输入数字SDI信号。

2 软件结构

MainConcept公司是全球著名的视音频编码器解决方案,其视音频编解码器具有良好的兼容性和强劲的性能,更关键的是其支持视音频的实时编解码,本文主要采用了MainConcept编解码器MPEG Video Encoder,Layer II Audio Encoder,MainConcept Multiplexer,DV Pro Video Encoder等。

软件采用DirectShow架构,如图1所示,该架构分为虚线下方Ring 0特权级别的硬件设备,以及虚线上Ring 3特权级别的应用层,应用层中的矩形框内代表DirectShow系统。该系统中,Filter作为一个个功能模块参与数据处理,同时Filter Graph管理整个数据流的处理过程,各个Filter在Filter Graph中按一定的顺序连接成一条流水线协同工作。按照功能来分,Filter大致分为3类:Source Filters,Transform Filters,Rendering Filters。Source Filters主要负责获取数据,数据源可以是文件,也可以是采集卡、数字摄影机等,然后将数据传输给Transform Filters;Transform Filters主要负责数据的格式转换,例如数据分离/合成、解码/编码等;Rendering Filters主要负责数据的最终去向,将数据送给显卡、声卡进行多媒体的演示,或者输出到文件进行存储。

图1 DirectShow基本架构

如图2和图3所示,视音频采集、压缩、存储的整个流程可以看做一个Filter Graph。Decklink视频卡安装完成后,会在系统中注册一个视频输入设备Decklink Video Capture和一个音频输入设备Decklink Audio Capture,两者为该Filter Graph的Source Filters,负责获得数据,然后向下传输,在Decklink Video Captur的Capture Pin后接一个Smart Tee,对采集进来的视频数据进行分流,一部分经过AVI Decompressor到达Video Render,对视频进行预览,另一部分输送到下一步进行编码。该系统分别实现了MPEG-2的编码和DVCPro的编码(分别对应图2和图3)。相应的,对于MPEG-2编码格式,音频部分同时要经过Layer II Audio Encoder,而对于DVCPro编码,音频部分不需要经过编码,直接输入Multiplexer对视音频进行同步混合,最后在File Write将文件写入硬盘,在文件保存Filter方面,DVCPro格式用的是系统自带的File Write,而MPEG-2格式用的是MainConcept MPEG Sink,理论上对于MPEG-2文件,其实两个都能用,但对于DV格式,只能用File Write。

图2 采集、压缩、存储流程(以DV25/50方式压缩)

图3 采集、压缩、存储流程(以MPEG-2方式压缩)

3 技术实现要点及难点

3.1 预览窗口

预览视频流到达Video Renderer后需要将它在一个窗口显示出来。DirectShow提供了Video Renderer过滤器来显示视频,该过滤器可用于所有的支持DirectX的平台,它对平台没有其他特殊的要求。也可以是GDI来显示视频。它是在Windows XP之前操作系统的默认视频显示过滤器;Video Mixing Renderer Filter 7(VMR-7)可用于Windows XP操作系统,并且是该系统下的默认视频显示过滤器,与老的视频显示过滤器相比,它具有一些更强大的性能,包括采用插件模式来控制DirectShow显示;Video Mixing Renderer Filter 9(VMR-9)是一个更新的视频混合显示过滤器,它采用了Direct3D来显示,可用于所有的支持DirectX的平台,它不是默认的显示过滤器,因为与其他的显示过滤器相比,对系统要求更高。一般来说,在视频显示应用上,VMR-9是首选,因为它使用了最新的图像API,并且提供了最好的性能。DirectShow视频显示可以选择在窗体模式或者非窗体模式下进行。在窗体模式下,视频将创建一个自己的窗体来显示。在非窗体模式下,视频可以在程序的一个窗口上显示,而不让视频自己创建窗体来显示。Video Renderer过滤器只支持窗体模式,VMR-7和VMR-9支持这两种模式,默认状态是窗体模式。在开始播放前,在过滤器图表管理器中去查找IVideoWindow接口:

IVideoWindow*pVidWin=NULL;

pGraph->QueryInterface(IID_IVideoWindow,(void**)&g_pVid-Win);//调用IVideoWindow::put_Owner方法去处理你应用程序的窗体。该方法提供了一个OAHWND类型的变量,所以要把句柄转换为该类型

pVidWin- >put_Owner((OAHWND)hwnd);//调用 IVideoWindow::Put_WindowStyle来改变视频窗体的类型

pVidWin->put_WindowStyle(WS_CHILD|WS_CLIPSIBLINGS);//WS_CHILD标志设置视频窗体为一个子窗体,WS_CLIPSIBLINGS标志可以防止视频窗体在另一个子窗体的客户区内显示视频

RECT grc;

GetClientRect(hwnd,&grc);

pVidWin- > SetWindowPosition(0,0,grc.right,grc.bottom);//调用IVideoWindow::SetWindowPosition方法可以视频窗口的相对于你应用程序的客户区的位置。该方法的参数带了一个RECT参数,用它去指定视频窗口的位置

videoWindow->put_Visible(OATRUE);

3.2 Filter属性设置

在大多数商业软件中,并不会将Filter的属性页直接显示给用户。因为属性页的界面过于简单(有时候还可能是很随意的),它们主要是用作Filter接口调试。在此程序中,由于涉及参数较多,并且面向使用者较为专业,因此大多说Filter的属性页直接暴露给用户,以进行详细、全方面的设置及调试。

本文使用OleCreatePropertyFrame函数,在程序中直接显示Filter属性页。在某些地方,也可编写属性窗口对Filter进行设置,如对DV Pro Video Encoder的设置中,由于Filter提供的属性页过于简陋,该处选择通过API自行设计编写设置对话框,更适合实际使用需求。

3.3 参数保存

当关闭窗口时,当前设置参数会自动保存到当前目录下的config.ini文件中,下次打开程序时自动调用,恢复关闭前状态,减少了选择输入设备、文件格式等操作,又不失灵活性。

3.4 视音频分离

在某些时候并不需要将视音频复合同步成一个文件,而是需要分别保存视音频文件,该程序提供视音频分离选择,在Filter Graph中,将最后的Multiplexer去掉,对视频流和音频流分别调用File Write以保存为两个文件。

另外需要注意的是,对于MPEG-2的压缩和DVCPro的压缩,Multiplexer的选择是不一样的,MPEG-2的视音频流要通过MainConcept Multiplexer进行复合,而DVCPro的视音频流使用系统自带的AVI Mux即可。

3.5 其他

在MPEG-2系统中,根据传输媒体的质量不同,MPEG-2中定义了两种复合信息流:传送流(Transport Stream,TS)和节目流(Program Stream,PS)。PS包与 TS包结构上的差异导致了它们对传输误码具有不同的抵抗能力,因而应用的环境也有所不同。TS码流具有较强的抵抗传输误码的能力,因此目前在传输媒体中进行传输的MPEG-2码流基本上都采用了TS码流。但是对节目制作环境,通常采用PS流。在本文中要注意的是,Multiplexer和File Write的流类型要一致。

如果用Decklink视频卡采集DV格式素材,还须用到Decklink PAL Field Swap这个Filter,对视频场序进行调整,否则采集的视频场序是错的。但是对于AJA和Bluefish444的视频卡,不需要对场序进行调整。

4 性能分析

测试用机采用Windows XP Professional操作系统,AMD Athlon 3800+的CPU,内存为2 Gbyte,可以说是完全低于主流配置。但是测试下来,不管是MPEG-2还是DVCPro的压缩格式,CPU使用率基本保持在40%左右,后者甚至略低一些(见图4和图5)。操作完全没有迟滞感。所以为达到便携性,一般笔记本式计算机完全可以达到要求,只是对于笔记本Decklink卡的安装稍显麻烦,因此建议对台式机进行改装,以满足便携性的要求。

图4 以MPEG-2方式压缩性能分析(截图)

图5 以DV25方式压缩性能分析(截图)

5 小结

本文采用DirectShow平台,利用C++进行程序开发设计,完成了一套视音频硬盘采集压缩系统。对该系统的硬件平台、软件环境进行了具体的描述,同时针对开发过程中遇到的重点和难点进行了分析和总结。最后,对该系统的性能进行了评测分析。该系统的架构简单,所需硬件、软件成本低,硬件只需一台普通PC和采集卡,软件方面需购买部分编解码包即可。可灵活应用于转播车、演播室等多种场合,可以取代Premiere等非编软件,避免只用采集功能而安装整个非编软件这种“杀鸡用牛刀”的情况,同时对视音频文件进行了实时压缩,节约存储空间和后期处理的时间。

猜你喜欢

视音频窗体采集卡
高精度AD采集卡性能测试及评价方法研究
我国首个超高清视音频国家重点实验室在沪启动建设
中央广播电视总台启动建设国家重点实验室
试谈Access 2007数据库在林业档案管理中的应用
面向数控机床的多通道传感数据采集卡设计
并行高速采样在地震物理模拟采集中的应用
PCI-e高速数据采集卡的驱动与上位机软件设计
基于内容结构特征的Flash电影视音频特征的提取研究
电视台视音频资料数字化存储
巧设WPS窗体控件让表格填写更规范