嵌入式視頻監控

嵌入式視頻監控

目前,嵌入式系統在視頻監控中的應用越來越廣泛。伴隨着網絡的強大功能,視頻監控更側重網絡監控方案,要求體積小、遠程化、成本低、功耗小、操作界面人性化等。本系統基於嵌入式Linux 平臺上利用USB 攝像頭採集視頻圖像,通過視頻圖像壓縮及結合網絡進行視頻圖像傳輸,使遠程監控成爲可能。

1 系統介紹

由於項目需求,需要將imx開發版的攝像頭,作爲網絡攝像頭,供視頻監控設備遠程調用,並在平臺上實時展示。這種框架在視頻監控的安防領域已經很成熟和規範因此我們採取主流架構和技術,這樣可以容易和主流設備廠商對接,並且易於開發和擴展。開發版需要將攝像頭獲取的視頻流封裝成行業標準的視頻傳輸調用服務,向平臺提供。在開發版收到平臺的視頻接入指令後,可提供身份認證、權限管理、發現設備、開啓視頻流傳輸、停止視頻流傳輸、設置視頻參數等服務。

1.1 協議介紹

保證開發版視頻功能的通用性,需要選擇主流廠商都支持的網絡視頻標準。經過調研發現,關於網絡視頻的標準,國際上主要有ONVIF、PSIA等標準,國標主要是GB/T28181標準,還有其它地方的、企業的標準,各有差異,監控行業的標準豐富度可謂全面。

PSIA協議是由PSIA實體安防互通聯盟制定的一個可以使視頻管理系統與各種網絡媒體設備實現標準化通信的接口。爲的是讓實體安防系統的硬件和軟件平臺有一種標準化的接口,使基於IP網絡的不同安防系統具有兼容性。PSIA實體安防互通聯盟成立於2008年8月。

在PSIA協議不久之後,2008年11月,由安訊士聯合博世及索尼公司三方攜手共同成立的國際開放型網絡視頻產品標準網絡接口開發論壇,取名爲ONVIF(開放型網絡視頻接口論壇),在論壇上公佈了ONVIF第一版規範——ONVIF核心規範1.0。ONVIF標準致力於通過全球性的開放接口標準來推進網絡視頻在安防市場的應用,這一接口標準將確保不同廠商生產的網絡視頻產品具有互通性。

ONVIF標準發佈後得到了很多企業很商家的認可,加入到該組織中,目前松下、三星、思科、西門子、TI等著名品牌都在其中,國內海康威視、浙江大華也是ONVIF論壇的高級會員。從目前情況看來,早於ONVIF成立的PSIA,現在已基本銷聲匿跡,監控攝像機中,難覓其身影。可以說,PSIA已經脫離了安防監控標準化的中心地帶,日漸邊緣化,與ONVIF一爭高下的局面已不復存在。

國內標準GB/T28181是目前國內的安防監控標準中,唯一能與ONVIF抗爭的規範。於2012年6月1日,由公安部頒佈,全稱《安全防範視頻監控聯網系統信息傳輸、交換、控制技術要求》。但,GB/T28181作爲國標,卻也存在多個缺陷,如協議複雜、過程繁瑣,應用上也是頗不方便,而公安部爲其開發的檢驗程序,更如天書般複雜,加上GB/ T28181僅是大陸的標準,註定其難以與ONVIF相抗衡,全球化更是難上加難。

因此選擇在開發版上移植實現ONVIF協議。

1.2 onvif 協議

ONVIF標準的廠商覆蓋芯片、視頻前端設備、存儲設備、系統平臺、智能分析設備、門禁、傳感設備等各個安防相關領域,IPC攝像頭只是ONVIF標準裏的一個分支而已。ONVIF規範中設備管理和控制部分所定義的接口均以Web Services的形式提供。每一個支持ONVIF規範的終端設備均須提供與功能相應的Web Service。ONVIF中的其他部分比如音視頻流則通過RTP/RTSP進行。

在這裏插入圖片描述

在ONVIF網絡攝像頭開發中,也就是包括了Web Server 和RTSP這兩大部分,這兩大部分的依賴不是非常大,在嵌入式設備中,可能沒有足夠的硬件資源來運行第三方多媒體處理庫,這時需要自己來封裝RTSP流媒體傳輸協議。可以先從Web Server 中獲取到了RTSP的URL之後,然後再通過這個URL來開發RTSP,這樣可以去除對Web Server的依賴,簡化程序的開發。總的來說****Web Server********:****

Ø 獲取IPC的基本信息(廠家信息、版本信息等);

Ø 修改IPC的系統日期、時間;

Ø 修改IPC的網絡配置(IP、子網掩碼等);

Ø 獲取/修改IPC攝像頭的各種參數(視頻分辨率、碼率、幀率、OSD,雲臺控制等);

1.3 rtsp 協議

實時流協議有:

Ø RTP:實時傳輸協議(Real-time Transport Protocol)

Ø RTSP:實時流協議(Real Time Streaming Protocol,RTSP)

Ø RTCP:實時傳輸控制協議 (Real Time Control Protocol,RTCP)

在這裏插入圖片描述

RTSP是用來控制聲音或影像的多媒體串流協議,並允許同時多個串流需求控制,傳輸時所用的網絡通訊協定並不在其定義的範圍內,服務器端可以自行選擇使用TCP或UDP來傳送串流內容,它的語法和運作跟HTTP 1.1類似,但並不特別強調時間同步,所以比較能容忍網絡延遲。而前面提到的允許同時多個串流需求控制(Multicast),除了可以降低服務器端的網絡用量,更進而支持多方視訊會議(Video Conference)。因爲與HTTP1.1的運作方式相似,所以代理服務器(Proxy)的快取功能(Cache)也同樣適用於RTSP,並因RTSP具有重新導向功能,可視實際負載情況來轉換提供服務的服務器,以避免過大的負載集中於同一服務器而造成延遲。

視頻傳輸項目中常用的支持rtsp協議的庫有ffmpeg、vlc、live555等。根據項目的實際需求,以及移植的工作量,目前考慮live555實現rtsp的推流服務器。數據流示意圖如下:
在這裏插入圖片描述

​ 數據流示意圖

實時流媒體模塊包括usb攝像頭原始數據採集、x264編碼、視頻流推流,其中usb攝像頭原始數據採集主要使用opencv開源庫來調用linux系統的v4l2模塊完成原始數據採集,而爲完成視頻流的高速、穩定傳輸,每一幀圖像在網絡中傳輸需要編碼,壓縮原始數據,這裏的壓縮算法也是採用視頻傳輸領域的通用開源庫x264;在將壓縮後的視頻流作爲流服務提供給訂閱者,此處的推流工作採用live555庫來完成。

2 移植

在開發版上實現視頻監控,需要移植所需的庫文件及相關應用程序,庫文件包括openssl、x264、live555等,openssl庫是用來作onvif和live555的登陸認證;x264庫是用來實現將usb攝象頭的yuv數據壓縮爲h264;live555庫是用來實現rtsp的推流服務。下面詳細說明移植過程。

2.1 交叉編譯工具鏈

安裝開發版對應的交叉編譯工具鏈,我下載的是linaro的5.3,對應的下載鏈接爲gcc-linaro-5.3.1-2016.05-x86_64_arm-linux-gnueabihf.tar.xz

交叉編譯工具鏈的安裝方法,解壓縮文件到工作目錄,將其中的bin文件目錄的決定路徑添加到環境變量中即可。

我的是:

ubuntu-sis# export PATH=$PATH:/home/sis/software/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabi/bin

2.2 移植openssl

下載openssl

解壓縮,生成配置文件

ubuntu-sis# tar xvf openssl-1.0.2r.tar.gz
ubuntu-sis# cd openssl-1.0.2r
ubuntu-sis# mkdir build
ubuntu-sis# ./config --prefix=/home/zjy/workStation/rtsp/crossGcc/openssl-1.0.2r/build no-asm -shared

修改Makefile,將CC修改爲我們設置的交叉編譯工具鏈,刪除所有-m64 字符

CC = arm-linux-gnueabi-gcc

執行make;make install

在build中會生成我們需要的文件。

2.3 移植x264

下載x264

解壓縮,更具配置生成makefile文件,並make

ubuntu-sis# tar xvf x264.tar.gz;cd x264;mkdir build
ubuntu-sis# ./configure --prefix=./build --enable-shared --enable-static --disable-win32thread --disable-asm --host=arm-linux --cross-prefix=arm-linux-gnueabi-
ubuntu-sis# make
ubuntu-sis# make install

具體需要配置那些選項,可以參考configure --help中的說明。

在build中會生成我們需要的文件。

2.4 移植live555

下載live555

解壓縮文件,f複製配置文件

ubuntu-sis# tar xvf live555xxxx.tar.gz
ubuntu-sis# cd live555
ubuntu-sis# cp config.armlinux config.mylinux

修改我們自己的配置文件,主要修改交叉編譯工具連+openssl庫及頭文件路徑。

以下是我修改後的:

  1 CROSS_COMPILE?=         arm-linux-gnueabi-
  2 COMPILE_OPTS =          $(INCLUDES) -I/usr/local/include -I. -O2 -DSOCKLEN_T=socklen_t -DNO_SSTREAM=1 -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET    _BITS=64 -I/home/zjy/workStation/rtsp/crossGcc/openssl-1.0.2r/build/include -L/home/zjy/workStation/rtsp/crossGcc/openssl-1.0.2r/build/lib
  3 C =                     c
  4 C_COMPILER =            $(CROSS_COMPILE)gcc
  5 C_FLAGS =               $(COMPILE_OPTS)
  6 CPP =                   cpp
  7 CPLUSPLUS_COMPILER =    $(CROSS_COMPILE)g++
  8 CPLUSPLUS_FLAGS =       $(COMPILE_OPTS) -Wall -DBSD=1
  9 OBJ =                   o
 10 LINK =                  $(CROSS_COMPILE)g++ -o
 11 LINK_OPTS =             
 12 CONSOLE_LINK_OPTS =     $(LINK_OPTS)
 13 LIBRARY_LINK =          $(CROSS_COMPILE)ar cr 
 14 LIBRARY_LINK_OPTS =     $(LINK_OPTS)
 15 LIB_SUFFIX =                    a
 16 LIBS_FOR_CONSOLE_APPLICATION = -lssl -lcrypto
 17 LIBS_FOR_GUI_APPLICATION =
 18 EXE =
 19 PREFIX = /home/zjy/workStation/rtsp/crossGcc/live555/build

注意,19行是我自行添加的,目的是將make install後的生成路徑指定,但是這裏並沒有覆蓋makefile中的PREFIX變量,只是在後面添加了一個新的同名變量,所以還需要在gemakefile後手動將所有子目錄中makefile的PREFIX默認刪除。

生成makefile

ubuntu-sis# ./genMakefiles mylinux

此時會生成所有makefile,需要手動將所有Makefile中的PREFIX默認變量刪除

最後make;make install

在build中會生成我們需要的文件。

2.6 複製到開發版

如果採用動態庫的開發方式,則需要將動態庫複製到開發版的/usr/local/lib目錄;如果是使用靜態庫開發,則不需要複製。

3 視頻監控開發

3.1 rtsp協議的視頻服務器

在移植live555的過程中,make後會在mediaServer目錄生成live555MediaServer文件,該文件拷貝到開發版,可直接實現rtsp的視頻服務器功能。

3.2 v4l2+rtsp推流

此處採用某網友的github,其實現了使了v4l2採集usb攝象頭數據,並使用live555推流。

github

該項目本人親自驗證過了,編譯通過,並且可以使用,但是,但是使用vlc播放其rtsp卡卡卡的,是在不能忍受,猜測其問題出現在使用v4l2將數據寫入到fifo,live555服務fifo的數據,就在這個fifo中性能下降了。後續我會繼續測試用修改。最後會將優化後的完整項目上傳到自己的github,並給出代碼解讀說明,敬請期待。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章