明瑞 張金奎 胡杰
摘要:實時視頻監(jiān)控是如今各個領域必不可少的關鍵技術。本文設計的基于FFMPEG多媒體工具的實時視頻傳輸系統(tǒng),采用Raspberry Pi CM4高性能處理器搭載Ubuntu16.04操作系統(tǒng),利用視頻內核驅動Video for linux2獲取攝像頭圖像數據,結合X264、FFMPEG等庫實現圖像的壓縮編碼、封裝,H264視頻流通過EC20 4G模塊上傳至遠程視頻服務器,有效地實現了在服務器端進行實時監(jiān)控功能,該系統(tǒng)可廣泛應用于野外、偏遠地區(qū)的實時可視化,具有部署便捷、傳輸穩(wěn)定、可擴展性強、成本低等特點。
關鍵詞:Raspberry Pi;4G;EC20;FFMPEG;實時視頻傳輸
中圖分類號:G642? ? ? 文獻標識碼:A
文章編號:1009-3044(2021)15-0025-03
Abstract: Real-time video surveillance is an essential key technology in various fields today. The real-time video transmission system based on FFMPEG multimedia tools designed in this paper adopts Raspberry Pi CM4 high-performance processor with Ubuntu16.04 operating system, and uses video kernel to drive Video for linux2 to obtain camera image data. Combining X264, FFMPEG and other libraries to achieve image compression, encoding and packaging. H264 video streams are uploaded to a remote video server through the EC20 4G module, effectively realizing the real-time monitoring function on the server side. The system can be widely used in the wild and remote areas. Real-time visualization has the characteristics of convenient deployment, stable transmission, strong scalability, and low cost.
Key words: Raspberry Pi; 4G; EC20; FFMPEG; Real-time Video Transmission
隨著物聯網技術的發(fā)展,越來越多的設備需要遠程控制、實時收發(fā)傳輸數據,對可視化的需求愈發(fā)強烈。本系統(tǒng)利用在可視化航標項目,選擇內河航道的交通環(huán)境作為采集目標,為滿足航道交通的實時監(jiān)控和航行交通事故仲裁視頻回溯。在當今4G通信技術領域,4G LTE 無線視頻綜合成本低、二次開發(fā)兼容性強、傳輸性能穩(wěn)定,通信速率快[2],人工維護費用低,可以將不同航道的現場信息實時通過無線通訊手段傳送到無線監(jiān)控中心,并且自動形成視頻數據庫便于日后的檢索。在高速率的傳輸保障下,本系統(tǒng)可廣泛應用于野外、偏遠地區(qū)的實時可視化,并且可根據不同的應用需求拓展其他的硬件設備。
1 系統(tǒng)框架
本系統(tǒng)由高性能處理器樹莓派CM4、500W像素 CSI攝像頭、EC20 4G模塊、遠程視頻服務器構成。Raspberry Pi Compute module4尺寸小巧,核心板集成4核ARM Cortex-A72內核,可滿足圖像壓縮視頻編碼的算力需求解決了數據傳輸中的帶寬限制問題,以達到實時性的目的。CSI攝像頭通過15cm軟排線連接至樹莓派CSI接口,利用Linux系統(tǒng)內核驅動Video4Linux2采集Raw Video圖像信息,對原始圖像進行像素轉換生成YUV420P像素格式數據、壓縮編碼成H264視頻流、封裝生成FLV格式的文件,最終以文件流的形式通過EC20模塊的TCP/IP協議棧提供的AT指令集訪問FTP服務器實現實時視頻上傳至視頻服務器。服務器端亦可根據通信協議下達關機、重啟等系統(tǒng)命令,也可調節(jié)視頻碼率、壓縮比和幀率等參數,當指令下發(fā)至EC20模塊,Linux系統(tǒng)根據指令的種類觸發(fā)相應的軟中斷處理命令,達到遠程控制的功能。系統(tǒng)框圖如圖1所示。
2 系統(tǒng)硬件設計
Raspberry Pi CM4-EC20終端為本系統(tǒng)的主要硬件設計,搭載博通公司生產的 BCM2711高性能處理器 、亞博公司生產的CSI攝像頭以及移遠的EC20 4G模塊。樹莓派操作系統(tǒng)為自裁剪制作的輕量版Ubuntu16.04,該系統(tǒng)鏡像編譯安裝OPENCV、FFMPEG、X264等環(huán)境。CSI攝像頭是一款兼容樹莓派的圖像傳感器可以以SVGA、UXGA、VGA等時序輸出RGB565、YUV、JPEG等格式的圖像,其圖像像素可高達500W(2925x1944),本系統(tǒng)調用Linux內核驅動Video4Linux2獲取Raw Video原始圖像,并在內存中將YUV422像素格式數據通過雙三次縮放算法(Bicubic)輸出為640x480分辨率的YUV420P格式數據便于壓縮成H264視頻流,對編碼視頻流加以封裝即可生成視頻文件,采用循環(huán)覆蓋寫入,多線程處理,實時上傳視頻給遠程服務器。在網絡環(huán)境惡劣情況下,同時本地也保存有視頻錄像備份,便于航道交通事故回溯,有理有據。4G模塊EC20 –R2.1 Mini Pcle提供了PCI ExpressMini Card標準接口,支持最大上行速率50Mbps,在多網絡制式下能夠從3G網絡輕松平滑過渡到4G網絡,其USB通信口與樹莓派主控芯片通信,通過AT指令撥號上網FTP連接服務器,負責將視頻流數據傳送至云端服務器。
3 系統(tǒng)軟件設計
3.1 樹莓派-CSI攝像頭H264編碼系統(tǒng)設計
硬件部分驅動應用程序采用Ubuntu 16.04操作系統(tǒng)下VS Code開發(fā)平臺,C/C++語言編程,其設計流程如圖2所示。
1)讀取攝像頭設備:
在Linux系統(tǒng)中,V4L2(video4linux2)內核驅動下攝像頭作為文件對象打開讀取視頻數據。由于本系統(tǒng)只有一個攝像頭,利用Opencv中VideoCapture類創(chuàng)建一個捕獲對象camera,通過成員函數open( )來打開/dev/video0設備[2]。為了節(jié)省內存和CPU的算力,在判斷設備開啟后,利用carmera.set( )函數設置攝像頭輸出圖像數據的分辨率為1280 x 720、幀數為25 幀。
2)讀取視頻信息,初始化像素轉換句柄:
上一步驟中已經設置了圖像的長、寬和幀率,本環(huán)節(jié)主要讀取視頻幀的圖片格式——RGB565,視頻編碼H264僅支持YUV4:2:0的連續(xù)或隔行視頻的編碼,因此需要初始化像素轉換任務句柄,像素轉換可以轉換圖片分辨率、像素格式等,將操作句柄設置為RGB565像素格式轉YUV420P格式,圖片分辨率轉變?yōu)?40 x 480,采用雙三次插值算法縮小圖像。
3)創(chuàng)建編碼器,初始化編碼器:
基于ffmpeg的視頻壓縮,編碼器不能為空指針必須要動態(tài)申請內存創(chuàng)建。與此同時創(chuàng)建h264的流媒體準備存儲編碼過后的視頻流,創(chuàng)建文件名為video.h264的文件以便封裝流媒體。打開編碼器關聯輸出流媒體和輸出文件,初始化像素格式為AV_PIX_FMT_YUV420P,圖像寬為640, 高為480,比特率為1800000(分辨率一定的情況下,比特率越高圖像越清晰,但是數據量會更大),設置圖像層組大小為10(關鍵幀的周期,此數值越大圖像編碼后的數據越小,但會增加編碼的時間),設置B幀數量為3(該幀為視頻圖片空間的前后預測幀,相同碼率的情況下, 越多 B 幀的視頻,越清晰但對于編碼的復雜度較高)[3]。
4)寫入視頻頭:
寫入視頻之前會對接口設置檢查,音頻、視頻的通道檢查,視頻的參數檢查,檢查輸出封裝是否支持h264編碼格式。經過以上檢查,對video.h264文件寫入文件頭信息。
5)讀取視頻幀,對圖像序列轉換
Opencv讀取的幀像素格式為BGR格式,需要利用ffmpeg轉碼成為YUV240P才能滿足H264編碼的要求,與RGB要求三個獨立的通道傳輸信號相比YUV占用更少的帶寬?!癥”表示明亮度,“U”和“V”表示色度即分別為色調與飽和度,這樣的色彩模型使亮度和色度分開,從而更適用于編碼壓縮。圖像由720P縮放至640 x 480采用雙三次插值法。該算法利用待采樣點周圍16個點的灰度值作三次插值,不僅考慮到4 個直接相鄰點的灰度影響,而且考慮到各鄰點間灰度值變化率的影響,三次運算可以得到更接近高分辨率圖像的放大效果[4]。這種算法需要選取插值基函數來擬合數據,其最常用的插值基函數如圖3所示。
利用求得縮放圖像某像素點在原圖像的相對位置,通過此坐標找到距離最近的16個像素點,利用插值基函數,即可求出對應每個像素的權值進而獲得縮放后的像素值。
6)壓縮編碼
調用X264編碼器編碼YUV420P序列時需調整對應Y、U、V數據地址的偏移。以第一幀為例Y數據為 307200(640 *480)Byte,U、V數據均為分別為76800(640*480/4 )Byte。那么對應視頻幀的第一幀存儲順序依次為存儲Y信息、U信息、V信息。公式如圖4所示。
FrameData [0]=? data[0]
FrameData [1]=? data[0] + w*h
FrameData [2]=? data[0]+ w*h*5/4
其中FrmaeData為視頻編碼輸入數組,data為轉換后的YUV420P像素格式圖片數據。
7)寫入文件封裝文件尾:
編碼一幀即打包一幀視頻到AVPacket緩存中,再調用文件寫入函數fwrite完成視頻寫入文件。最后寫入文件尾,封裝成為FLV格式的視頻文件。文件采用循環(huán)覆蓋方式[4]。
3.2 FTP實時文件上傳系統(tǒng)設計
初始化EC20,通過USB發(fā)送AT指令查看SIM卡是否正確插入、檢查SIM卡是否注冊GPRS功能以及誤碼率、設置GPRS的APN獲取相關運營商的信息后完成入網。調用FTP AT指令連接遠程服務器,發(fā)起FTP請求,設置用戶名和密碼,二進制文件傳輸模式以及FTP文件傳輸地址端口即可開始視頻上傳。調用AT指令AT+QFTPPUT傳出文件。
4 測試結果
針對船舶交通實時監(jiān)控中,船舶均為體積龐大的沙船、貨船,航行速率偏低。本系統(tǒng)在多次測試調試如表1下得出該系統(tǒng)在640x480分辨率下的圖像清晰,幀數在25幀以上,流暢度和清晰度能滿足預期航道實時監(jiān)控的需求。
5 結束語
本文基于ffmpeg設計的航道實時視頻傳輸系統(tǒng),在整個系統(tǒng)硬件的選擇和軟件的構件上有效地滿足了可視化航標燈的項目需求,4G網絡給予本系統(tǒng)實時性保證、穩(wěn)定性,可將航道上交通信息實時視頻傳輸至數據中心,事故回溯有理有據,一次投放部署即可在服務器端通過命令遠程控制模塊的啟動、復位和需求變化。本系統(tǒng)應用潛力巨大,可滿足偏遠、惡劣環(huán)境下的遠程監(jiān)控,日后隨著嵌入式設備圖像處理、數據壓縮技術的不斷提升,ffmpeg實時視頻傳輸系統(tǒng)的應用將在各個領域發(fā)揮重要作用。
參考文獻:
[1] 王建,林楚婷.基于4G數據傳輸模塊的數據采集傳輸系統(tǒng)設計[J].工業(yè)控制計算機,2020,33(2):37,40.
[2] 遲穎.基于ARM和OpenCV的視頻監(jiān)控系統(tǒng)設計[D].大連:大連海事大學,2016.
[3] 楊培凱.無線圖像傳輸在糧蟲檢測中的應用[D].武漢:武漢輕工大學,2016.
[4] Keys R.Cubic convolution interpolation for digital image processing[J].IEEE Transactions on Acoustics,Speech,and Signal Processing,1981,29(6):1153-1160.
[5] 閆春秀.基于行車記錄儀的視頻監(jiān)控存儲策略的研究與實現[D].成都:電子科技大學,2020.
【通聯編輯:梁書】