基于LabW indows/CVI的音视频实时采集压缩系统

2014-11-20 08:18张红林马永涛刘开华
电视技术 2014年5期
关键词:驱动程序音视频线程

张红林,马永涛,刘开华

(天津大学电子信息工程学院,天津300072)

随着信息技术在武器装备领域的广泛应用,武器装备正朝着综合化、高科技化的方向发展,这使得装备技术保障正面临着保障内容复杂、范围广、时效性强、要求高等难题。基于对装备保障知识的需求,远程支援技术在军事领域一直受到高度重视[1-2]。远程技术支援系统在组成要素上,主要包括前端数据采集及辅助维修系统、维修信息数据库及管理系统、维修信息网络支持系统、远程维修诊断决策系统[3]。装备现场的音视频实时采集处理系统作为前端数据采集系统的重要组成部分,使得远程维修与保障过程实现可视化,能有效提高远程支援的效率。

目前,音视频采集处理系统的软件和硬件大都是由厂商预先定义并封装的,这样就限制了它们应用时的灵活性与兼容性。LabWindows/CVI是美国国家仪器公司推出的面向测控领域的软件开发平台,它将通用的C语言平台与用于数据采集、分析和表达的测控专业工具有机结合起来,可以支持多种不同类型接口的设备,非常适用于远程支援中数据采集处理系统开发[4]。

1 系统总体架构

本系统分为硬件部分与基于LabWindows/CVI的软件部分,其总体架构如图1所示。硬件部分主要由自制的PCI视频采集板卡和CCD模拟摄像设备、USB 2.0接口的CMOS数字摄像头、传声器等音频设备组成。软件部分主要包括PCI,USB,MCI三种接口的驱动程序与音视频数据的采集、压缩和储存应用程序。基于LabWindows/CVI软件平台的应用程序通过接口驱动程序与对应硬件设备进行数据交互。

图1 系统总体结构框图

2 硬件电路设计

在LabWindows/CVI平台下可直接应用美国国家仪器(NI)公司的PCI采集板卡,但由于NI板卡价格昂贵并且只适用于工业开发,因此本系统采用自制的PCI视频采集卡。该视频采集卡由9位视频解码芯片SAA7115HL、PCI视频解码芯片CX25800、存储器芯片AT88SC0104CA等组成。CCD摄像头采集到的模拟视频信号首先进入SAA7115HL解码芯片进行9 bit A/D转换,然后进行数字梳状滤波、抗混叠滤波等信号处理[5],最后进入CX25800视频解码芯片进行像素转换并由内部DMA控制通过PCI接口进行传输。AT88SC0104CA芯片用于存储SAA7115HL与CX25800芯片的相关配置信息,以实现板卡上电初始化。

3 软件设计与实现

系统软件设计是本文工作的重心,包括接口驱动程序与音视频采集压缩应用程序设计实现。在进行音视频采集压缩应用程序开发时,首先需要在LabWindows/CVI软件平台下采用ANSIC语言分别实现音频与视频数据编码器;然后采用虚拟仪器多线程技术实现音视频数据的实时采集与压缩。本系统中采用开源的MPEG-4 AAC编码标准对音频数据进行压缩,采用MPEG-4标准的Xvid编码器对视频数据进行压缩。

3.1 设备驱动程序设计

在Windows平台下应用程序可直接通过计算机系统的应用程序接口(API)函数与USB设备进行通信。因此在LabWindows/CVI软件开发平台下,可通过应用其中的Windows SDK导入库,就可以将Windows API函数作为LabWindows/CVI的库函数使用,从而可实现与USB接口的视频设备进行交互[6]。本系统通过将SDK中的Vfw 32.lib静态链接库导入到LabWindows/CVI中,即可应用Windows VFW视频功能函数与USB接口视频设备进行交互。同理,通过将SDK中WinMM.lib库导入到应用程序工程中,系统即可应用Windows WaveX API音频功能函数与MCI接口的音频设备进行交互。测试结果表明,SDK中的音视频接口功能函数完全能满足本系统中对应设备的需求,并且交互效果良好。

为了实现与PCI接口的视频采集卡进行数据交互,首先采用WinDriver软件平台开发PCI设备驱动程序基本框架[7],然后在LabWindows/CVI软件平台下修改驱动程序并进行各类操作函数封装,生成动态链接库与对应的静态导入库,并将其添加到应用程序工程中,即可在应用程序中调用链接库中的函数与PCI采集卡进行通信。

3.2 音视频编码器的实现

大量数据的网络传输受网络带宽与误码率的限制,达不到远程支援系统对实时性和准确性的要求,因此,需要对采集到的数据进行编码压缩。MPEG-4标准具有高压缩比、可扩展性、可交互性等优点,逐渐成为现代视频编码领域的主流标准。相对于H.264标准,MPEG-4编码标准比较简单,软编码对CPU资源的占用率较低,并且能够很好地移植到LabWindows/CVI平台上。基于MPEG-4标准的实用编码器主要有ISO MPEG-4编码器,DivX和Xvid。其中,Xvid是目前世界上比较常用的视频编解码器(codec),被认为是当前比较快的MPEG-4编码器,并且源代码完全开放。Xvid编码器的基本软件实现过程如图2所示。

图2 Xvid编码器软件实现流程图

MPEG-4 AAC作为一种重要的主流感知音频编码器,以其高压缩比、多采样率、音质好等显著特点被广泛应用,适用于虚拟仪器开发平台。本系统对开源的MPEG-4 AAC源码FAAC进行了相关的修改(主要是汇编重写,C语言规范)与接口封装,将其移植到LabWindows/CVI平台中。MPEG-4 AAC编码器软件实现过程如图3所示,特别注意程序中获取到的音频数据帧为char类型,而编码器入口的数据类型为short类型,本系统中采用自定义的wav_read_short16函数进行数据匹配转换。

图3 MPEG-4 AAC编码器软件实现流程图

3.3 LabWindows/CVI的多线程技术

由于系统软件功能较多,为保证音视频数据采集的实时性,采用LabWindows/CVI平台的多线程技术来实现软件程序。这样就可以在不同的线程中分别运行数据采集与处理任务,避免了单一线程中因响应用户界面操作而导致其他任务阻塞,从而最大限度地提高CPU利用率以保证数据的实时性。LabWindows/CVI提供两种机制来实现多线程:线程池与异步定时器。由于异步定时器机制一般适用于在固定的时间间隔内执行的任务,本系统运用线程池机制来实现多线程操作。具体过程为:首先应用U-tility Library库中的CmtNewThreadPool函数创建线程池;然后在合理的时机应用CmtScheduleThreadPoolFunction函数创建并运行新线程;最后结束次线程函数,同时应用CmtReleaseThreadPoolFunctionID函数与CmtDiscardThread Pool函数释放线程与线程池资源。

应用多线程技术的关键是对程序结构与次线程任务进行合理有效的规划,既要防止某个线程任务过重而大量占用CPU,又要防止线程过多而导致全局控制混乱并需要经常进行线程切换。在使用多线程技术时特别注意线程之间的数据共享,避免某一时刻多个线程同时修改同一内存地址的数据,从而引起的数据混乱与线程死锁[8]。LabWindows/CVI提供3种数据保护机制:线程锁、线程安全变量和线程安全队列。其中线程安全队列是一种在线程间进行安全数组数据传递的先进先出队列,可应用于本系统中音视频数据采集线程与压缩线程之间的大量数据共享。

按照系统软件实现功能,把系统程序需要处理的任务分为对应接口的音视频数据采集、显示、压缩和储存,以及用户界面相关控制操作。其中,音视频数据采集任务与压缩任务都会耗费较多的系统资源。为保证数据采集的实时性,软件实现时将音视频数据采集与压缩任务分别分配在不同的次线程中,并以用户界面为主线程完成主控制操作。系统软件规划为6个线程,主线程与次线程的具体实现过程如图4所示,采集线程与压缩线程采用TSQ进行数据共享。在所有并发线程中,数据采集线程的优先级仅次于用户界面线程,而数据压缩线程优先级仅次于采集线程。

图4 音视频实时采集压缩应用程序流程图

4 系统测试与小结

为测试本系统在远程支援中的性能,在实验室网络环境下搭建测试平台,应用LabWindows/CVI 9.0平台中的TCP/IP协议函数库与DataSocket技术构建C/S网络模式[9],将系统软件中的数据储存任务转换为网络发送任务,进行音视频数据的网络传输测试。本测试系统采用LabWindows/CVI中的DataSocket通道进行音频数据的传输,采用UDP协议函数进行视频数据的传输,测试效果如图5所示,其中音频数据的采集码率最高可达96 kbit/s,视频采样最高可支持25 f/s(帧/秒)。可知本系统在网络传输测试中有着良好的效果,验证了系统的有效性与可行性;同时音频播放实时,视频显示流畅,表明系统音视频数据实时性好,数据压缩效率高,能完全适用于实验室网络带宽要求的传输,即可直接应用于远程支援系统。

本系统基于LabWindows/CVI软件平台,运用虚拟仪器多线程编程技术,有效保证了音视频数据采集的实时性;通过友好的接口驱动程序支持两种不同的视频输入,满足不同装备保障场合下的功能需求;运用MPEG-4标准的音视频编码器,有效去除数据的冗余性,使得本系统可直接应用远程支援维修信息网络进行数据传输。相比于传统的音视频采集处理系统,该系统数据采集方式灵活、实时性好、压缩算法实现简单、稳定性好。

图5 系统运行主界面(截图)

同时,基于LabWindows/CVI平台的友好特性,可以根据用户的定制要求,方便快捷地升级系统软件,支持智能音频识别与智能视频监控追踪,方便应用于家居、商场等场景的远程监控,还可以通过虚拟仪器技术应用于工业制造现场的智能监控与管理。

[1]姚文增,吴超,安磊.飞机维修保障远程技术支援系统建设方案初探[J].飞机设计,2012,32(4):74-80.

[2]王承孝,肖明清,苟新禹.面向服务的装备远程测试诊断[J].计算机工程,2007,33(15):230-231.

[3]李科,张军冬,胡金华.海军装备维修远程技术支持系统体系架构探讨[J].舰船电子工程,2011,31(8):132-135.

[4]刘君华.虚拟仪器编程语言LabWindows/CVI教程[M].北京:电子工业出版社,2001.

[5]王德胜,康令州.基于FPGA的实时图像采集与预处理[J].电视技术,2011,35(3):32-35.

[6]王建新.LabWindows/CVI虚拟仪器测试技术及工程应用[M].北京:化学工业出版社,2011.

[7]冯莉,叶超.利用WinDriver开发PCI设备驱动程序[J].自动化技术与应用,2007,26(11):119-120.

[8] LIN Xizhou,CHENG En,YUAN Fei.A data acquisition system for underwater acoustic communication system[C]//Proc.the Second International Conference on Computer and Communication Technologies in Agriculture Engineering(CCTAE 2010).[S.l.]:IEEE Press,2010:181-184.

[9]毛留俊,郭建新,张秋林,等.基于ARM11的IP网络视频监控系统设计与实现[J].电视技术,2012,36(17):166-168.

猜你喜欢
驱动程序音视频线程
基于C#线程实验探究
Microchip推出首款车载以太网音视频桥接(AVB)全集成解决方案
基于国产化环境的线程池模型研究与实现
3KB深圳市一禾音视频科技有限公司
计算机硬件设备驱动程序分析
WIFI音视频信号传输的关键问题探究
高速公路整合移动音视频系统应用
浅谈linux多线程协作
基于MPC8280的CPU单元与内部总线驱动程序设计
妙用鼠标驱动