崔營營 劉洋 劉志強



摘 要:文中針對視頻監控信號對網絡帶寬要求高,難以通過公網遠程傳輸等問題,提出了基于RTMP協議的實時視頻遠程傳輸解決方案,通過開發視頻轉換軟件將橋梁現場視頻信號轉換為RTMP碼流,并將其推流至云平臺端搭建的Nginx流媒體服務器上。客戶端通過開發Web端和安卓移動視頻播放軟件,實現了橋梁視頻監控信息的跨平臺展示應用,提升了橋梁安全的實時監管能力。
關鍵詞:RTMP協議;流媒體;Nginx服務器;Web;編碼技術;視頻監控
中圖分類號:TP206文獻標識碼:A文章編號:2095-1302(2020)11-00-03
0 引 言
近年來,隨著我國交通基礎設施建設的跨越式發展,各類跨江跨海大橋建立的健康監測系統逐漸成為保障橋梁安全的重要手段。視頻監控憑借技術成熟,監測方式直觀可靠等優點已成為橋梁健康監測系統的標配。但視頻信號相較數字類監測信號對網絡帶寬要求較高,常出現卡頓、掉幀等問題。同時考慮橋梁現場惡劣的工況及數據安全要求,導致目前只能采用高速光纖專網實現視頻信號的局域網傳輸,大大限制了網絡傳輸距離和應用范圍。
本文提出了一種基于RTMP(Real Time Messaging Protocol,RTMP)協議的視頻監控數據遠程傳輸方案,在不改變橋梁監測系統網絡架構的基礎上,實現了視頻監控信號的遠程傳輸和多平臺展示應用[1-2]。
1 編碼協議簡介
1.1 RTMP協議
RTMP協議是一種進行實時數據通信的網絡協議,主要用來在支持Flash/AIR平臺和支持RTMP協議的流媒體服務器之間進行音視頻數據通信[3-4]。
RTMP協議是建立在TCP協議之上的應用層協議,其數據包由一個固定長度的包頭和最大長度為128 B的包體組成。RTMP協議數據包格式如圖1所示。
協議包頭中MessageType為消息類型,PayloadLength為報文長度,TimeStamp為消息時間戳,StreamID為視頻流ID。協議包體主要由基本消息頭(ChunkBasicHeader)、負載消息頭(ChunkMessageHeader)、擴展時間戳(ExtendedTimeStamp)和消息塊數據(ChunkData)組成。
為保證在低網絡帶寬下視頻流的傳輸,在RTMP協議下視頻消息塊被拆分為若干個小的數據塊,各數據塊通過ChunkMessageHeader消息頭可重新組裝成完整的消息塊。數據采集端將視頻流分割成較小的數據塊后以TCP協議發送至服務器端,客戶端獲取服務器端數據塊后重新將其組裝成完整的視頻消息塊,實現視頻流的流暢播放,從而解決了低帶寬情況下的視頻延遲和卡頓問題。
1.2 H.264編碼技術
H.264是當前一種主流的視頻壓縮編碼標準。與H.261,H.263等視頻編碼標準相比,H.264協議采用DCT變換編碼加DPCM差分編碼,并融合了運動估計、多幀預測、基于內容的變長編碼等先進技術,使其編碼壓縮效率大幅提升,進而有效提升視頻質量及其網絡適應能力。
H.264協議為解決不同應用中網絡傳輸的差異問題,在架構層面定義了兩個層級。
(1)視頻編碼層(VCL):通過視頻信息的編碼,實現視頻內容的高效展示;
(2)網絡提取層(NAL):判斷當前網絡環境,并采用相應的提取算法打包和傳輸視頻數據。
H.264編碼架構如圖2所示。
2 總體技術路線
本文結合以往項目經驗,提出基于RTMP協議的視頻監控信號的遠程傳輸方案,總體技術路線如下:
(1)橋梁現場視頻攝像機將采集的原始視頻流數據通過光纖內網傳輸到監控中心的視頻處理服務器;
(2)自主開發RTMP碼流轉換軟件并將其部署在視頻處理服務器上,將橋梁現場傳輸的原始視頻信號轉換為RTMP碼流,并通過加密公網將RTMP信號推流至具有公網IP的云服務器端;
(3)在云服務器端部署并配置Nginx流媒體服務Server端,實現RTMP視頻數據的中繼轉換功能;
(4)在客戶端開發基于Web端和安卓移動端的視頻播放軟件,從Nginx服務器獲取并展示視頻信號,實現橋梁視頻監控信息的實時展示[5-6]。
RTMP視頻監控網絡架構如圖3所示。
3 關鍵技術研究
3.1 RTMP碼流轉換開發
目前主流的RTMP碼流轉換方法是采用FFmpeg將RTSP視頻信號轉換為RTMP流媒體信號,但FFmpeg存在丟包率高、多路信號傳輸支持性差等缺點。
經過多方比選驗證,本文最終采用EasyRTMP直播組件進行二次開發,該組件集成了RTMP基本協議與異步推送、環形緩沖區、網絡擁塞自動丟幀、事件回調、緩沖器、關鍵幀檢索等功能,可兼容市面上大部分RTMP流媒體服務器。
EasyRTSP直播組件具有Windows,ARM,Linux等不同跨平臺版本[7-8]。實際開發中采用C++語言引用EasyRTSPClient.dll類庫編寫視頻流接收及RTMP轉換功能,其代碼邏輯流程如圖4所示。
本模塊通過RTSPSourceCallback回調函數不斷監聽視頻數據,當監聽到數據類型為EASY_SDK_VIDEO_FRAME_FLAG時,啟動RTMP碼流轉換代碼塊,其處理核心邏輯代碼如下:
if(_mediatype== EASY_SDK_VIDEO_FRAME_FLAG)
{
pChannel->fPusherInfo.rtmpHandle= EasyRTMP_Create();
//創建RTMP句柄對象
EasyRTMP_SetCallback(pChannel->fPusherInfo.rtmpHandle,__EasyRTMP_Callback, pChannel);//設置RTMP回調函數
EasyRTMP_Connect(pChannel->fPusherInfo.rtmpHandle, pChannel->fCfgInfo.destRtmpAddr);//連接目標主機
mediaInfo.u32VideoFps=pChannel->fMediainfo.u32VideoFps;
mediaInfo.u32VideoCodec = frameinfo->codec;
mediaInfo.u32VideoFps = frameinfo->fps;
EasyRTMP_InitMetadata(pChannel->fPusherInfo.rtmpHandle, &mediaInfo, 1024);//初始化RTMP元數據
EASY_AV_Frame avFrame;
memset(&avFrame, 0, sizeof(EASY_AV_Frame));
//視頻幀大小
avFrame.u32AVFrameFlag = EASY_SDK_VIDEO_FRAME_FLAG;
avFrame.u32AVFrameLen = frameinfo->length;//視頻長度賦值
avFrame.pBuffer = (unsigned char*)pbuf;//視頻幀內容
avFrame.u32VFrameType = EASY_SDK_VIDEO_FRAME_I;
EasyRTMP_SendPacket(pChannel->fPusherInfo.rtmpHandle, &avFrame);//RTMP視頻流發送目標主機
}
按照以上代碼邏輯編寫軟件程序并封裝成后臺Windows服務,實現了多路視頻信號由RTSP協議到RTMP協議解析轉碼,并通過公網將轉換后的視頻信號推流至云端的Nginx流媒體服務器。
3.2 Nginx流媒體服務器搭建
Nginx是一種高性能的Http和反向代理服務器,通過Nginx可搭建支持RTMP協議的流媒體服務平臺,其設計難點在于如何在網絡帶寬有限的情況下盡量減少數據延遲和數據丟幀。
Nginx通過RTMP模塊提供服務,本方案采用阿里云ECS云服務器作為運行環境,操作系統為Windows Server 2012,其配置Nginx流媒體服務關鍵步驟如下:
(1)通過命令編譯并安裝Nginx依賴包gcc;
(2)下載并通過命令安裝第三方擴展模塊nginx-rtmp-module,使Nginx能夠支持RTMP和HLS協議;
(3)下載并安裝nginx_mod_h264_streaming模塊,使Nginx支持FLV和MP4流播放功能;
(4)修改nginx.conf配置文件,將nginx-rtmp-module添加到配置文件中。
核心配置信息如下:
# vim nginx.conf
rtmp {
server {
listen 1935;//監聽的端口號
application myapp {//自定義的名字
live on;
}
application hls {
live on;
hls on;
hls_path /tmp/hls;
hls_fragment 1s;
hls_playlist_length 3s;
}
}
}
# /etc/init.d/nginx reload
3.3 客戶端視頻播放開發
Nginx流媒體服務搭建完成后,客戶端可通過拉流獲取并播放視頻。本文設計Web端和安卓移動端兩種客戶端播放展示方式,如不支持HTML5則自動切換至Flash播放器。
目前主流的網絡視頻播放器架構包含UI界面、多媒體引擎和解碼器三個部分。UI界面主要實現播放界面的風格、UI組件及業務邏輯模塊控制。多媒體引擎包含媒體源管理引擎和網絡管理引擎,主要實現網絡傳輸及多媒體傳輸控制。解碼器部分包含解碼器和渲染器兩部分,為播放器的內核。網絡視頻播放器架構如圖5所示。
為實現Web端視頻播放器的去插件化,需要借助HTML5技術,通過采用Media Source Extension API接口實現基于Web的無插件式流媒體播放功能。
實際開發中,Web平臺前端視頻播放界面選擇開源類庫video.js,它能夠自動檢測瀏覽器對HTML5的支持情況,若瀏覽器不支持HTML5則自動使用Flash播放視頻,滿足系統對于多種瀏覽器的兼容性需求。Web端視頻播放界面如圖6所示。
安卓移動端采用開源視頻播放器ijkplayer,該播放器包含先進的音視頻編解碼庫libavcodec,能夠實現完整的視頻錄制、轉換以及流媒體播放等功能。安卓移動端視頻監控APP界面如圖7所示。
4 結 語
本文針對橋梁健康監測系統采集的視頻監控信號對網絡帶寬要求高,難以通過公網遠距離傳輸的問題,提出了基于RTMP協議的視頻遠程傳輸方案。
橋梁現場通過開發并部署基于RTMP協議的碼流轉換軟件,將原始視頻信號轉換為RTMP碼流并推送至云服務器端。
云服務器端通過搭建Nginx流媒體服務接收轉換橋梁現場推送的RTMP碼流,并為客戶端提供拉流服務,同時還具有緩存中繼和公網轉發功能。
實際應用中采用Web網頁端和安卓端兩種方式獲取并展示視頻監控信息,實現了橋梁視頻監控信號的跨平臺展示應用,大大提升了橋梁安全的實時監管能力。
參考文獻
[1]王艷.Android系統中RTMP流媒體直播的設計與實現[J]. 電視技術,2017,41(1):64-67.
[2]張印.基于RTMP協議的流媒體系統的設計實現[D]. 成都:電子科技大學,2016.
[3]吳楊.基于RTMP協議的實時視頻監控系統的設計與實現[D].杭州:浙江工業大學,2017.
[4]吳楊.基于SIP、RTP/RTCP和RTSP協議的視頻監控系統[J].計算機與現代化,2013,29(11):139-142.
[5]隗超,張偉,石瀾.基于Nginx負載均衡及多線程智慧農業系統的設計[J].物聯網技術,2017,7(4):110-111.
[6]葉鋒,傅燕云,陳林芳,等. 基于多協議融合的實時移動視頻監控系統[J].計算機系統應用,2015,25(4):80-85.
[7]孫曉波,王榮浩,季新年,等.基于Web視頻監控系統的設計方案[J].電腦編程技巧與維護,2011,18(2):61-62.
[8]方旭昌.基于H.264的無線視頻采集系統[D].杭州:杭州電子科技大學,2013.
[9]馬丹丹.基于RTMP協議的視頻流媒體服務器部分關鍵技術研究與實現[D].南京:南京航空航天大學,2012.
[10]許磊.基于RTMP協議的智能監控系統的設計與實現[D].廣州:廣東工業大學,2017.