亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于RTSP的嵌入式視頻監(jiān)控系統(tǒng)設(shè)計※

        2014-09-25 03:06:00劉志軍王建
        關(guān)鍵詞:調(diào)用嵌入式編碼

        劉志軍,王建

        (華南農(nóng)業(yè)大學工程學院,廣州510642)

        引 言

        基于以太網(wǎng)的嵌入式視頻監(jiān)控得到越來越廣泛的應(yīng)用,如通過3G網(wǎng)絡(luò)傳給服務(wù)器,將移動機器人所采集到的視頻數(shù)據(jù)通過3G網(wǎng)絡(luò)傳給服務(wù)器[1]。流媒體技術(shù)也在不斷地普及,將目前流行的流媒體傳輸技術(shù)應(yīng)用到視頻監(jiān)控系統(tǒng)中是比較好的選擇,既不會占用太多的網(wǎng)絡(luò)帶寬,又可以實現(xiàn)較為流暢的視頻監(jiān)控。本文基于H264編碼技術(shù)和對Live555二次開發(fā),設(shè)計了一種可對柑橘生長進行視頻實時采集、編碼、傳輸?shù)那度胧搅髅襟w視頻監(jiān)控系統(tǒng)。

        1 網(wǎng)絡(luò)監(jiān)控視頻技術(shù)簡介

        1.1 RTSP技術(shù)

        RTSP[2](Real Time Streaming Protocol,實時流傳輸協(xié)議),屬于TCP/IP協(xié)議體系。顧名思義,它是一個用于流媒體傳輸控制的協(xié)議,能夠控制流媒體在傳輸過程中的暫停與繼續(xù),從而方便用戶實現(xiàn)播放器的一些基本播放功能。它以C/S方式(客戶端/服務(wù)器)工作,由于結(jié)合了很多技術(shù)上的優(yōu)點,目前在因特網(wǎng)視頻應(yīng)用中廣泛流行。

        RTSP協(xié)議與RTP(Real Time Protocol)協(xié)議、RTCP(Real Time Control Protocol)的關(guān)系如圖1所示。通常而言,RTSP只用來傳輸控制信息,這些控制信息使得媒體播放器能控制流媒體的傳輸,而流媒體的傳輸則由RTP負責,所以RTSP協(xié)議必須與RTP/RTCP協(xié)議一起配合使用。

        圖1 RTSP與RTP、RTCP關(guān)系

        1.2 H.264技術(shù)

        H.264[3]技術(shù)是目前在視頻編碼壓縮中采用的最為普遍的一種技術(shù)。由于H.264具有更低的碼率,在同等圖像質(zhì)量的前提下,它可以達到更高的壓縮率,與前代MPEG-2相比,壓縮比通常是它的2倍以上;H.264在算法方面更加復雜,所以它相比上代壓縮技術(shù)也能夠提供高質(zhì)量的圖像,而且它的容錯能力也很強,網(wǎng)絡(luò)適應(yīng)能力非常好。在本設(shè)計中,對于動態(tài)變化不是很明顯的視頻,H.264顯示出了非常強大的壓縮能力,使得網(wǎng)絡(luò)帶寬大大減少。本設(shè)計只采用了H.264的編碼部分,應(yīng)用目前最為流行的符合H.264規(guī)范的x264工程作為編碼器。

        1.3 Live555開源工程

        Live555[4]是一個開源項目,使用C++語言編譯,為RTSP、RTP/RTCP、SIP等標準流媒體傳輸協(xié)議提供解決方案,支持目前主流的ts、MPEG、mkv、H264格式的視頻,被大多數(shù)流媒體服務(wù)器應(yīng)用選為開發(fā)平臺,VLC、ffplay等多款播放器能夠點播使用Live555作為流媒體服務(wù)器的視頻數(shù)據(jù)。Live555有4個基本的庫,即BasicUsageEnvironment、UsageEnvironment、GroupSock和Live-Media。前面三個庫在本設(shè)計中均不需要改動,需要改動的是LiveMedia模塊,它是Live555最重要的模塊。這個模塊的主要作用是聲明一個Medium類,在Live555工程中,很多其他類都是它的派生類。

        1.4 YUV圖像數(shù)據(jù)分析

        常用的YUV元素圖像格式有YUV422格式和YUV420格式。YUV422格式中,按照U、V在時空上的排列順序不同,可以將它們分為YUYV、YVYU、UYVY、VYUY四種不同的排列方式,目前大部分USB攝像頭輸出的原始圖像都是按照YUYV格式來排列的;按Y和UV的排列方式不同又可以分為打包格式和平面格式,打包格式通常以英文字母planner表示,而平面格式則用interlaced表示。打包格式較為常見,它的Y分量和UV分量在內(nèi)存中是連續(xù)放置的,而平面格式Y(jié)和UV分量則是分開放置的,如圖2所示。

        圖2 YUV排列格式示意圖

        YUV420在排列上和YUV422規(guī)律相同,但是Y:U:V是4:1:1的。一般情況下,利用V4L2采集USB攝像頭的視頻數(shù)據(jù)是YUYV交錯排列的打包YUV422格式的,但是H264編碼庫要求輸入的視頻格式是YUV420P,即4:1:1的平面格式,所以要經(jīng)過轉(zhuǎn)換。本設(shè)計采用成熟的libswscale庫來轉(zhuǎn)換原始圖像數(shù)據(jù)。

        2 流媒體服務(wù)器的實現(xiàn)

        2.1 系統(tǒng)整體結(jié)構(gòu)

        本設(shè)計參考目前流行的視頻監(jiān)控系統(tǒng),基于Linux的平臺,利用V4L2[5](Video for Linux Two)函數(shù)接口,采集USB攝像頭傳過來的數(shù)據(jù),因目前一般的USB攝像頭只支持YUYV排列的YUV422格式的數(shù)據(jù)采集,因此需要將采集到的數(shù)據(jù)格式轉(zhuǎn)換為YUV420P之后,再利用x264對每一幀YUV數(shù)據(jù)進行編碼,最后對Live555開源工程進行二次開發(fā),構(gòu)建流媒體服務(wù)器。本設(shè)計系統(tǒng)架構(gòu)圖如圖3所示。

        圖3 系統(tǒng)架構(gòu)圖

        在本設(shè)計中,系統(tǒng)平臺為Linux,USB攝像頭的型號為環(huán)宇飛揚v8,只支持輸出YUYV排列的YUV422格式的圖像數(shù)據(jù),x264目前只支持YUV420P的圖像數(shù)據(jù)輸入。為了保證穩(wěn)定可靠,采用FFmpeg工程中的libswscale對其進行數(shù)據(jù)格式轉(zhuǎn)換,并利用構(gòu)建好的RTSP服務(wù)器對編碼的數(shù)據(jù)進行實時發(fā)送傳輸。

        2.2 構(gòu)建流媒體服務(wù)器

        對于不同的流媒體源,其數(shù)據(jù)排列格式不同,因而獲取SDP[6]的方法不同。在構(gòu)建新的流媒體源的基礎(chǔ)上,需要對SDP獲取部分代碼進行二次開發(fā)。因此,本設(shè)計的工作分為下面兩部分[9]。

        2.2.1 SDP獲取代碼二次開發(fā)

        當RTSPServer收到對某個媒體的DESCRIBE請求時,它會找到對應(yīng)的ServerMediaSession,調(diào)用ServerMediaSession::generateSDPDescription()。generateSDPDescription()中會遍歷調(diào)用ServerMediaSession中所有的調(diào)用ServerMediaSubsession,通過subsession->sdpLines()取得每個Subsession的sdp,合并成一個完整的SDP并返回。對于不同流媒體格式獲取SDP信息的方式不同,因此,本設(shè)計基于OnDemandServerMediaSubsession類構(gòu)建新的會話類WebcamOndemandMediaSubsession。

        獲取SDP信息的函數(shù)調(diào)用關(guān)系如圖4所示。

        圖4 獲取SDP函數(shù)調(diào)用關(guān)系圖

        sdpLines()函數(shù)在OnDemandServerMediaSubsession類中已經(jīng)實現(xiàn),為了順利地獲取SDP信息,需要對sdp-Lines()運行時調(diào)用的幾個函數(shù)作一定的修改。因此,需要對OnDemandServerMediaSubsession類中的幾個虛函數(shù)進行重載,具體做法如下:

        ①對于createNewStreamSource函數(shù),因為本設(shè)計處理的是H264格式的源,函數(shù)中應(yīng)當加入H264VideoStreamFramer::createNew()語句。

        ②對于createNewRTPSink函數(shù),同理,函數(shù)中應(yīng)當加入H264VideoRTPSink::createNew()語句。

        ③setSDPLinesFromRTPSink取得Subsession的sdp并保存到fSDPLines,這個函數(shù)重點是調(diào)用getAuxSDPLine,因此需要重構(gòu)getAuxSDPLine函數(shù)。getAuxSDPLine函數(shù)所調(diào)用的chkForAuxSDPLine也需要重載。對于H.264文件,是不能從rtpSink中取得PPS/SPS的,所以必須調(diào)用startPlaying函數(shù)對視頻流播放一下才行,播放之后又會關(guān)閉,這點在建立連接的時候可以用打印函數(shù)調(diào)用流程以便了解得更加清楚。在下面的偽代碼中,可以看到之后又調(diào)用了chkForAuxSDPLine這個函數(shù),這是為了保證在函數(shù)退出前能正確取得AuxSDP,所以在chk-ForAuxSDPLine函數(shù)中需要循環(huán)檢查是否取得AuxSDP。偽代碼略——編者注。

        2.2.2 構(gòu)建WebcamFrameSource類

        WebcamFrameSource屬于一個source類,也就是一個能夠提供視頻源的類。流媒體開發(fā)大都具有相似的特征,Live555中也繼承了source和sink的精神,簡而言之,source就是產(chǎn)生數(shù)據(jù)的對象,而sink節(jié)點是數(shù)據(jù)最終流向的對象,sink的數(shù)據(jù)必須通過source讀取。Live555工程中雖然已經(jīng)實現(xiàn)眾多的source,但是并沒有能夠?qū)崿F(xiàn)直播來自攝像頭過來的數(shù)據(jù)的功能,因此,二次開發(fā)的主要任務(wù)之一便是構(gòu)建新的source,該source應(yīng)該具有將H264的打包數(shù)據(jù)存放在內(nèi)存中,并且能夠傳送給H264VideoRTPSink。本設(shè)計中,基于FramedSource構(gòu)建WebcamFrameSource類。

        對于WebcamFrameSource類,主要開發(fā)工作是在其構(gòu)造函數(shù)中配置好V4L2采集攝像頭數(shù)據(jù),x264編碼優(yōu)化設(shè)置,作為一個source類,每次從該source中取數(shù)據(jù)時,都會調(diào)用doGetNextFrame函數(shù),該函數(shù)作為Framed-Source類中的一個虛函數(shù),可以在新構(gòu)造的Webcam-FrameSource類中進行重載。對V4L2設(shè)備的初始化[5]流程如圖5所示。

        圖5 V4L2初始化設(shè)置

        X264視頻編碼初始配置[7]偽代碼略——編者注。

        另外,也需要對libswscale的使用做一定的初始化。在本設(shè)計中,libswscale主要用來轉(zhuǎn)換V4L2輸出的yuv422格式數(shù)據(jù)為YUV420,其中主要是配置圖像高度、寬度、輸入/輸出格式,涉及到的函數(shù)主要是sws_getContext和avpicture_alloc,在此不再詳細敘述。

        在從WebcamFrameSource這個流媒體源中取數(shù)據(jù)時,都會調(diào)用doGetNextFrame這個函數(shù),此函數(shù)是FramedSource類中定義的虛函數(shù),因此需要在構(gòu)建WebcamFrameSource類時進行重載。從流媒體服務(wù)器發(fā)出一幀數(shù)據(jù)的流程如圖6所示。

        圖6 數(shù)據(jù)傳輸流程圖

        按照流程圖構(gòu)造新的流媒體源,并且根據(jù)幀率設(shè)置讀取兩幀的間隔延遲時間,能夠滿足實時性要求。

        3 系統(tǒng)實現(xiàn)

        3.1 軟硬件環(huán)境

        客戶端為普通PC,運行Ubuntu 10.04,客戶端連接程序使用FFmpeg項目中的ffplay,該播放器能夠很好地支持RTSP點播。

        3.2 移植要點

        本設(shè)計中需要編譯的庫文件為x264,以及l(fā)ibswscale,V4L2已經(jīng)包含在Linux內(nèi)核驅(qū)動中,x264可以下載到單獨的工程,而libswscale包含在FFmpeg工程中[8]。

        對于x264工程的編譯,本設(shè)計直接從x264官網(wǎng)下載版本號為20140104-2245的源碼,使用如下命令配置:./configure--prefix=/home/x264--enable-shared--enable-static--enable-debug--cross-prefix=arm-none-linux-gnueabi--h(huán)ost=armlinux

        命令的含義大致為安裝目錄為/home/x264,同時編譯靜態(tài)和動態(tài)庫文件,使能調(diào)試,并設(shè)置好交叉編譯工具鏈。配置好后使用make、make install即可得到編譯好的目標板文件。然后將x264.h和x264_config.h復制到目標板的/usr/include目錄,庫文件復制到/usr/lib目錄。

        要獲取libswscale,需要先編譯FFmpeg,本設(shè)計采用的FFmpeg版本號為0.8.15,配置FFmpeg的命令如下所示:./configure--prefix=/home/FFmpeginstall/--enable-shared--target-os=linux--enable-cross-compile--cross-prefix=arm-nonelinux-gnueabi---arch=arm

        配置好之后,使用make;make install命令,將安裝目錄下include中l(wèi)ibswscale目錄復制到目標板的/usr/include目錄,lib目錄中的libswscale.a和libswscale.so復制到/usr/lib目錄。

        然后再使用交叉編譯工具,利用剛才編譯好的這些庫文件,編譯目標板可執(zhí)行的流媒體服務(wù)器主程序,編譯好之后將可執(zhí)行程序拷貝到目標板的/opt目錄下。

        3.3 系統(tǒng)測試運行

        當服務(wù)器開啟之后,客戶端PC通過以太網(wǎng)與目標板連接,設(shè)置客戶端PC網(wǎng)卡地址,確保在同一IP網(wǎng)段上面,在客戶端給ffplay傳入RTSP://192.168.71.128:9554/webcam參數(shù),ffplay的播放效果如圖7所示。畫面基本較為清晰,且實時性較好。

        結(jié) 語

        圖7 運行效果圖

        本文構(gòu)建了一個結(jié)合實時視頻采集、編碼和嵌入式技術(shù)的RTSP流媒體服務(wù)器,并采用目前常用的支持RTSP技術(shù)的FFplayer作為客戶端播放器,實現(xiàn)了嵌入式視頻監(jiān)控系統(tǒng)的設(shè)計,整個系統(tǒng)成本低廉,穩(wěn)定可靠,并且負荷方面基本能滿足中小型應(yīng)用的要求,具備一定的參考價值。

        編者注:本文為期刊縮略版,全文見本刊網(wǎng)站www.mesnet.com.cn。

        [1] 劉丙洋,郭文成.3G網(wǎng)絡(luò)的移動機器人遠程監(jiān)控系統(tǒng)[J] .單片機與嵌入式系統(tǒng)應(yīng)用,2013(2):59-61.

        [2] RFC 2326—1998Realtimestreamingprotocol(RTSP)[S] .

        [3] 畢厚杰.新一代視頻壓縮標準H.264/AVC[M] .北京:人民郵電出版社,2005.

        [4] LIVE555Streaming Media[EB/OL] .[2014-04] .http://www.Live555.com/LiveMedia/.

        [5] Bill Dirks,Michael H Schimek,Hans Verkuil.Video for Linux Two API Specification[EB/OL] .[2014-04] .http://wenku.baidu.com.

        [6] Wikipedia.Session Description Protocol.[EB/OL] .[2014-04] .http://en.wikipedia.org/wiki/Session_Description_Protocol.

        [7] 何勛.基于S3C2440的H.264應(yīng)用、軟編解碼及優(yōu)化[D] .成都:電子科技大學,2010.

        [8] 王立青,李瑞祥,王延政.基于X264和流媒體的嵌入式視頻監(jiān)控系統(tǒng)[J] .計算機安全,2011(4).

        [9] 李爭明,張佐,葉德見.一種新的直播服務(wù)器實現(xiàn)框架式[J] .計算機應(yīng)用,2004(11):41-43.

        猜你喜歡
        調(diào)用嵌入式編碼
        基于SAR-SIFT和快速稀疏編碼的合成孔徑雷達圖像配準
        《全元詩》未編碼疑難字考辨十五則
        子帶編碼在圖像壓縮編碼中的應(yīng)用
        電子制作(2019年22期)2020-01-14 03:16:24
        核電項目物項調(diào)用管理的應(yīng)用研究
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        Genome and healthcare
        搭建基于Qt的嵌入式開發(fā)平臺
        嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
        基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
        Altera加入嵌入式視覺聯(lián)盟
        91av精品视频| 99精品国产成人一区二区| 中文无码熟妇人妻av在线| 欧美一片二片午夜福利在线快 | 亚洲av成人无码精品电影在线| 日韩爱爱网站| 性视频毛茸茸女性一区二区| 激情亚洲一区国产精品久久| 国产绳艺sm调教室论坛| 精品亚洲国产探花在线播放| 青青草视频在线观看视频免费| 久久天天躁夜夜躁狠狠85麻豆| 欧美亚洲国产片在线播放| 国产高清国内精品福利99久久 | 美女很黄很色国产av| 欧美人与动牲交a精品| 欧美成人免费观看国产| 国产av黄色一区二区| 日本一本免费一二区| 国产乱子伦在线观看| 国产成人一区二区三区高清| 国产熟女自拍av网站| 欧美日韩亚洲中文字幕二区| 亚洲人成网站77777在线观看 | 欧美综合天天夜夜久久| 国产一区日韩二区欧美三区| 亚洲精品二区在线观看| 亚洲天堂二区三区三州| 精品深夜av无码一区二区老年| 无遮挡中文毛片免费观看| 日本在线免费不卡一区二区三区| 免费无遮挡无码永久视频| 国产午夜影视大全免费观看| 国产高清亚洲精品视频| 国产精品一区二区三区在线蜜桃| 亚洲日韩精品无码专区网站| 日韩中文字幕一区二区高清| av成人综合在线资源站| а√天堂资源官网在线资源| 亚洲伊人久久一次| 射精情感曰妓女色视频|