庄霞
摘要:近年来随着信息化的快速发展,视频采集技术得到广泛应用,在金融行业业务系统中,凭证影像和现场实时视频成为业务办理和审核的基础和关键,原有的业务模式逐步显露出多方面的不足,特别是风险防范问题与人力资源不足的矛盾日益突出。本文探讨了实时监控视频的采集和网络传输技术,介绍了基于DSPACK和Indy的快速实现方法。
关键词:实时视频 网络传输 DSPACK Indy
中图分类号:TN919.8 文献标识码:A 文章编号:1007-9416(2016)05-0000-00
1 引言
随着商业银行业务的飞速发展和管理模式的革新变化,为了更好的提高授权工作效率,提升风险防控能力,优化人力资源配置,解决网点转型过程中的一些突出问题,增强客户的精细化管理水平,必须加快业务转型,建立“技术先进、控制严密、因地制宜、稳健高效”的新型系统及管理模式的创新机制。在网点转型、渠道拓展、系统重构的研发和实际应用过程中,现场实时视频是业务办理及审核的一种重要监督方式和审核手段,本文主要探讨实时监控视频的采集和网络传输技术,并介绍基于DSPACK和Indy的快速实现方法。
2 技术分析
2.1 视频采集技术
2.1.1 DirectShow
DirectShow作为目前Windows平台上主流的媒体处理框架,提供了高质量的多媒体流采集和回放功能,大大简化了媒体回放、格式转换和采集工作。运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。
2.1.2 DSPACK
DSPACK是一组封装了MS Direct Show和DirectX技术的组件,用于多媒体应用系统的开发。它不仅功能强大而且完全免费。利用基于DirectShow的DSPACK开发包,不仅可以绕开COM组件编程,而且可以大幅提高开发效率,快速实现目标。
2.2 网络协议分析和选择
2.2.1 Socket
Socket接口是TCP/IP网络的API,常用的 Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的 Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。Socket实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有Socket接口的计算机通信。应用程序在网络上传输,接收的信息都通过这个Socket接口来实现。在应用开发中就像使用文件句柄一样,可以对Socket句柄进行读、写操作。
2.2.2 Indy组件特点分析
Internet Direct(Indy)是一组开放源代码的Internet组件,涵盖了几乎所有流行的Internet协议。使用Indy组件可以开发基于各种协议的TCP客户和服务器应用程序,并处理相关的编码和安全问题。
(1)Indy是阻塞式(Blocking)。通常的Winsock编程取数据或者向Socket写入数据都是异步,而Indy使用了阻塞式Socket调用方式。阻塞式访问更像是文件存取。当你读取数据,或是写入数据时,读取和写入函数将一直等到相应的操作完成后才返回。阻塞式Socket优点,例如编程简单、容易向Unix移植、很好地利用线程技术。(2)Indy使用了线程技术。阻塞式Socket通常都采用线程技术。从最底层开始,Indy的设计都是线程化的。因此用Indy创建服务器和客户程序跟在Unix下十分相似,并且Delphi的快速开发环境和Indy对WinSock的良好封装使得应用程序创建更加容易。(3)Indy服务器模型。一个典型的Unix服务器有一个或多个监听进程,它们不停地监听进入的客户连接请求。对于每一个需要服务的客户,都fork一个新进程来处理该客户的所有事务。Indy服务器工作原理同Unix服务器十分类似,只是Windows不像Unix那样支持fork,而是支持线程,因此Indy服务器为每一个客户连接分配一个线程。Indy服务器组件创建一个同应用程序主线程分离的监听线程来监听客户连接请求,对于接受的每一个客户,均创建一个新的线程来为该客户提供服务,所有与这一客户相关的事务都由该线程来处理。
3 主要实现过程
3.1 服务端的实现方法
首先是视频设备枚举和初始化,需要检测系统当前连接的设备,并把设备枚举出来供程序选择使用。其次是视频的预览,需要根据枚举到的设备列表,选择相应摄像头设备,进行初始化和预览.程序的菜单选择事件。最后是帧采集和帧发送,DSPACK的SampleGrabber对象负责图像帧的中转和处理,我们可以在SampleGrabber的Buffer事件中得到SampleGrabber当前正在处理的帧,并对当前帧进行处理。本文的处理主要是把当前帧通过UDPServer发送到客户端。处理逻辑如下如图1所示。
(1)检测帧回调标志状态,如果不在回调状态,则退出本次循环。(2)检测是否正在发送,如果正在发送,则退出本次循环。(3)检测连续未响应计数器,如果计数器低于阀值,则退出本次循环。(4)获取当前帧,然后转化和压缩,然后递增未响应计数器。(5)通过UDP发送,记录日志,循环结束。
3.2 客户端的实现
客户端主要负责视频的请求和展示,处理逻辑如下如图2所示:
(1)获取对方IP地址和端口参数,然后呼叫对方并发送视频请求命令。(2)UDPServer会检测到报文接收事件,然后判断报文内容是否为内置命令集,如果是操作命令集,则按命令处理并退出循环。如果不是,则需要尝试处理并显示接收帧。(3)检查处理错误,如果没有错误则发送确认命令给客户端。如果存在错误则尝试丢弃数据包并汇报检测报文接收事件状态,等待接收和解析下一包数据。
如果视频查看人员需要保存某帧图像数据,可以通过抓拍功能来实现。本文中抓拍图像保存后和远程授权系统主进程有一个进程间通讯,通过消息通知授权端进程已抓拍图片,授权程序可以到约定的路径下获取抓拍的图片并进行处理和存档。
4 结语
本文介绍了基于远程授权中网络实时视频采集和传输需要的技术,并给出了DSPACK和Indy的快速实现方法,相关成果已在金融授权、双录等系统中投入使用。
参考文献
[1] 李维.Inside VCL(深入核心——VCL架构剖析)[M].电子工业出版社,2004.
[2] 王忠.DELPHI 5 开发指南[M].电子工业出版社,2000.
[3] 陆其明.DirectShow开发指南[M].清华大学出版社,2003.