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

        ?

        基于無人機(jī)的實(shí)時(shí)圖傳系統(tǒng)

        2019-09-12 10:41:42嚴(yán)羽王永眾楊來邦

        嚴(yán)羽 王永眾 楊來邦

        摘 要:民用領(lǐng)域上無人機(jī)的航拍系統(tǒng),不僅給專業(yè)工作者帶來方便,還給普通生活帶來了樂趣。本文以無人機(jī)本身自帶的圖傳系統(tǒng)為基礎(chǔ)通過視頻處理技術(shù)將視頻流處理后通過Android手機(jī)4G網(wǎng)絡(luò)實(shí)時(shí)上傳到搭建好的服務(wù)器上,同時(shí)也將無人機(jī)飛行參數(shù)一并上傳,然后通過PC端獲取服務(wù)器的視頻流數(shù)據(jù)以及飛行參數(shù),PC端通過軟件能實(shí)時(shí)顯示前方無人機(jī)拍攝的畫面以及當(dāng)前無人機(jī)的飛行狀態(tài)。

        關(guān)鍵詞:無人機(jī);實(shí)時(shí)圖傳;視頻傳輸文章編號:2095-2163(2019)04-0065-06 中圖分類號:TP311.52 文獻(xiàn)標(biāo)志碼:A

        0 引 言

        無人機(jī)出現(xiàn)在1917年,早期的無人駕駛飛行器的研制和應(yīng)用主要用作靶機(jī),應(yīng)用范圍主要是在軍事上,后來逐漸用于作戰(zhàn)、偵察及民用遙感飛行平臺。20世紀(jì)80年代以來,隨著計(jì)算機(jī)技術(shù)、通訊技術(shù)的迅速發(fā)展以及各種數(shù)字化、重量輕、體積小、探測精度高的新型傳感器的不斷面世,無人機(jī)的性能不斷提高,應(yīng)用范圍和應(yīng)用領(lǐng)域迅速拓展。世界范圍內(nèi)的各種用途、各種性能指標(biāo)的無人機(jī)的類型已達(dá)數(shù)百種之多。續(xù)航時(shí)間從1 h延長到幾十個(gè)h,任務(wù)載荷從幾kg到幾百kg,這為長時(shí)間、大范圍的遙感監(jiān)測提供了保障,也為搭載多種傳感器和執(zhí)行多種任務(wù)創(chuàng)造了有利條件。

        近年來,傳統(tǒng)的衛(wèi)星遙感系統(tǒng),已經(jīng)不能夠滿足于高分辨率影像的需求,所以在這樣的情形之下,無人機(jī)[1]因其自身所獨(dú)有的優(yōu)勢被廣泛應(yīng)用,成為了衛(wèi)星遙感系統(tǒng)檢測的補(bǔ)充。

        無人機(jī)遙感技術(shù)可快速地對地質(zhì)環(huán)境信息和過時(shí)的 GIS數(shù)據(jù)庫進(jìn)行更新、修正和升級 。為政府和相關(guān)部門的行政管理、土地、地質(zhì)環(huán)境治理,提供及時(shí)的技術(shù)保證。

        隨著國家改革開放的逐步深入,經(jīng)濟(jì)建設(shè)迅猛發(fā)展,各地區(qū)的地貌發(fā)生巨大變遷?,F(xiàn)有的航空遙感技術(shù)手段已無法適應(yīng)經(jīng)濟(jì)發(fā)展的需要。新的遙感技術(shù)為日益發(fā)展的經(jīng)濟(jì)建設(shè)和文化事業(yè)服務(wù)。以無人駕駛飛機(jī)為空中遙感平臺的技術(shù),是為適應(yīng)這一需要而發(fā)展起來的一項(xiàng)新型應(yīng)用性技術(shù),能夠較好地滿足現(xiàn)階段國家對航空遙感業(yè)務(wù)的需求,對陳舊的地理資料進(jìn)行更新。

        目前低空無人機(jī)遙感技術(shù)在航拍、航測、國土、農(nóng)業(yè)、環(huán)保、應(yīng)急救災(zāi)和科學(xué)研究等領(lǐng)域應(yīng)用廣泛[2-3],無人機(jī)遙感航空技術(shù)以低速無人駕駛飛機(jī)為空中遙感平臺,用彩色、黑白、紅外、攝像技術(shù)拍攝空中影像數(shù)據(jù);并用計(jì)算機(jī)對圖像信息加工處理。該系統(tǒng)在設(shè)計(jì)和最優(yōu)化組合方面具有突出的特點(diǎn),是集成了遙感、遙控、遙測技術(shù)與計(jì)算機(jī)技術(shù)的新型應(yīng)用技術(shù)。

        1 無人機(jī)飛行參數(shù)獲取與圖傳系統(tǒng)

        1.1 軟硬件平臺簡介

        (1)大疆系列無人機(jī)一臺;

        (2)搭載Android系統(tǒng)手機(jī)一臺(要帶有4 G流量卡);

        (3)X86系列多核處理服務(wù)器一臺,該服務(wù)器要固定IP同時(shí)要有大容量帶寬;

        (4)通用計(jì)算機(jī)一臺作為接收終端使用。

        本文無人機(jī)采用大疆精靈系列無人機(jī)。該無人機(jī)搭載了6個(gè)視覺傳感器、主相機(jī)、2組紅外傳感器、1組超聲波傳感器、GPS/GLONASS雙模衛(wèi)星定位系統(tǒng)、IMU和指南針雙冗余傳感器。通過無人機(jī)的無線傳輸設(shè)備連接遙控器,遙控器一端與手機(jī)相連。無人機(jī)將拍攝到的圖像畫面以及飛行參數(shù)通過無線傳回到遙控器,手機(jī)從遙控器獲取數(shù)據(jù)并通過4G網(wǎng)絡(luò)傳遞到已經(jīng)搭建好的服務(wù)器平臺,PC端通過網(wǎng)絡(luò)可以實(shí)時(shí)獲取無人機(jī)拍攝的影像以及各飛行參數(shù)。

        1.2 H264視頻流簡介

        H264是新一代的編碼標(biāo)準(zhǔn),以高壓縮、高質(zhì)量和支持多種網(wǎng)絡(luò)的流媒體傳輸著稱[4]。在H264協(xié)議里定義了3種幀:完整編碼的幀叫I幀;參考之前的I幀生成的只包含差異部分編碼的幀叫P幀;參考前后的幀編碼的幀叫B幀。 H264采用的核心算法是幀內(nèi)壓縮和幀間壓縮,幀內(nèi)壓縮是生成I幀的算法,幀間壓縮是生成B幀和P幀的算法。3種幀的說明:

        1.2.1 I幀

        I幀:幀內(nèi)編碼幀。為關(guān)鍵幀,是一幀畫面的完整保留;解碼時(shí)只需要I幀就可以完成。

        I幀特點(diǎn):

        (1)解碼時(shí)僅用I幀的數(shù)據(jù)就可重構(gòu)完整圖像;

        (2)I幀是P幀和B幀的參考幀;

        (3)I幀是基礎(chǔ)幀即第一幀,在一組中只有一個(gè)I幀;

        (4)幀所占數(shù)據(jù)的信息量比較大。

        1.2.2 P幀

        P幀:前向預(yù)測編碼幀。P幀表示的是這一幀跟之前的一個(gè)關(guān)鍵幀(或P幀)的差別,解碼時(shí)需要用之前緩存的畫面疊加上本幀定義的差別,生成最終畫面。

        P幀特點(diǎn):

        (1)P幀是I幀后面相隔1~2幀的編碼幀;

        (2)P幀采用運(yùn)動補(bǔ)償?shù)姆椒▊魉推渑c前面的I或P幀的差值及運(yùn)動矢量(預(yù)測誤差);

        (3)解碼時(shí)必須將I幀中的預(yù)測值與預(yù)測誤差求和后才能重構(gòu)完整的P幀圖像;

        (4)P幀屬于前向預(yù)測的幀間編碼。其只參考前面最靠近其的I幀或P幀;

        (5)由于P幀是參考幀,可能造成解碼錯誤的擴(kuò)散。

        1.2.3 B幀

        B幀:雙向預(yù)測內(nèi)插編碼幀。是雙向差別幀,也就是B幀記錄的是本幀與前后幀的差別。要解碼B幀,不僅要取得之前的緩存畫面,還要解碼之后的畫面,通過前后畫面與本幀數(shù)據(jù)的疊加取得最終的畫面。

        B幀特點(diǎn)

        (1)B幀是由前面的I或P幀和后面的P幀來進(jìn)行預(yù)測的;

        (2)B幀傳送的是其與前面的I或P幀和后面的P幀之間的預(yù)測誤差及運(yùn)動矢量;

        (3)B幀壓縮比最高,因?yàn)槠渲环从硡⒖紟g運(yùn)動主體的變化情況,預(yù)測比較準(zhǔn)確;

        H264功能分為2層:視頻編碼層面(VCL)和網(wǎng)絡(luò)抽象層面(NAL)。其中,前者負(fù)責(zé)有效表示視頻數(shù)據(jù)的內(nèi)容,而后者負(fù)責(zé)格式化數(shù)據(jù)并提供頭信息,以保證數(shù)據(jù)適合各種信道和存儲介質(zhì)上的傳輸[5]。因此每幀數(shù)據(jù)就是一個(gè)NAL單元(SPS與PPS除外)。在實(shí)際的H264數(shù)據(jù)幀中,往往幀前面帶有00 00 00 01 或 00 00 01分隔符,一般來說編碼器編出的首幀數(shù)據(jù)為PPS與SPS,接著為I幀。

        通過NALU類型人們可以判斷幀類型見表1。

        以00 00 00 01分割之后的下一個(gè)字節(jié)就是NALU類型,將其轉(zhuǎn)為二進(jìn)制數(shù)據(jù)后:

        (1)第1位禁止位,值為1表示語法出錯;

        (2)第2~3位為參考級別;

        (3)第4~8為是nal單元類型。

        圖1所示是從無人機(jī)視頻流中截取的視頻文件,以16進(jìn)制的格式打開的視頻流數(shù)據(jù)。

        從劃紅線處可以看出以00 00 00 01分割之后有67 68 65 61

        其中,0x67的二進(jìn)制碼為:0110 0111

        4-8位00111,轉(zhuǎn)為十進(jìn)制7,參考表1,7對應(yīng)序列參數(shù)集SPS。

        其中,0x68的二進(jìn)制碼為:0110 1000

        4-8位01000,轉(zhuǎn)為十進(jìn)制8,參考表1,8對應(yīng)圖像參數(shù)集PPS。

        其中,0x65的二進(jìn)制碼為:0110 0101

        4-8位00101,轉(zhuǎn)為十進(jìn)制5,參考表1,5對應(yīng)IDR圖像中的片(I幀)。

        其中,0x61的二進(jìn)制碼為:01100001

        4-8位00001,轉(zhuǎn)為十進(jìn)制1,參考表1,1對應(yīng)非IDR圖像的片即非I幀,因?yàn)樵搸贗幀后面則根據(jù)P幀特點(diǎn)可以判斷出是P幀而不可能是B幀。

        H264的SPS和PPS串,包含了初始化H264解碼器所需要的信息參數(shù),包括編碼所用的profile、level、圖像的寬和高,deblock濾波器等。SPS中的信息至關(guān)重要。如果其中的數(shù)據(jù)丟失或出現(xiàn)錯誤,那么解碼過程很可能會失敗,分離H264碼流時(shí),需要首先寫入SPS和PPS,否則會導(dǎo)致分離出來的數(shù)據(jù)沒有SPS、PPS而無法播放。

        1.3 H264視頻流處理

        手機(jī)端實(shí)時(shí)從遙控器獲取的H264視頻流是一段非常簡短且由多個(gè)或一個(gè)幀組成的流文件。如圖1所示,所做的工作就是把每一幀給分離出來。處理的方法是組建一個(gè)通道,該通道的作用是一端一直獲取傳輸過來的H264視頻流且將該視頻流的每一幀分離出來,通過管道傳輸?shù)搅硪欢?。而另一端封裝成flv的格式通過網(wǎng)絡(luò)發(fā)送到服務(wù)器,為保證視頻質(zhì)量以及實(shí)時(shí)性,上述過程都是并行化執(zhí)行。因?yàn)閷?shí)時(shí)圖傳對運(yùn)行效率有較高的要求,因此上述涉及到大量運(yùn)算的過程都是在c環(huán)境中運(yùn)行的。

        1.4 RTMP協(xié)議

        本地視頻流數(shù)據(jù)需要通過流媒體協(xié)議(如RTMP、HTTP、UDP、TCP、RTP等)推送至服務(wù)器,而本文以RTMP協(xié)議推送為主。

        RTMP是Real Time Messaging Protocol(實(shí)時(shí)消息傳輸協(xié)議)的首字母縮寫。該協(xié)議基于TCP,是一個(gè)協(xié)議族,包括RTMP基本協(xié)議及RTMPT/RTMPS/RTMPE等多種變種[6]。RTMP是一種設(shè)計(jì)用來進(jìn)行實(shí)時(shí)數(shù)據(jù)通信的網(wǎng)絡(luò)協(xié)議,主要用來在Flash/AIR平臺和支持RTMP協(xié)議的流媒體/交互服務(wù)器之間進(jìn)行音視頻和數(shù)據(jù)通信。支持該協(xié)議的軟件包括Adobe Media Server/Ultrant Media Server/red5等。

        通過從官網(wǎng)下載的開源函數(shù)庫編譯后的libtrmp提供的API來進(jìn)行推流,其中的RTMP協(xié)議已經(jīng)封裝在相關(guān)函數(shù)中。librtmp提供的API中只需要常見的幾個(gè)API就可以將數(shù)據(jù)流推送到服務(wù)器,所需要的API如下:

        RTMP_Init()//初始化結(jié)構(gòu)體

        RTMP_Free()

        RTMP_Alloc()

        RTMP_SetupURL()//設(shè)置rtmp server地址

        RTMP_EnableWrite()//打開可寫選項(xiàng),設(shè)定為推流狀態(tài)

        RTMP_Connect()//建立NetConnection

        RTMP_Close()//關(guān)閉連接

        RTMP_ConnectStream()//建立NetStream

        RTMP_DeleteStream()//刪除NetStream

        RTMP_SendPacket()//發(fā)送數(shù)據(jù)

        推流函數(shù)流程如圖2所示。

        1.5 基于RTMP協(xié)議的H264推流器

        通過RTMP協(xié)議將H264格式的視頻流發(fā)送到服務(wù)器中實(shí)現(xiàn)推流效果具體程序流程如圖3所示。

        整個(gè)程序框圖包含4個(gè)接口函數(shù):

        GetH264():獲取H264視頻流數(shù)據(jù)。

        RTMPH264_Connect():建立RTMP連接。

        RTMPH264_Send():發(fā)送數(shù)據(jù)。

        RTMPH264_Close():關(guān)閉RTMP連接。

        按照先后順序依次調(diào)用上述函數(shù)可以推流H264格式視頻流到服務(wù)器。上述4個(gè)接口函數(shù)中又包含以下函數(shù),這些函數(shù)主要功能如下:

        GetH264()中包含以下函數(shù):

        FilterH264():對原始視頻流過濾。

        H264toMem():對接收到的H264視頻流以隊(duì)列的形式放入內(nèi)存緩存中。

        RTMPH264_Connect()中包含以下函數(shù):

        InitSockets():初始化Socket。

        RTMP_Alloc():為結(jié)構(gòu)體“RTMP”分配內(nèi)存。

        RTMP_Init():初始化結(jié)構(gòu)體“RTMP”中的成員變量。

        RTMP_SetupURL():設(shè)置輸入的RTMP連接的URL。

        RTMP_EnableWrite():發(fā)布流的時(shí)候必須要使用。如果不使用則代表接收流。

        RTMP_Connect():建立RTMP連接,創(chuàng)建一個(gè)RTMP協(xié)議規(guī)范中的NetConnection。

        RTMP_ConnectStream():創(chuàng)建一個(gè)RTMP協(xié)議規(guī)范中的NetStream。

        RTMPH264_Send()中包含以下函數(shù):

        ReadFirstNaluFromBuf():從內(nèi)存中讀取出第一個(gè)NAL單元。

        ReadOneNaluFromBuf():從內(nèi)存中讀取出一個(gè)NAL單元。

        H264_decode_sps():解碼SPS,獲取視頻的寬、高、幀率信息。

        SendH264Packet():發(fā)送一個(gè)NAL單元。

        SendH264Packet()中包含以下函數(shù):

        SendVideoSpsPps():如果是關(guān)鍵幀,則在發(fā)送該幀之前先發(fā)送SPS和PPS。

        SendPacket():組裝一個(gè)RTMPPacket,調(diào)用RTMP_SendPacket()發(fā)送出去。

        RTMP_SendPacket():發(fā)送一個(gè)RTMP數(shù)據(jù)RTMPPacket。

        RTMPH264_Close()中包含以下函數(shù):

        RTMP_Close():關(guān)閉RTMP連接。

        RTMP_Free():釋放結(jié)構(gòu)體“RTMP”。

        CleanupSockets():關(guān)閉Socket。

        1.6 服務(wù)器技術(shù)

        由于視頻的實(shí)時(shí)性對服務(wù)器提出較高的要求,數(shù)據(jù)傳輸時(shí)要盡量避免延遲所以選用較為成熟的nginx web服務(wù)器來接收發(fā)送過來的視頻流。

        Nginx("engine x")是一款由俄羅斯程序設(shè)計(jì)師Igor Sysoev所開發(fā)高性能的 Web和反向代理服務(wù)器,也是一個(gè) IMAP/POP3/SMTP代理服務(wù)器[7]。該服務(wù)器具有以下優(yōu)勢:

        (1)Nginx使用基于事件驅(qū)動架構(gòu),使得其可以支持?jǐn)?shù)以百萬級別的TCP連接。

        (2)高度的模塊化和自由軟件許可證使得第三方模塊層出不窮。

        (3)Nginx是一個(gè)跨平臺服務(wù)器,可以運(yùn)行在Linux、 FreeBSD、 Solaris、 AIX、 Mac OS、 Windows等操作系統(tǒng)上。

        最重要的一點(diǎn)是該服務(wù)器完全開源,可以通過自己的需要專門定制自己的需求同時(shí)該服務(wù)器具有的模塊化更易于開發(fā)和維護(hù),這些優(yōu)秀的設(shè)計(jì)帶來的極大的穩(wěn)定性能,使得大量從事軟件開發(fā)的人員使用和維護(hù)之。

        Nginx帶有的RTMP模塊使得配置該服務(wù)器變得非常簡單且高效,因此配置時(shí)只要修改nginx.conf配置文件就行,在配置文件中主要加入以下程序:

        rtmp {

        server {

        listen 1935;

        application rtmplive{

        live on;

        record off;

        }

        }

        RTMP表示的是網(wǎng)絡(luò)傳輸RTMP協(xié)議而非HTTP協(xié)議,其中1935是監(jiān)聽端口,服務(wù)器一直監(jiān)聽該端口若有數(shù)據(jù)進(jìn)來則從該端口拉取數(shù)據(jù),獲取的數(shù)據(jù)可以存放在硬盤或內(nèi)存中,本文涉及到延遲問題則直接存放在內(nèi)存中。

        1.7 程序流程圖及主要代碼

        具體的程序流程如圖4所示。

        上述流程是無人機(jī)視頻流部分,下面是關(guān)于無人機(jī)相關(guān)參數(shù)獲取過程,其中包括:高度、速度、經(jīng)緯度、飛行參數(shù)等。

        Aircraft aircraft = (Aircraft) DJISDKManager.getInstance().getProduct();

        if(aircraft!=null){aircraft.getFlight Controller().setStateCallback(new

        FlightControllerState.Callback(){

        Public void onUpdate(FlightController State flightControllerState){

        if (flightControllerState.getGPSSignal Level() != null) {

        GPSSignalLevel gpsSignalLevel=flight ControllerState.

        getGPSSignalLevel();

        ....}

        }

        });}

        函數(shù)onUpdate()是獲取無人機(jī)飛行時(shí)的相關(guān)參數(shù)包括GPS信號強(qiáng)度、當(dāng)前飛行的高度、速度、經(jīng)緯度、飛行時(shí)的姿態(tài)角等。

        public String SendData(String url, Wurenji express, String contentType) {

        try {

        vehicle = new JSONStringer().object().key("Wurenji").object()

        .key("guid").value(express.guid)

        .key("Site").value(express.Site)

        .key("Pitch").value(express.Pitch)

        .key("Yaw").value(express.Yaw)

        .key("Roll").value(express.Roll)

        ....

        .endObject();

        StringEntity entity = new StringEntity(vehicle.toString(), encode);

        91亚洲精品久久久蜜桃| 亚洲产国偷v产偷v自拍色戒| 亚洲av理论在线电影网| 丰满熟妇人妻av无码区| 白色月光免费观看完整版| 精品国产sm最大网站| 毛片大全真人在线| 亚洲中文欧美日韩在线人| 一区二区视频资源在线观看| 久久久精品视频网站在线观看| 中国女人做爰视频| 中文字幕在线码一区| 日本熟妇高潮爽视频在线观看| 日韩一级黄色片一区二区三区| 美丽人妻在夫前被黑人| 亚洲国产成人精品无码区在线观看| 精品国产亚洲av麻豆尤物| 在线中文字幕一区二区| 国产午夜福利精品一区二区三区 | 日本不卡一区二区三区在线| 国产精品一区二区av片| 国产色婷亚洲99精品av网站| 久青草影院在线观看国产| 婷婷色中文字幕综合在线| 日韩AV无码一区二区三不卡| 在线小黄片视频免费播放| 国产熟妇与子伦hd| 国产mv在线天堂mv免费观看| bbbbbxxxxx欧美性| 国产激情视频在线观看大全 | 色偷偷久久一区二区三区| AV无码免费不卡在线观看| 亚洲国产av一区二区不卡| 亚洲国产精品无码久久| 久久精品国产日本波多麻结衣| 国产麻豆剧传媒精品国产av蜜桃| 国产自拍精品视频免费| 四虎影视永久地址www成人| 天天干夜夜躁| 久草中文在线这里只有精品| 日本午夜精品一区二区三区电影 |