基于Au1200無線車載視頻監控的設計與實現
驅動程序為上層應用提供了API接口,通過對應file_operations數據結構中的各個成員函數進行系統調用,在上層程序中,利用函數調用,讀取驅動中fileoperations的相應成員函數指針,完成對應函數功能。
在系統的CIM接口的驅動程序中做如下定義: 本文引用地址:http://www.j9360.com/article/152330.htm
其成員函數分別完成了與Au1200 CIM接口相連攝像頭設備的打開、控制、讀寫、映射以及釋放等基本功能。例如通過ioctl操作對攝像頭進行配置:
(2)庫與協議棧部分
為了支持上層應用程序的運行,軟件系統中還必須包含眾多與之相關的函數庫和協議棧。其中,主要包括了與系統運行相關的基本函數庫,與音視頻編解碼相關的音視頻編碼庫,與用戶界面相關的Qtopia庫以及各種接口協議組成的協議棧。
(3)應用層部分
視頻監控的軟件流程圖如圖4所示。啟動攝像頭后,將采集到的視頻數據映射到內存中。通過輸出控制,選擇視頻數據的流向。其中,數據處理部分主要涉及與ffmpeg相關的視頻壓縮處理。
(4)用戶控制部分
系統采用Qtopia-core-opensource-4.2.2開發用戶界面。由于采用按鍵控制的方式,需要將按鍵驅動程序添加到QT庫中。通過中斷的方式,可以捕獲按鍵信號,并通過QT中的信號與槽的機制控制信號傳輸,使得當每個按鈕被按下時,觸發用戶程序中的某個函數,并將相應的信號量傳遞出去,從而實現對整個系統的控制。
4 基于ffmpeg的軟壓縮方法
ffmpeg是一個開源免費的軟件,它提供了錄制、轉換以及流化音視頻的完整解決方案。使用ffmpeg軟壓縮的方式,不增加系統額外的硬件開銷,對采集到的視頻數據進行實時壓縮。在視頻處理應用程序的編寫過程中,需要按照ffmpeg定義的數據結構來描述視頻數據,調用ffmpeg中的各種庫函數,將攝像頭采集到的視頻數據按照設定的格式進行壓縮,并存成視頻文件,其處理流程如圖5所示。
其中包括:
(1)ffmpeg初始化:定義與視頻處理相關的數據結構AVFormatContext,AVOutputFormat,AVStream,AVCodecContext,AVCodec,AVFrame,AVPicture等,并通過av_register_all(),av_alloc_format_context()等函數初始化相應的數據結構。
(2)壓縮參數設置:主要涉及到視頻壓縮的相關參數,如幀率、視頻分辨率、編碼類型等,通過av_set_parameters()函數進行設置。
(3)圖像格式轉換和視頻數據填充:按照視頻監控要求,利用img_convert()等函數對圖像格式進行轉換,并將轉換后的視頻數據通過avpicture_fill(),fill_yuv_image()等函數填充到AVPicture數據結構中,以供編碼器使用。
(4)ffmpeg視頻編碼:利用avcodec_encode_rid-eo(),av_rescale_q()等函數,調用ffmpeg編碼庫進行視頻編碼。
(5)文件存儲操作:利用av_write_header(),av_write_frame(),av_write_trailer()等函數將壓縮后的視頻數據寫入指定文件中。
(6)采集結束:采集結束后,利用avcodec_close(),av free()等函數釋放內存資源,退出程序。
ffmpeg提供功能豐富的音視頻函數庫,包括libav-codec,libavformat,libavdevice,libavfilter,libavutil和libswscale等,可為用戶提供許多音視頻處理相關的操作。系統應用程序中調用到的ffmpeg相關函數主要依賴libavformat庫(支持所有的普通音視格式的解析器和產生器的庫)和libavcodec庫(具有高效、高可復用的音頻/視頻編解碼庫)。
5 結 語
本文介紹了基于Au1200無線車載視頻監控的設計與實現,著重介紹了基于ffmpeg軟壓縮方法對視頻數據的壓縮和存儲的實現,在實際應用中具有價值。
評論