蘆照,謝鑫剛,龍順宇,楊 偉
(海南熱帶海洋學院 海洋信息工程學院,海南 三亞 572022)
隨著嵌入式技術的發展,它逐漸被應用到更多領域,同時也融入傳統海洋漁業助力其向智慧海洋牧場轉型[1-3]。開展漁業資源的勘探以及海域環境的檢測,可以為海洋牧場合理的功能分區提供有效依據[4]。海洋牧場的后期維護和管理,對其持續良好運作有著重要作用[5]。解決海洋牧場現存“看不見”的問題,能及時了解海洋牧場海洋環境,摸清海洋資源變動趨勢,對海洋牧場生態情況進行預報預警,進而指導海洋牧場建設[6]。對海洋牧場內海洋環境的動態監測,有利于實現海洋生物的可持續、可再生利用[7]。
根據海洋牧場需求現狀,本文提出了一種海洋牧場視覺系統,系統基于嵌入式Linux平臺利用USB攝像頭采集視頻圖像,視頻數據通過ffmpeg推流到Nginx服務器,地面站拉流顯示海洋牧場視頻圖像。用千兆網橋傳輸視頻數據,保證了數據傳輸的穩定快速、低時延以及整個海洋牧場的可視化。
海洋牧場視覺系統由三部分組成,分別為視頻圖像采集端、地面站、水上視覺云臺。視頻圖像采集端由USB攝像頭和嵌入式處理器構成,通過網橋連接廣域網,視頻傳輸數據經ffmpeg軟編碼后通過RTMP協議推流到Nginx服務器來實現。地面站部分主要是在地面站上實現視頻圖像的觀看、保存和處理等,配置Nginx服務器上應用程序實現。水上視覺云臺搭載交換機將不同視頻采集節點接入網絡,并通過蓄電池給視頻采集端供電。視覺系統結構如圖1所示。

圖1 海洋牧場視覺系統框圖
V4L2框架方便用戶的開發和接口的統一,用戶只需調用這些接口開發一個公共的服務層,就可以讓所有的多媒體框架共用同一套驅動程序,有效地節省了開發時間,提高了工作效率[8]。V4L2框架如圖2所示。

圖2 V4L2框架
FLV容器格式具有封裝播放簡易、視頻文件體積小巧等特點,適合用于在網絡中進行數據傳輸,是流媒體數據傳輸封裝格式的較好選擇[9]。而HTTPFLV協議是將RTMP等負載數據信息搭載在HTTP協議上的碼流傳遞協議,穿透防火墻能力較強。
ffmpeg是一個免費的多媒體框架,提供了錄制、轉換以及流化視頻的完整解決方案,包含了非常先進的音頻/視頻編解碼庫libavcodec,視頻采集節點嵌入式平臺上運行ffmpeg進行推流。ffmpeg推流流程如圖3所示。

圖3 あmpeg推流流程
將攝像頭采集的JPEG格式圖片數據經ffmpeg編碼成H.264格式,經過復用容器格式變為FLV之后,通過HTTPFLV協議推流到Nginx流媒體服務器。
視頻推流命令為:ffmpeg -f v4l2 -i /dev/video0 -vcodec libx264 -fflv rtmp://127.0.0.1/live/lu。
Nginx是一款輕量級的Web服務器、反向代理服務器及電子郵件代理服務器,并在一個BSD-like協議下發行。其特點是占有內存少、并發能力強[10]。
使用Buildroot,配置選擇Nginx,直接編譯生成映像文件。設置交叉編譯工具鏈,下載第三方模塊后在Buildroot目錄選中Nginx并設置額外的參數,在“additional modules”中添加:$(TOPDIR)/dl/nginx/nginx-http-flv-module,最后執行make。Buildroot的dl/nginx目錄下自動下載源碼,并將編譯結果保存在output/images目錄下,最后燒寫該目錄下的boot.scr.uimg鏡像文件到嵌入式平臺的EMMC中。
配置/etc/nginx/nginx.conf 使數據圖像保存在Nginx服務器,通過user root賦予服務器Nginx處理文件權限,并配置out_queue、out_cork、max_streams和timeout等圖像存儲數據區參數。在server類中的APP代碼如下:

ffmpeg將數據流推送到Nginx流媒體服務器,單個視頻采集點的海洋牧場實時圖像存儲在對應的視頻保存路徑。
lf v.js是HTML5 FLASH視頻(FLV)播放器,使瀏覽器在不借助FLASH情況下播放FLV。 flv.js經過實際優化配置代碼如下:


配置完成后,打開測試HTML文件,使能ffmpeg推流,Web端顯示圖像。
將實測攝像頭數據編碼復用之后推流到服務器的命令如下:
ffmpeg -f v4l2 -framerate 10 -i /dev/video0 -vcodec libx264-preset:v ultrafast -tune:v zerolatency -fflv rtmp://127.0.0.1/live/lu
打開配置好的Web端從服務器通過HTTPFLV協議拉流或運行播放器通過RTMP協議拉取網絡串流,顯示圖像。
淺水層中,多個視頻采集節點從不同角度顯示人工珊瑚圖像,最終顯示效果如圖4所示。

圖4 顯示效果
在嵌入式平臺上使用ffmpeg、nginx-http- flv-module模塊和 flv.js實現了無插件Web端和播放器拉取視頻流播放海洋牧場視頻采集節點監控視頻,但是Web端視頻暫停后點擊繼續播放會出現從暫停時的場景繼續播放的情況;對于顯示視頻圖像會產生延遲的問題,應采用軟件斷流重連等算法進行進一步優化。視覺云上平臺留有接口,方便該視覺系統擴展視頻采集結點及其他功能。該視覺系統對海洋牧場的維護及管理有一定的積極作用。