基于H264的智能家居視頻監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
引 言
隨著社會(huì)的發(fā)展,人們對(duì)于家居安全的重視性已經(jīng)逐漸增強(qiáng),而普通的家居安防例如安全門(mén)、保安等已經(jīng)達(dá)不到人們對(duì)安全的要求。得益于物聯(lián)網(wǎng)技術(shù)的發(fā)展,智能家居得到了迅速發(fā)展。通過(guò)嵌入式智能家居控制系統(tǒng)能夠?qū)⒁曨l的采集、編碼、傳輸集為一體,并有效的將采集到的圖像進(jìn)行傳輸。使得人們能夠?qū)崟r(shí)監(jiān)控家庭的安全情況以及如果出現(xiàn)安全意外能夠?qū)⒎缸锵右扇说拿婷才南聛?lái)幫助警察破案。而 RTP 協(xié)議是基于UDP 應(yīng)用層的針對(duì)多媒體數(shù)據(jù)流的一種實(shí)時(shí)傳輸協(xié)議。RTP協(xié)議能夠得到傳輸?shù)挠行Х答伡伴_(kāi)銷最小化使得傳輸效率最佳,因此非常適合傳輸實(shí)時(shí)數(shù)據(jù)。
1 系統(tǒng)整體方案設(shè)計(jì)
智能家居視頻監(jiān)控系統(tǒng)主要分為三個(gè)部分 :視頻圖像的采集、圖像的編碼、編碼圖像的傳輸。圖 1 所示是該系統(tǒng)的整體結(jié)構(gòu)設(shè)計(jì)圖。
視頻圖像采集是將USB攝像頭連接到S5PV210開(kāi)發(fā)板, 通過(guò)Linux系統(tǒng)的V4L2音視頻采集接口采集USB的原始圖像數(shù)據(jù)。由于原始圖像數(shù)據(jù)比較大所以需要進(jìn)行圖像的編碼, 而 H264編碼格式比其他編碼方式有更高的數(shù)據(jù)壓縮比。在同等圖像質(zhì)量條件下比 MPEG-2g高 2~3倍, 比 MPEG-4 高 1.5~2倍。因此經(jīng)過(guò)H264壓縮過(guò)后的視頻數(shù)據(jù)在網(wǎng)絡(luò)傳輸過(guò)程中所需要的寬帶更少,也很經(jīng)濟(jì)。而圖像的編碼是通過(guò) x264 開(kāi)源視頻編碼庫(kù)對(duì)采集到的原始視頻圖像進(jìn)行編碼,編碼為H264 格式的頻流。圖像傳輸通過(guò)開(kāi)源 RTP 庫(kù)的JLIBRTP 來(lái)實(shí)現(xiàn)圖像數(shù)據(jù)的傳輸。
2 系統(tǒng)硬件設(shè)計(jì)
智能家居監(jiān)控系統(tǒng)的硬件主要包括處理器、內(nèi)存、閃存、USB 攝像頭等。而本文設(shè)計(jì)的智能家居視頻監(jiān)控系統(tǒng)采用的是三星Contex-A8 S5PV210 處理器,運(yùn)行速度最高可以達(dá)到1GHz,1 G 的DDR2 內(nèi)存充分保證了系統(tǒng)及程序運(yùn)行的流暢性。1 G 的SLC Nand Flash 使得系統(tǒng)有更大的存儲(chǔ)空間。而且其中的 HDMI 接口、USB 接口、WiFi 接口為開(kāi)發(fā)板功能的擴(kuò)充提供了強(qiáng)大的保障。USB 攝像頭采用的是藍(lán)色妖姬M2200 攝像頭,像素值達(dá)到 1 200 萬(wàn)像素,完全滿足對(duì)于智能家居視頻監(jiān)控的要求。由于S5PV210 開(kāi)發(fā)板有外接的USB 接口使得安裝變的簡(jiǎn)單。
3 系統(tǒng)軟件設(shè)計(jì)
3.1 V4L2的圖像采集
V4L2(Video for Linux2)一般在Linux下進(jìn)行圖像及音頻的采集。V4L2 提供了一套 API 接口用以采集音頻和視頻數(shù)據(jù),其中,具體實(shí)現(xiàn)是Linux 系統(tǒng)提供的,而且攝像頭對(duì)于Linux 系統(tǒng)的支持要求不高,只需要支持UVC 即可通過(guò)V4L2 來(lái)進(jìn)行圖像采集。
Linux 對(duì)于 USB 攝像頭驅(qū)動(dòng)的支持及V4L2 的支持需要在內(nèi)核中進(jìn)行配置。下載 Linux 源碼對(duì)配置文件進(jìn)行配置make menuconfig, 在 Linux 內(nèi)核配置菜單中選中Video for Linux 和 Video Capture 這兩個(gè)選項(xiàng)即可配置成功。配置后USB 攝像頭連接S5PV 開(kāi)發(fā)板時(shí)會(huì)打印出攝像頭的信息在終端上。圖 2 所示為V4L2 的圖像采集流程圖。
V4L2 的視頻采集主要是通過(guò)ioctl 函數(shù)傳遞不同的控制命令及結(jié)構(gòu)體來(lái)設(shè)置采集圖像的參數(shù)。其中ioctl 函數(shù)的原型為 :int ioctl(int fd,int request,void *argp)。第一個(gè)參數(shù)是打開(kāi)攝像頭設(shè)備后返回的設(shè)備描述符 ;第二個(gè)參數(shù)是傳入的控制命令 ;第三個(gè)參數(shù)是傳入的控制結(jié)構(gòu)體或者需要返回的參數(shù)。具體的采集流程如圖 2 所示。首先打開(kāi)攝像頭設(shè)備,一般為/dev/video 文件,打開(kāi)文件后查詢攝像頭支持的圖像格式例如亮度、對(duì)比度及圖片格式等。查詢后再根據(jù)攝像頭支持的圖片格式設(shè)置采集的圖片格式。設(shè)置好支持申請(qǐng)緩沖區(qū)來(lái)進(jìn)行圖像采集,將采集到的原始圖像進(jìn)行編碼及傳輸。當(dāng)采集完成后關(guān)閉攝像頭設(shè)備。
3.2 x264 圖像編碼
采集到的原始數(shù)據(jù)一幀幀的圖像數(shù)據(jù)量大,不適合網(wǎng)絡(luò) 實(shí)時(shí)傳輸。對(duì)原始數(shù)據(jù)進(jìn)行編碼就顯得十分重要,本系統(tǒng)采 用 H264 編碼的主要原因是 H264 的優(yōu)勢(shì)比較大。H264 編碼 具有更高的編碼效率,更好的視頻質(zhì)量以及強(qiáng)勢(shì)的網(wǎng)絡(luò)適應(yīng) 能力。能夠根據(jù)不同的傳輸環(huán)境采用不同的傳播和播放速率。 而且 H264 的編碼選項(xiàng)少,適合開(kāi)發(fā)者進(jìn)行編碼設(shè)置。其錯(cuò)誤 恢復(fù)功能使圖像的傳輸質(zhì)量得到了保證。
由于 H264 格式的視頻流占用的帶寬較小,而 x264 是開(kāi) 源的,H264 視頻編碼庫(kù)是最好的有損視頻編碼器。x264 是 開(kāi)源的編碼庫(kù)但是開(kāi)發(fā)板的根文件系統(tǒng)中并不支持,所以需要 對(duì) x264 庫(kù)進(jìn)行交叉編譯移植。交叉編譯后將編譯后的動(dòng)態(tài)庫(kù) 文件及相關(guān)的頭文件拷貝到 S5PV210 開(kāi)發(fā)板的根文件系統(tǒng)中, 為 x264 圖像編碼搭建好運(yùn)行環(huán)境。在通過(guò) V4L2 采集到攝像 頭的原始數(shù)據(jù)后需要進(jìn)行 H264 編碼。H264 的編碼步驟如下:
(1)通過(guò)函數(shù) x264_encoder_open 來(lái)設(shè)置及初始化 x264 編碼參數(shù)。
(2)將采集到的原始圖像數(shù)據(jù)的緩沖區(qū)指針傳入編碼函數(shù) x264_encoder_encode 進(jìn)行編碼。如果采集的原始圖片格式不 是 YUV420 格式,需要首先將圖片格式轉(zhuǎn)化為 YUV420 格式 后再進(jìn)行編碼。
(3)編碼完成后關(guān)閉編碼器句柄。
3.3 RTP 視頻傳輸
RTP 協(xié)議是一種為了多媒體數(shù)據(jù)實(shí)時(shí)傳輸?shù)母咝Ъ皽?zhǔn)確而現(xiàn)實(shí)的網(wǎng)絡(luò)傳輸協(xié)議。支持單播、多播和組播。RTP 協(xié)議是基于UDP 協(xié)議的上層協(xié)議。由于RTP 協(xié)議不能保證數(shù)據(jù)準(zhǔn)確地傳輸,所以需要和RTCP 協(xié)議一起來(lái)控制數(shù)據(jù)傳輸,其中RTCP 協(xié)議主要是對(duì)數(shù)據(jù)的檢測(cè)和控制。
在傳輸數(shù)據(jù)的框架中, 原始圖像經(jīng)過(guò) x264 編碼后為H264 格式數(shù)據(jù)流,圖像編碼后的NAL 單元的數(shù)據(jù)可能會(huì)大于MTU 值,所以需要對(duì)NAL 單元進(jìn)行分包處理,接收端再進(jìn)行組包恢復(fù)數(shù)據(jù)。而 RTP 協(xié)議的傳輸流程比較復(fù)雜,所以選擇開(kāi)源的RTP 協(xié)議實(shí)現(xiàn)源碼 JLIBRTP 來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)的發(fā)送。由于系統(tǒng)不支持JLIBRTP 庫(kù)所以需要交叉編譯 JLIBRTP 庫(kù)文件,編譯好之后將需要的庫(kù)文件及頭文件拷貝到根文件系統(tǒng)上為數(shù)據(jù)傳輸搭建好運(yùn)行環(huán)境。
RTP 傳輸數(shù)據(jù)需要先進(jìn)行初始化配置相應(yīng)的網(wǎng)絡(luò),再獲取數(shù)據(jù)進(jìn)行傳輸。當(dāng)數(shù)據(jù)傳輸完成之后關(guān)閉相應(yīng)的套接字。流程如圖 3 所示。
4 功能測(cè)試
為了測(cè)試數(shù)據(jù)傳輸是否正確,通過(guò)客戶端連接到服務(wù)器 獲取數(shù)據(jù)并查看畫(huà)面的完整性。采集的圖像如圖 4 所示。
5 結(jié) 語(yǔ)
本文基于 H264 設(shè)計(jì)與實(shí)現(xiàn)了一種智能家居視頻監(jiān)控系 統(tǒng)方案。主要分析了通過(guò) Linux 的 V4L2 系統(tǒng)來(lái)采集攝像頭 的原始圖像,將原始圖像用 x264 開(kāi)源編碼庫(kù)編碼原始圖像為 H264 格式的數(shù)據(jù)流,最終通過(guò) RTP 和 RTCP 網(wǎng)絡(luò)傳輸協(xié)議 來(lái)傳輸數(shù)據(jù)。實(shí)現(xiàn)了圖像的實(shí)時(shí)采集。