摘 要: 為了解決視頻監(jiān)控系統(tǒng)中多樣性、異構(gòu)性的設(shè)備集成難問題,采用Web服務(wù)與流媒體技術(shù)設(shè)計(jì)了一種嵌入式視頻服務(wù)器。給出視頻服務(wù)器的硬件結(jié)構(gòu);基于嵌入式Linux操作系統(tǒng),詳細(xì)闡述了視頻服務(wù)器軟件的設(shè)計(jì)與實(shí)現(xiàn)過程;視頻服務(wù)器適用于具有跨語言、跨平臺(tái)特性的視頻監(jiān)控系統(tǒng)的設(shè)備集成。應(yīng)用于油井監(jiān)控局域網(wǎng)中時(shí),在單個(gè)遠(yuǎn)程終端鏈接情況下,視頻服務(wù)器速率達(dá)25 f/s,可滿足一般的監(jiān)控要求。關(guān)鍵詞:Web Services; 嵌入式系統(tǒng); Linux; 流媒體
中圖分類號(hào):TN919.85-34文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1004-373X(2010)22-0060-04
Embedded Video Server Based on Web Service
SUN Shi-ming1, WANG Ai-guo1, XIE Xing-zhou2
(1. College of Computer and Communication Engineering, China University of Petroleum, Dongying 257061, China;
2. Gudao Oil Plant, Sinopec Shengli Oilfield Company, Dongying 257321, China)
Abstract: An embedded video monitoring server is designed with the technologies of Web services and streaming media to solve the problems of integration of diversity and heterogeneity equipments in video monitoring system. The hardware structure of the video server is elaborated. The software design and implementation of the video server based on Linux2.6.24 is illustrated in detail. The video server is appropriate to the equipment integration of the video monitoring system with the features of cross-language and cross-platform and can be applied to monitoring system easily. The velocity of video server can reach up to 25 f/s and can meet the requirement of general monitoring when the single remote terminal is linked in LAN of well monitoring system.
Keywords: Web service; embedded system; Linux; streaming media
收稿日期:2010-06-30
目前,視頻監(jiān)控在煤炭安全生產(chǎn)[1]、樓宇安防[2]、森林火災(zāi)監(jiān)控[3]等領(lǐng)域逐步得到應(yīng)用,出現(xiàn)了各式各樣的嵌入式視頻服務(wù)器;同時(shí),視頻監(jiān)控系統(tǒng)也向著一體化、視頻數(shù)字化、監(jiān)控網(wǎng)絡(luò)化、系統(tǒng)集成化方向發(fā)展[4],各種視頻服務(wù)器的集成和統(tǒng)一管理變得越來越困難。本文設(shè)計(jì)了一種基于Web Services的嵌入式流媒體視頻服務(wù)器,借助Web Services跨平臺(tái)、跨語言的分布式模型[5],通過RTP/RTCP協(xié)議實(shí)時(shí)傳輸視頻流,實(shí)現(xiàn)了視頻監(jiān)控設(shè)備的無縫連接與統(tǒng)一管理。
1 視頻服務(wù)器的硬件結(jié)構(gòu)
視頻服務(wù)器硬件分為核心板和底板兩部分。核心板使用ARM S3C2440處理器,擴(kuò)展64 MB SDRAM和64 MB FLASH外部存儲(chǔ)器,集成時(shí)鐘電路和JTAG接口電路;底板提供視頻采集接口,包括視頻采集芯片與MPEG壓縮芯片,4線RS 232串口,由以太網(wǎng)控制器和RJ45接口組成的以太網(wǎng)接口[6]。硬件結(jié)構(gòu)如圖1所示。
系統(tǒng)通過以太網(wǎng)接口獲取遠(yuǎn)程終端的控制數(shù)據(jù),利用串口對(duì)設(shè)備進(jìn)行操控;通過視頻采集電路獲取壓縮后的視頻數(shù)據(jù),使用RTP協(xié)議將數(shù)據(jù)打包后通過以太網(wǎng)接口發(fā)送到遠(yuǎn)程終端,完成視頻的實(shí)時(shí)傳輸。
圖1 視頻服務(wù)器的硬件結(jié)構(gòu)圖
2 視頻服務(wù)器的軟件設(shè)計(jì)與實(shí)現(xiàn)
2.1 軟件總體結(jié)構(gòu)
視頻服務(wù)器的軟件基于Linux操作系統(tǒng),分為兩個(gè)模塊:Web Services模塊和視頻采集與傳輸模塊。其中Web Services模塊主要負(fù)責(zé)對(duì)攝像頭及云臺(tái)的操控,將操控?cái)z像頭和云臺(tái)的功能接口以Web服務(wù)的形式發(fā)布給遠(yuǎn)程終端,從而屏蔽了攝像頭和云臺(tái)的異構(gòu)性,方便遠(yuǎn)程終端對(duì)設(shè)備進(jìn)行集成和統(tǒng)一管理。視頻采集與傳輸模塊主要負(fù)責(zé)將采集到的視頻數(shù)據(jù)通過RTP/RTCP協(xié)議打包,然后傳送給遠(yuǎn)程終端。視頻服務(wù)器結(jié)構(gòu)如圖2所示。
2.2 Web Services模塊
Web Services使用標(biāo)準(zhǔn)的、通用的通信模型,它在HTTP,XML,SOAP,WSDL,UDDI 之上提供統(tǒng)一的編程模型,使用統(tǒng)一的方法,公共的基礎(chǔ)結(jié)構(gòu)和統(tǒng)一文本格式,適合于Internet/Intranet分散型應(yīng)用。服務(wù)請(qǐng)求者與服務(wù)提供者之間通過SOAP(簡單對(duì)象訪問協(xié)議)消息進(jìn)行綁定和通信。SOAP協(xié)議定義了用于在系統(tǒng)之間進(jìn)行通訊的標(biāo)準(zhǔn)XML消息格式,可使用SOAP在多種計(jì)算機(jī)體系結(jié)構(gòu)、語言和操作系統(tǒng)之間進(jìn)行通信。Web Services模塊流程圖如圖3所示。
圖2 視頻服務(wù)器的結(jié)構(gòu)
圖3 Web Services模塊流程圖
選用gsoap作為Linux下Web Service的開發(fā)工具。gsoap是一款使用C/C++編寫的開源的Web Service開發(fā)工具,具有占用系統(tǒng)資源少、運(yùn)行速度快、可裁減等特點(diǎn)[7]。gsoap工具包中提供了兩個(gè)可執(zhí)行文件:wsdl2h 和soapcpp2。wsdl2h.exe用來解析wsdl文檔生成描述服務(wù)的C/C++頭文件,soapcpp2.exe用來解析該頭文件并生成框架代碼[8]。
利用gsoap工具包開發(fā)視頻服務(wù)器的Web Service,首先編寫一個(gè)頭文件service.h,聲明4個(gè)Web Service接口,該頭文件的主要內(nèi)容如下:
typedef int xsd__int;
struct ns2_CameraInf //攝像頭信息結(jié)構(gòu)體
{ xsd_int Cam_ID; //編號(hào)
xsd_int Cam_width; //分辨率:寬
xsd_int Cam_height; //分辨率:高
xsd_int Cam_hue; //色調(diào)
xsd_int Cam_contrast; //對(duì)比度
xsd_int Cam_brightness; //亮度
xsd_int Cam_focus;//焦距
}
struct ns2_PanTiltInf //云臺(tái)信息結(jié)構(gòu)體
{ xsd_int PanTilt_ID; //編號(hào)
xsd_int PanTilt_ Rotation; //旋轉(zhuǎn)角度
};
int ns2_ctrlCamera(xsd_int ictrlCam);
//攝像頭控制
int ns2_getCameraInf(void *_ ,
struct ns2_getCameraInfResponse
{ struct ns2_CameraInf camera_inf;
} *_return);//獲取攝像頭信息
int ns2_ctrlPanTilt(xsd_int ictrl);//云臺(tái)控制
int ns2_getPanTiltInf(void *_ ,
struct ns2_getPanTiltInfResponse
{ struct ns2_PanTiltInf pantilt_inf;
} *_return); //獲取云臺(tái)信息
根據(jù)service.h文件生成服務(wù)端框架代碼及service.wsdl文檔,命令如下:
# soapcpp2 service.h
生成的框架代碼如下:soapStub.h:從輸入頭文件生成且?guī)Q空間的頭文件;soapH.h:主要頭文件,所有客戶機(jī)和服務(wù)源代碼都要將其包括在內(nèi);soapC.c:指定數(shù)據(jù)結(jié)構(gòu)的序列化器和反序列化器;soapClient.c:客戶機(jī)存根例程;soapServer.c:服務(wù)器端存根例程。
另外,在gsoap工具包中還包含兩個(gè)重要的文件:stdsoap2.h和stdsoap2.c/cpp。其中stdsoap2.h是stdsoap2.c/cpp運(yùn)行時(shí)庫頭文件,stdsoap2.c/cpp是運(yùn)行時(shí)C/C++庫,帶 HTTP/ SOAP解析器和運(yùn)行時(shí)支持例程。用戶可以用這兩個(gè)文件和上述的框架代碼方便的進(jìn)行客戶端/服務(wù)器端開發(fā)。程序代碼在此不再贅述。
2.3 視頻采集與傳輸模塊
視頻采集與傳輸模塊將采集到的視頻通過RTP協(xié)議打包發(fā)送到遠(yuǎn)程終端。過程如圖4所示。
2.3.1 Jrtplib和Jthread的移植
利用Jrtplib開發(fā)程序之前,需要先將Jrtplib庫移植到視頻服務(wù)器的硬件體系結(jié)構(gòu)上,方法如下:
(1) 下載Jrtplib和Jthread
下載地址:http://research.edm.uhasselt.be/~jori /page/index.php?n=CS.Jrtplib
(2) 解壓
將下載的兩個(gè)壓縮文件解壓到/usr/local /software目錄中:
#tar -jxvf jrtplib-3.7.1.tar.bz2
#tar -zxvf jthread-1.2.1.tar.gz
解壓后在/usr/local/software下生成jrtplib- 3.7.1和jthread-1.2.1兩個(gè)目錄。
圖4 視頻采集與傳輸模塊軟件流程
(3) 編譯Jthread
進(jìn)入Jthread源碼目錄:
#cd /usr/local/software/ jthread-1.2.1
在終端中輸入:
#./configure -host=arm-linux CC=arm-linux- gcc
CXX=arm-linux-g++
執(zhí)行后,會(huì)生成一個(gè)Makefile文件,執(zhí)行:
#make
#make install
至此Jthread安裝成功。
(4) 編譯Jrtplib
進(jìn)入Jrtplib源碼目錄:
#cd /usr/local/software/ Jrtplib-3.7.1
在終端中輸入:
#./configure -host=arm-linux CC=arm-linux- gcc CXX=arm-linux-g++
執(zhí)行后,會(huì)生成一個(gè)Makefile文件,執(zhí)行:
#make
#make install
至此Jrtplib安裝成功。
Jrtplib和Jthread安裝完成后,可以看到/usr/local/lib目錄增加了Jthread和Jrtplib的庫文件。
2.3.2 RTP實(shí)時(shí)傳輸流媒體數(shù)據(jù)實(shí)現(xiàn)
利用RTP協(xié)議能夠在單播或者多播的網(wǎng)絡(luò)環(huán)境中實(shí)現(xiàn)傳流媒體數(shù)據(jù)的實(shí)時(shí)傳輸,它的報(bào)文中包含傳輸媒體的類型、格式、序列號(hào)、時(shí)間戳以及是否有附加數(shù)據(jù)等信息[9-10]。多媒體數(shù)據(jù)的傳輸使用 UDP 來進(jìn)行,每一個(gè)RTP數(shù)據(jù)報(bào)都由頭部(Header)和負(fù)載(Payload)兩個(gè)部分組成,其中頭部前 12 個(gè)字節(jié)的含義是固定的,而負(fù)載則可以是音頻或者視頻數(shù)據(jù)。具體實(shí)現(xiàn)過程如下:
(1) 初始化RTP會(huì)話
RTPSession Rtpses;//創(chuàng)建RTPSession對(duì)象來代表此次RTP會(huì)話:
Rtpses.Create(2000);//調(diào)用RTPSession類的Create()方法,指定RTP會(huì)話的端口號(hào)
(2) 設(shè)置時(shí)間戳
Rtpses.SetTimestampUnit(1.0/8000.0);
//設(shè)置時(shí)間戳(單位:s),使程序的采樣頻率為8 000 Hz
(3) 設(shè)置目標(biāo)地址
unsigned long addr = ntohl(inet_addr(\"192. 168.0.2\" ));
//將網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)換為長整型
Rtpses.AddDestination(addr,2000);
//添加目標(biāo)地址,端口號(hào)為2000
(4) 發(fā)送流媒體數(shù)據(jù)
Rtpses.SetDefaultPayloadType(0);
//設(shè)置默認(rèn)的負(fù)載類型
Rtpses.SetDefaultMark(1);//設(shè)置標(biāo)志
Rtpses.SetDefaultTimeStampIncrement(10); //設(shè)置時(shí)間戳增量
Rtpses.SendPacket(buf, n);//發(fā)送數(shù)據(jù),buf為數(shù)據(jù)緩沖區(qū),n為緩沖區(qū)大小
(5) 客戶端接收數(shù)據(jù)
if (Rtpses.GotoFirstSourceWithData())
{//獲取接受到的各個(gè)源的數(shù)據(jù)
do
{Rtpses.AddToAcceptList(remoteIP, allports, portbase);
Rtpses.SetReceiveMode(RECEIVEMODE_ACCEPTSOME);//設(shè)置接收模式
RTPPacket *pack;
pack = Rtpses.GetNextPacket();
//處理接收到的數(shù)據(jù)
delete pack; }
while (Rtpses.GotoNextSourceWithData());
}
3 測(cè)試運(yùn)行
系統(tǒng)測(cè)試采用C/S結(jié)構(gòu)。視頻服務(wù)器配置為S3C2440微處理器,運(yùn)行在400 MHz,擴(kuò)展64 MB NAND FLASH和64 MB SDRAM,以太網(wǎng)接口芯片為RTL8201BL,視頻壓縮芯片為MB86390,顯示器為8寸16 bit TFT LCD,Linux 2.6.24內(nèi)核,接入實(shí)驗(yàn)室局域網(wǎng)。視頻服務(wù)調(diào)用端為聯(lián)想的啟天M6900 PC機(jī),RedHat 9.0操作系統(tǒng),開發(fā)環(huán)境GCC 4.3.0,QT 4.4.0和gsoap-2.7f工具包,通過gsoap調(diào)用Web服務(wù)。PC機(jī)上的運(yùn)行界面如圖5所示。
圖中視頻圖像即為得到視頻服務(wù)器圖像。局域網(wǎng)中單個(gè)遠(yuǎn)程鏈接時(shí)測(cè)試平均視頻傳輸速度達(dá)25 f/s,可滿足一般的監(jiān)控要求。在2個(gè)遠(yuǎn)程鏈接時(shí)測(cè)試平均視頻傳輸速度為16.7 f/s,3個(gè)遠(yuǎn)程鏈接時(shí)平均視頻傳輸速度為10.1 f/s。多個(gè)遠(yuǎn)程鏈接的情況下性能會(huì)有較為明顯的下降。因此多個(gè)鏈接情況下使用時(shí)建議采用S3C6410等具有更高性能的硬件平臺(tái)實(shí)現(xiàn)。
圖5 監(jiān)控中心運(yùn)行界面
4 結(jié) 語
本文提出一種基于Web Services、使用RTP/RTCP協(xié)議實(shí)時(shí)傳輸視頻流數(shù)據(jù)的嵌入式視頻服務(wù)器,借助Web Services跨平臺(tái)、跨語言的分布式模型,有效地屏蔽了視頻監(jiān)控設(shè)備的多樣性、異構(gòu)性,實(shí)現(xiàn)監(jiān)控設(shè)備的無縫連接與統(tǒng)一管理。視頻服務(wù)器已集成在油井監(jiān)控系統(tǒng)中,集成和擴(kuò)展簡便,實(shí)施效率得到大大提高。
參考文獻(xiàn)
[1]張文,方飛.視頻監(jiān)控在煤礦中的應(yīng)用研究[J].煤炭工程,2010(1):112-114.
[2]呂優(yōu),張九根.安防視頻監(jiān)控系統(tǒng)設(shè)計(jì)研究[J].低壓電器, 2009(14):36-39.
[3]徐凡,袁杰.基于視頻的嵌入式森林火災(zāi)預(yù)警系統(tǒng)[J].計(jì)算機(jī)應(yīng)用,2008,28(1):264-266.
[4]張多英,申晨,劉偉平,等.嵌入式視頻監(jiān)控傳輸系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2010,31(4):724-728.
[5]徐曉菊.基于B/S結(jié)構(gòu)的嵌入式網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的研究與應(yīng)用[J].工礦自動(dòng)化, 2010,36(1):83-84.
[6]房芳,馬旭東.基于嵌入式Web技術(shù)的監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2009,35(23):237-239.
[7]夏亮,祖一康,吳志榮.基于嵌入式Web Services的系統(tǒng)集成方案[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2008(3):7-9.
[8]Anon. GSOAP 2.7.15 user guide[EB/OL].[2007-12-15].http:// www. cs. fsu.edu/~engelen/soapdoc2. pdf.
[9]湯霄峰,鄭善賢.基于μClinux的遠(yuǎn)程監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與科學(xué),2009,31(10):140-143.
[10]錢華明,劉英明,張振旅.基于S3C2410 嵌入式無線視頻監(jiān)控系統(tǒng)的設(shè)計(jì)[J].計(jì)算機(jī)測(cè)量與控制,2009,17(6):1132-1134.