莊霞
摘要:近年來隨著信息化的快速發(fā)展,視頻采集技術得到廣泛應用,在金融行業(yè)業(yè)務系統(tǒng)中,憑證影像和現(xiàn)場實時視頻成為業(yè)務辦理和審核的基礎和關鍵,原有的業(yè)務模式逐步顯露出多方面的不足,特別是風險防范問題與人力資源不足的矛盾日益突出。本文探討了實時監(jiān)控視頻的采集和網(wǎng)絡傳輸技術,介紹了基于DSPACK和Indy的快速實現(xiàn)方法。
關鍵詞:實時視頻 網(wǎng)絡傳輸 DSPACK Indy
中圖分類號:TN919.8 文獻標識碼:A 文章編號:1007-9416(2016)05-0000-00
1 引言
隨著商業(yè)銀行業(yè)務的飛速發(fā)展和管理模式的革新變化,為了更好的提高授權工作效率,提升風險防控能力,優(yōu)化人力資源配置,解決網(wǎng)點轉型過程中的一些突出問題,增強客戶的精細化管理水平,必須加快業(yè)務轉型,建立“技術先進、控制嚴密、因地制宜、穩(wěn)健高效”的新型系統(tǒng)及管理模式的創(chuàng)新機制。在網(wǎng)點轉型、渠道拓展、系統(tǒng)重構的研發(fā)和實際應用過程中,現(xiàn)場實時視頻是業(yè)務辦理及審核的一種重要監(jiān)督方式和審核手段,本文主要探討實時監(jiān)控視頻的采集和網(wǎng)絡傳輸技術,并介紹基于DSPACK和Indy的快速實現(xiàn)方法。
2 技術分析
2.1 視頻采集技術
2.1.1 DirectShow
DirectShow作為目前Windows平臺上主流的媒體處理框架,提供了高質量的多媒體流采集和回放功能,大大簡化了媒體回放、格式轉換和采集工作。運用DirectShow,我們可以很方便地從支持WDM驅動模型的采集卡上捕獲數(shù)據(jù),并且進行相應的后期處理乃至存儲到文件中。
2.1.2 DSPACK
DSPACK是一組封裝了MS Direct Show和DirectX技術的組件,用于多媒體應用系統(tǒng)的開發(fā)。它不僅功能強大而且完全免費。利用基于DirectShow的DSPACK開發(fā)包,不僅可以繞開COM組件編程,而且可以大幅提高開發(fā)效率,快速實現(xiàn)目標。
2.2 網(wǎng)絡協(xié)議分析和選擇
2.2.1 Socket
Socket接口是TCP/IP網(wǎng)絡的API,常用的 Socket類型有兩種:流式Socket(SOCK_STREAM)和數(shù)據(jù)報式Socket(SOCK_DGRAM)。流式是一種面向連接的 Socket,針對于面向連接的TCP服務應用;數(shù)據(jù)報式Socket是一種無連接的Socket,對應于無連接的UDP服務應用。Socket實際在計算機中提供了一個通信端口,可以通過這個端口與任何一個具有Socket接口的計算機通信。應用程序在網(wǎng)絡上傳輸,接收的信息都通過這個Socket接口來實現(xiàn)。在應用開發(fā)中就像使用文件句柄一樣,可以對Socket句柄進行讀、寫操作。
2.2.2 Indy組件特點分析
Internet Direct(Indy)是一組開放源代碼的Internet組件,涵蓋了幾乎所有流行的Internet協(xié)議。使用Indy組件可以開發(fā)基于各種協(xié)議的TCP客戶和服務器應用程序,并處理相關的編碼和安全問題。
(1)Indy是阻塞式(Blocking)。通常的Winsock編程取數(shù)據(jù)或者向Socket寫入數(shù)據(jù)都是異步,而Indy使用了阻塞式Socket調用方式。阻塞式訪問更像是文件存取。當你讀取數(shù)據(jù),或是寫入數(shù)據(jù)時,讀取和寫入函數(shù)將一直等到相應的操作完成后才返回。阻塞式Socket優(yōu)點,例如編程簡單、容易向Unix移植、很好地利用線程技術。(2)Indy使用了線程技術。阻塞式Socket通常都采用線程技術。從最底層開始,Indy的設計都是線程化的。因此用Indy創(chuàng)建服務器和客戶程序跟在Unix下十分相似,并且Delphi的快速開發(fā)環(huán)境和Indy對WinSock的良好封裝使得應用程序創(chuàng)建更加容易。(3)Indy服務器模型。一個典型的Unix服務器有一個或多個監(jiān)聽進程,它們不停地監(jiān)聽進入的客戶連接請求。對于每一個需要服務的客戶,都fork一個新進程來處理該客戶的所有事務。Indy服務器工作原理同Unix服務器十分類似,只是Windows不像Unix那樣支持fork,而是支持線程,因此Indy服務器為每一個客戶連接分配一個線程。Indy服務器組件創(chuàng)建一個同應用程序主線程分離的監(jiān)聽線程來監(jiān)聽客戶連接請求,對于接受的每一個客戶,均創(chuàng)建一個新的線程來為該客戶提供服務,所有與這一客戶相關的事務都由該線程來處理。
3 主要實現(xiàn)過程
3.1 服務端的實現(xiàn)方法
首先是視頻設備枚舉和初始化,需要檢測系統(tǒng)當前連接的設備,并把設備枚舉出來供程序選擇使用。其次是視頻的預覽,需要根據(jù)枚舉到的設備列表,選擇相應攝像頭設備,進行初始化和預覽.程序的菜單選擇事件。最后是幀采集和幀發(fā)送,DSPACK的SampleGrabber對象負責圖像幀的中轉和處理,我們可以在SampleGrabber的Buffer事件中得到SampleGrabber當前正在處理的幀,并對當前幀進行處理。本文的處理主要是把當前幀通過UDPServer發(fā)送到客戶端。處理邏輯如下如圖1所示。
(1)檢測幀回調標志狀態(tài),如果不在回調狀態(tài),則退出本次循環(huán)。(2)檢測是否正在發(fā)送,如果正在發(fā)送,則退出本次循環(huán)。(3)檢測連續(xù)未響應計數(shù)器,如果計數(shù)器低于閥值,則退出本次循環(huán)。(4)獲取當前幀,然后轉化和壓縮,然后遞增未響應計數(shù)器。(5)通過UDP發(fā)送,記錄日志,循環(huán)結束。
3.2 客戶端的實現(xiàn)
客戶端主要負責視頻的請求和展示,處理邏輯如下如圖2所示:
(1)獲取對方IP地址和端口參數(shù),然后呼叫對方并發(fā)送視頻請求命令。(2)UDPServer會檢測到報文接收事件,然后判斷報文內容是否為內置命令集,如果是操作命令集,則按命令處理并退出循環(huán)。如果不是,則需要嘗試處理并顯示接收幀。(3)檢查處理錯誤,如果沒有錯誤則發(fā)送確認命令給客戶端。如果存在錯誤則嘗試丟棄數(shù)據(jù)包并匯報檢測報文接收事件狀態(tài),等待接收和解析下一包數(shù)據(jù)。
如果視頻查看人員需要保存某幀圖像數(shù)據(jù),可以通過抓拍功能來實現(xiàn)。本文中抓拍圖像保存后和遠程授權系統(tǒng)主進程有一個進程間通訊,通過消息通知授權端進程已抓拍圖片,授權程序可以到約定的路徑下獲取抓拍的圖片并進行處理和存檔。
4 結語
本文介紹了基于遠程授權中網(wǎng)絡實時視頻采集和傳輸需要的技術,并給出了DSPACK和Indy的快速實現(xiàn)方法,相關成果已在金融授權、雙錄等系統(tǒng)中投入使用。
參考文獻
[1] 李維.Inside VCL(深入核心——VCL架構剖析)[M].電子工業(yè)出版社,2004.
[2] 王忠.DELPHI 5 開發(fā)指南[M].電子工業(yè)出版社,2000.
[3] 陸其明.DirectShow開發(fā)指南[M].清華大學出版社,2003.