第33卷 第11期
2011年11月
武 漢 理 工 大 學 學 報
JOURNALOF WUHANUNIVERSITYOFTECHNOLOGY Vol.33 No.11
??????????????????????????????????????????????????
Nov.2011
DOI:10.3963/j.issn.1671-4431.2011.11.029
基于FFMPEG 的跨平臺視頻編解碼研究
胡 聰1,周 甜1,唐璐丹2
(1.桂林電子科技大學電子工程與自動化學院,桂林541004;2.桂林電子科技大學信息科技學院,桂林541004)
摘 要: 針對視頻監控提出了視頻編解碼器的軟件實現。監控客戶端采用S3C2440作為嵌入式硬件平臺,并通過
CMOS攝像頭OV9650采集視頻,經過FFMPEG編碼傳輸給監控服務器端。監控服務器端接收到視頻流后通過FFMPEG
實時解碼播放,實現遠程監控。實驗結果表明,系統達到了監控客戶端的視頻采集、編碼,監控服務器端解碼和播
放。
關鍵詞: FFMPEG; 編解碼; 嵌入式; 視頻; OV9650
中圖分類號: TP391 文獻標識碼: A 文章編號:1671-4431(2011)11-0139-04
ResearchonCross-platform VideoCodecBasedonFFMPEG
HUCong1,ZHOUTian1,TANGLu-dan2
(1.CollegeofElectronicEngineeringandAutomation,GuilinUniversityofElectronicTechnology,
Guilin541004,China;2.InstituteofInformationandTechnology,GuilinUniversityof
ElectronicTechnology,Guilin541004,China)
Abstract: Asoftwareimplementationofvideocodecforvideomonitoringispresented.MonitorclientusedS3C2440
asembeddedhardwareplatform,acquiredvideowithOV9650ofCMOScamera,transmittedtothemonitoringserver
withFFMPEGcoding.Monitorserverreceivedvideostream,decodedandplayingreal-timebyFFMPEG,realizedremotemonitoring.
Theexperimentalresultsshowthatthesystemachievesthemonitorclientvideoacquisition,encoding,
andmonitorserverdecodingandplaying.
Keywords: FFMPEG; codec; embeddedsystem; video; OV9650
收稿日期:2011-09-17. 基金項目:國家自然科學基金(61172053). 作者簡介:胡 聰(1981-),男,碩士,講師.E-mail:hucong@guet.edu.cn
隨著經濟的發展,銀行、交通、家居、倉儲、國防等領域對安全防范、現場記錄、報警系統的需求越來越大,
要求越來越高。視頻監控系統主要具備遠程現場的圖像采集、處理、傳輸、實時顯示及視頻存儲等功能。它
以監控目標實時性強、適于遠距離傳輸、能提供直接有效的現場證據等突出優點,已在諸多領域成為人們不
可或缺的工具[1]。考慮到視頻監控系統必須需要對視頻信號進行編碼解碼,討論了一種基于FFMPEG 的
視頻監控系統的編解碼研究。
1 FFMPEG 簡介
FFMPEG是一個集錄制、轉換、音/視頻編解碼功能為一體的、完整的開源解決方案。FFMPEG 的開發
基于Linux操作系統,也可在大多數操作系統中編譯和使用。FFMPEG 支持MPEG、DivX、MPEG4、AC3、
DV、FLV 等40多種編碼,AVI、MPEG、OGG、ASF等90多種解碼[2]。
2 系統方案
系統采用C/S設計模式來實現客戶端與服務器端的交互,由服務器端向客戶端發出監聽請求,客戶端
驗證并進行連接。連接成功后,客戶端監測點啟動攝
像頭進行視頻數據采集,采集的視頻數據是原始數據
rgb565(.rgb16)格式,經格式轉換后,再經過FFMPEG
壓縮成H.263格式視頻,經通信網絡傳輸到服
務器端計算機中;監控服務器端接收視頻數據后,經
FFMPEG解碼后,通過VFW(VideoforWindows)顯
示在服務器端界面上。視頻發送端采用SAMSUNG
公司的具有ARM9內核的S3C2440作為嵌入式微控
制器,服務器端采用普通PC機。系統方案如圖1所
示。
3 客戶端
客戶端的主要工作首先是搭建嵌入式Linux平臺,然后是搭建交叉編譯環境,做完這些準備工作后,就
是開發攝像頭驅動程序,并通過操作攝像頭采集圖像并經FFMPEG 壓縮,監聽服務器端的請求后發送給服
務器端。
3.1 建立嵌入式Linux平臺
建立嵌入式Linux平臺主要有以下步驟:
1)使用H-JTAG快速燒寫BIOS到開發板。2)格式化NandFlash。3)安裝bootloader。4)安裝內核文
件。5)安裝文件系統[3]。
3.2 搭建交叉編譯環境
在Linux平臺下,要編譯內核、bootloader,還有其他一些應用程序,均需要交叉編譯工具鏈。使用armlinux-
gcc4.3.2[3]。
3.3 攝像頭驅動配置
OV9650是OmniVision公司生產的一系列CMOS攝像頭中的一種,在接口上能夠保持與S3C2440的
一致性。輸出圖像最大為130萬像素,輸出圖像格式包括SXGA,VGA,QVGA,CIF,QCIF等,并提供加窗
功能以輸出不同尺寸的圖像。對于不同的輸出圖像格式,輸出最高幀率可不同,最高可達120f/s。輸出的8
位數據格式包括YUV/YCbCr(4∶2∶2)、GRB(4∶2∶2)、原始RGB數據3種[4]。
OV9650圖像傳感器在Linux中作為字符設備來描述,其驅動程序提供給應用程序一個流控制接口。
用戶進程通過設備文件與硬件打交道,對設備文件的操作本質是一些系統調用。若要將系統調用和設備驅
動程序關聯起來,須用到structfile_operations這個關鍵數據結構。因此,編寫設備驅動的主要工作就是編
寫數據結構中定義的子函數,并填充file_operation的各個域。
在開發階段用makemodules命令將驅動程序編譯成模塊OV9650_2440.ko,用insmod命令來加載驅
動,可避免反復編譯燒寫內核[5]。驅動模塊編譯加載后,便可像操作普通文件一樣對攝像頭進行數據讀取操
作[6]。在開發完成階段中,可以把驅動程序編譯進內核,以免每次都手動加載驅動。
加載了驅動程序后,像操作普通文件一樣操作攝像頭。如:定義intm filev4l2,通過m filev4l2 =
open(“/dev/camera”,O RDWR)打開攝像頭,通過read(fd,&in rgb565,D SIZE)讀取攝像頭的視頻
數據到數組in rgb565中,通過close(m filev4l2)[7]。有了視頻數據后,就可以通過FFMPEG進行編碼。
3.4 FFMPEG 編碼
用FFMPEG編碼時,首先對FFMPEG庫初始化,注冊所有的編解碼器,配置編碼器、碼率、幀速率、編
碼像素格式和分辨率等,然后開始編碼。通過設置結構體AVOutputFormat的成員video codec的值設置
編碼器,如:aofmt->video codec= CODEC ID H263設置H.263編碼;通過設置結構體AVCodecContext
的成員pix fmt的值設置待編碼的數據像素格式,如acc->pix fmt= PIX FMT YUV420P設置
YUV420像素格式;通過設置acc->bit rate,acc->width,acc->height等可以設置碼率,寬度和高度等。
編碼的核心函數是avcodec encode video。系統每采集一幀數據,就送給avcodec encode video函數進
行編碼成H.263視頻流。其編碼流程如圖2所示。
根據系統的要求,傳輸的視頻流為H.263格式。
采集數據中,OV9560輸出的是rgb565(.rgb16)格式,
首先需要轉換成rgb888(.rgb24)格式,然后再轉換成
yuv420(.i420)格式,然后再由FFMPEG 進行壓縮編
碼成H.263視頻格式。其中RGB與YUV 的轉換公
式如公式(1)[8]
Y =0.257R +0.504G +0.098B +16
U =-0.148R -0.291G +0.439B +128
V =0.439R -0.368G -0.071B +128
(1)
4 服務器端
服務器端的主要工作是監控所有客戶端,按照需
要服務器端可以任意連接某個監控客戶端。連接后接收數據,經過FFMPEG解碼后顯示在服務器端。
用FFMPEG 解碼時,首先對FFMPEG 庫初始
化,注冊所有的編解碼器,配置解碼器和解碼像素格式
等,然后開始解碼。通過設置結構體AVCodec內容
設置待解碼數據流格式,如:AVCodec*codec= avcodec
find decoder(CODEC ID H263)設置待解
碼數據流格式為H.263;通過設置結構體AVPicture
的值設置解碼像素格式,如:avpicture fill((AVPicture
*)pFrameYUV,out buffer,PIX FMT
YUV420P,D Width,D Height)設計解碼像素格
式為YUV420。解碼的核心函數是avcodec decode
video。其解碼流程如圖3所示。
4.1 服務器端解碼
由于解碼的是H.263視頻流,因為不知道要解碼的數據流長度,跟文件解碼操作不一樣[9]。在本設計
中,專門為解碼器開辟了一個線程負責解碼,同時也開辟了一個FIFO 隊列進行數據的緩沖。解碼時,接收
的數據不停地進入FIFO 隊列,然后從頭取固定的字節數進行解碼。而且由于解碼時解出的幀是完整的幀,
這就會出現解碼后還會剩余不完整的幀字節,這些字節需要重新和后面的視頻數據流拼接重新解碼[10-11]。
用FFMPEG對H.263解碼出來格式是YUV(.i420)格式,需要轉換成RGB(.rgb24)格式顯示。
4.2 服務器端顯示
顯示視頻采用的是VFW(VideoforWindows)。顯示的核心函數是DrawDibDraw 函數。DrawDib-
Draw 畫圖針對的是DIB圖像,是一種BMP(Bitmap)圖像。DrawDibDraw函數有13個參數,最重要的參數
是第7個和第8個參數,第7個參數是填入位圖的頭信息,第8個參數填入的是RGB(.rgb24)圖像數
據[12-13]。
由于用DrawDibDraw畫圖時,圖像上下顛倒,在采用DrawDibDraw 進行畫圖前,將rgbdata指向的緩
存中的圖像數據進行行的顛倒操作,首先得知道圖像的寬度,假如為Width,然后Width*3就是一行的字節
數,接著第一行的數據和最后一行的數據交換,第二行的和倒數第二行的數據進行交換,依次類推。
5 質量效果控制
系統在中國移動3G 通信環境
下進行實驗,通道的數據流需設置
為H.263編碼格式數據流,分辨率
需設為QCIF(176*144),幀率、關
表1 碼率
時間點1 2 3 4 5 6 7 8 9
碼率/(b·s-1)5914 5728 5968 3155 3227 3502 3557 2919 3000
鍵幀比例由實際情況可以自由設置,碼率由實際情況拍攝的視頻決定,由于傳輸通道帶寬為48kb/s,所以碼
率不能超過48kb/s。當設置關鍵幀比例為1/6時,幀率為6f/s時,實際測得碼率如表1所示。
如果想畫面流暢些,可以增大幀率,如果想增強視頻的對移動物體的顯示效果,可以增大關鍵幀比例,但
不能超過系統傳輸的帶寬[14]。
6 壓縮率
壓縮編碼采用H.263壓縮編
碼,采用關鍵幀比例為1/6時,實測
壓縮率表格如表2所示。
壓縮率與關鍵幀比例、實際視
表2 壓縮率
時間點1 2 3 4 5 6 7 8 9
壓縮率/% 2.59 2.51 2.61 1.38 1.41 1.53 1.55 1.27 1.31
頻及運動等有關,關鍵幀比例越低、視頻像素相似度越高、運動量越小,壓縮率越高[15]。
7 結 語
隨著視頻壓縮技術的日益成熟,嵌入式視頻監控成為當今視頻監控的主流。采用ARM9 內核的
S3C2440為嵌入式硬件平臺,通過攝像頭采集數據,在嵌入式Linux與Windows操作系統相結合的跨平臺
上,實現FFMPEG的編解碼,對實際嵌入式視頻監控系統的設計開發,具有重要意義和實用價值[16]。
參考文獻
[1] 楊曉健.基于ARM9的嵌入式視頻采集系統設計[J].西安工程大學學報,2010,24(2):208-212.
[2] 蔣志峰.FFMPEG的快速音視頻開發方法[J].單片機與嵌入式系統應用,2008(1):69-71.
[3] 師娟娟.基于ARM9的嵌入式Linux移植[J].武漢理工大學學報,2008,30(2):205-208.
[4] 楊海山,何東健.基于ARM 和Linux的視頻采集系統研究與開發[J].微計算機信息,2009,25(11-2):122-124.
[5] 闕大順,杜 瑋.Vivi在S3C2410上的移植研究[J].武漢理工大學學報,2007,29(12):47-50.
[6] 熊平華,楊建剛.IP可視電話視頻會議系統設計與實現[J].計算機工程與設計,2004(4):619-621.
[7] 馮國進.嵌入式Linux驅動程序設計從入門到精通[M].北京:清華大學出版社,2008:102-146.
[8] 馮永超,羅 敏,賀貴明.一種快速YUV RGB彩色空間變換方法[J].微型機與應用,2002(7):59-60.
[9] 詹慧靜.MPEG-4編碼特性剖析及應用研究[J].武漢理工大學學報,2005,27(6):103-106.
[10]呂 雪.基于網絡多媒體的流媒體技術[J].武漢理工大學學報,2005,27(12):121-125.
[11]黎燕霞,李 揚,劉奕宏,等.基于S3C2440的視頻采集驅動設計[J].儀器儀表用戶,2009,16(3):98-99.
[12]查 婧,劉 波,曹劍中.嵌入式視頻采集與網絡傳輸系統[J].電子器件,2009,32(3):646-648.
[13]余兆明,李曉飛,陳春來.MPEG-4標準及其應用[M].北京:北京郵電大學出版社,2002.
[14]曹少坤.一種嵌入式網絡攝像機的設計[J].微計算機應用,2008,29(10):69-73.
[15]張學武,楊學星,江 冰.基于H.263 的視頻編碼、解碼的研究及軟件實現[J].計算機工程與設計,2005,26(9):
2491-2493.
[16]鄭旭東,張培仁,高修峰,等.嵌入式網絡視頻監控系統[J].儀表技術與傳感器,2006(08):24-26.
2011年11月
武 漢 理 工 大 學 學 報
JOURNALOF WUHANUNIVERSITYOFTECHNOLOGY Vol.33 No.11
??????????????????????????????????????????????????
Nov.2011
DOI:10.3963/j.issn.1671-4431.2011.11.029
基于FFMPEG 的跨平臺視頻編解碼研究
胡 聰1,周 甜1,唐璐丹2
(1.桂林電子科技大學電子工程與自動化學院,桂林541004;2.桂林電子科技大學信息科技學院,桂林541004)
摘 要: 針對視頻監控提出了視頻編解碼器的軟件實現。監控客戶端采用S3C2440作為嵌入式硬件平臺,并通過
CMOS攝像頭OV9650采集視頻,經過FFMPEG編碼傳輸給監控服務器端。監控服務器端接收到視頻流后通過FFMPEG
實時解碼播放,實現遠程監控。實驗結果表明,系統達到了監控客戶端的視頻采集、編碼,監控服務器端解碼和播
放。
關鍵詞: FFMPEG; 編解碼; 嵌入式; 視頻; OV9650
中圖分類號: TP391 文獻標識碼: A 文章編號:1671-4431(2011)11-0139-04
ResearchonCross-platform VideoCodecBasedonFFMPEG
HUCong1,ZHOUTian1,TANGLu-dan2
(1.CollegeofElectronicEngineeringandAutomation,GuilinUniversityofElectronicTechnology,
Guilin541004,China;2.InstituteofInformationandTechnology,GuilinUniversityof
ElectronicTechnology,Guilin541004,China)
Abstract: Asoftwareimplementationofvideocodecforvideomonitoringispresented.MonitorclientusedS3C2440
asembeddedhardwareplatform,acquiredvideowithOV9650ofCMOScamera,transmittedtothemonitoringserver
withFFMPEGcoding.Monitorserverreceivedvideostream,decodedandplayingreal-timebyFFMPEG,realizedremotemonitoring.
Theexperimentalresultsshowthatthesystemachievesthemonitorclientvideoacquisition,encoding,
andmonitorserverdecodingandplaying.
Keywords: FFMPEG; codec; embeddedsystem; video; OV9650
收稿日期:2011-09-17. 基金項目:國家自然科學基金(61172053). 作者簡介:胡 聰(1981-),男,碩士,講師.E-mail:hucong@guet.edu.cn
隨著經濟的發展,銀行、交通、家居、倉儲、國防等領域對安全防范、現場記錄、報警系統的需求越來越大,
要求越來越高。視頻監控系統主要具備遠程現場的圖像采集、處理、傳輸、實時顯示及視頻存儲等功能。它
以監控目標實時性強、適于遠距離傳輸、能提供直接有效的現場證據等突出優點,已在諸多領域成為人們不
可或缺的工具[1]。考慮到視頻監控系統必須需要對視頻信號進行編碼解碼,討論了一種基于FFMPEG 的
視頻監控系統的編解碼研究。
1 FFMPEG 簡介
FFMPEG是一個集錄制、轉換、音/視頻編解碼功能為一體的、完整的開源解決方案。FFMPEG 的開發
基于Linux操作系統,也可在大多數操作系統中編譯和使用。FFMPEG 支持MPEG、DivX、MPEG4、AC3、
DV、FLV 等40多種編碼,AVI、MPEG、OGG、ASF等90多種解碼[2]。
2 系統方案
系統采用C/S設計模式來實現客戶端與服務器端的交互,由服務器端向客戶端發出監聽請求,客戶端
驗證并進行連接。連接成功后,客戶端監測點啟動攝
像頭進行視頻數據采集,采集的視頻數據是原始數據
rgb565(.rgb16)格式,經格式轉換后,再經過FFMPEG
壓縮成H.263格式視頻,經通信網絡傳輸到服
務器端計算機中;監控服務器端接收視頻數據后,經
FFMPEG解碼后,通過VFW(VideoforWindows)顯
示在服務器端界面上。視頻發送端采用SAMSUNG
公司的具有ARM9內核的S3C2440作為嵌入式微控
制器,服務器端采用普通PC機。系統方案如圖1所
示。
3 客戶端
客戶端的主要工作首先是搭建嵌入式Linux平臺,然后是搭建交叉編譯環境,做完這些準備工作后,就
是開發攝像頭驅動程序,并通過操作攝像頭采集圖像并經FFMPEG 壓縮,監聽服務器端的請求后發送給服
務器端。
3.1 建立嵌入式Linux平臺
建立嵌入式Linux平臺主要有以下步驟:
1)使用H-JTAG快速燒寫BIOS到開發板。2)格式化NandFlash。3)安裝bootloader。4)安裝內核文
件。5)安裝文件系統[3]。
3.2 搭建交叉編譯環境
在Linux平臺下,要編譯內核、bootloader,還有其他一些應用程序,均需要交叉編譯工具鏈。使用armlinux-
gcc4.3.2[3]。
3.3 攝像頭驅動配置
OV9650是OmniVision公司生產的一系列CMOS攝像頭中的一種,在接口上能夠保持與S3C2440的
一致性。輸出圖像最大為130萬像素,輸出圖像格式包括SXGA,VGA,QVGA,CIF,QCIF等,并提供加窗
功能以輸出不同尺寸的圖像。對于不同的輸出圖像格式,輸出最高幀率可不同,最高可達120f/s。輸出的8
位數據格式包括YUV/YCbCr(4∶2∶2)、GRB(4∶2∶2)、原始RGB數據3種[4]。
OV9650圖像傳感器在Linux中作為字符設備來描述,其驅動程序提供給應用程序一個流控制接口。
用戶進程通過設備文件與硬件打交道,對設備文件的操作本質是一些系統調用。若要將系統調用和設備驅
動程序關聯起來,須用到structfile_operations這個關鍵數據結構。因此,編寫設備驅動的主要工作就是編
寫數據結構中定義的子函數,并填充file_operation的各個域。
在開發階段用makemodules命令將驅動程序編譯成模塊OV9650_2440.ko,用insmod命令來加載驅
動,可避免反復編譯燒寫內核[5]。驅動模塊編譯加載后,便可像操作普通文件一樣對攝像頭進行數據讀取操
作[6]。在開發完成階段中,可以把驅動程序編譯進內核,以免每次都手動加載驅動。
加載了驅動程序后,像操作普通文件一樣操作攝像頭。如:定義intm filev4l2,通過m filev4l2 =
open(“/dev/camera”,O RDWR)打開攝像頭,通過read(fd,&in rgb565,D SIZE)讀取攝像頭的視頻
數據到數組in rgb565中,通過close(m filev4l2)[7]。有了視頻數據后,就可以通過FFMPEG進行編碼。
3.4 FFMPEG 編碼
用FFMPEG編碼時,首先對FFMPEG庫初始化,注冊所有的編解碼器,配置編碼器、碼率、幀速率、編
碼像素格式和分辨率等,然后開始編碼。通過設置結構體AVOutputFormat的成員video codec的值設置
編碼器,如:aofmt->video codec= CODEC ID H263設置H.263編碼;通過設置結構體AVCodecContext
的成員pix fmt的值設置待編碼的數據像素格式,如acc->pix fmt= PIX FMT YUV420P設置
YUV420像素格式;通過設置acc->bit rate,acc->width,acc->height等可以設置碼率,寬度和高度等。
編碼的核心函數是avcodec encode video。系統每采集一幀數據,就送給avcodec encode video函數進
行編碼成H.263視頻流。其編碼流程如圖2所示。
根據系統的要求,傳輸的視頻流為H.263格式。
采集數據中,OV9560輸出的是rgb565(.rgb16)格式,
首先需要轉換成rgb888(.rgb24)格式,然后再轉換成
yuv420(.i420)格式,然后再由FFMPEG 進行壓縮編
碼成H.263視頻格式。其中RGB與YUV 的轉換公
式如公式(1)[8]
Y =0.257R +0.504G +0.098B +16
U =-0.148R -0.291G +0.439B +128
V =0.439R -0.368G -0.071B +128
(1)
4 服務器端
服務器端的主要工作是監控所有客戶端,按照需
要服務器端可以任意連接某個監控客戶端。連接后接收數據,經過FFMPEG解碼后顯示在服務器端。
用FFMPEG 解碼時,首先對FFMPEG 庫初始
化,注冊所有的編解碼器,配置解碼器和解碼像素格式
等,然后開始解碼。通過設置結構體AVCodec內容
設置待解碼數據流格式,如:AVCodec*codec= avcodec
find decoder(CODEC ID H263)設置待解
碼數據流格式為H.263;通過設置結構體AVPicture
的值設置解碼像素格式,如:avpicture fill((AVPicture
*)pFrameYUV,out buffer,PIX FMT
YUV420P,D Width,D Height)設計解碼像素格
式為YUV420。解碼的核心函數是avcodec decode
video。其解碼流程如圖3所示。
4.1 服務器端解碼
由于解碼的是H.263視頻流,因為不知道要解碼的數據流長度,跟文件解碼操作不一樣[9]。在本設計
中,專門為解碼器開辟了一個線程負責解碼,同時也開辟了一個FIFO 隊列進行數據的緩沖。解碼時,接收
的數據不停地進入FIFO 隊列,然后從頭取固定的字節數進行解碼。而且由于解碼時解出的幀是完整的幀,
這就會出現解碼后還會剩余不完整的幀字節,這些字節需要重新和后面的視頻數據流拼接重新解碼[10-11]。
用FFMPEG對H.263解碼出來格式是YUV(.i420)格式,需要轉換成RGB(.rgb24)格式顯示。
4.2 服務器端顯示
顯示視頻采用的是VFW(VideoforWindows)。顯示的核心函數是DrawDibDraw 函數。DrawDib-
Draw 畫圖針對的是DIB圖像,是一種BMP(Bitmap)圖像。DrawDibDraw函數有13個參數,最重要的參數
是第7個和第8個參數,第7個參數是填入位圖的頭信息,第8個參數填入的是RGB(.rgb24)圖像數
據[12-13]。
由于用DrawDibDraw畫圖時,圖像上下顛倒,在采用DrawDibDraw 進行畫圖前,將rgbdata指向的緩
存中的圖像數據進行行的顛倒操作,首先得知道圖像的寬度,假如為Width,然后Width*3就是一行的字節
數,接著第一行的數據和最后一行的數據交換,第二行的和倒數第二行的數據進行交換,依次類推。
5 質量效果控制
系統在中國移動3G 通信環境
下進行實驗,通道的數據流需設置
為H.263編碼格式數據流,分辨率
需設為QCIF(176*144),幀率、關
表1 碼率
時間點1 2 3 4 5 6 7 8 9
碼率/(b·s-1)5914 5728 5968 3155 3227 3502 3557 2919 3000
鍵幀比例由實際情況可以自由設置,碼率由實際情況拍攝的視頻決定,由于傳輸通道帶寬為48kb/s,所以碼
率不能超過48kb/s。當設置關鍵幀比例為1/6時,幀率為6f/s時,實際測得碼率如表1所示。
如果想畫面流暢些,可以增大幀率,如果想增強視頻的對移動物體的顯示效果,可以增大關鍵幀比例,但
不能超過系統傳輸的帶寬[14]。
6 壓縮率
壓縮編碼采用H.263壓縮編
碼,采用關鍵幀比例為1/6時,實測
壓縮率表格如表2所示。
壓縮率與關鍵幀比例、實際視
表2 壓縮率
時間點1 2 3 4 5 6 7 8 9
壓縮率/% 2.59 2.51 2.61 1.38 1.41 1.53 1.55 1.27 1.31
頻及運動等有關,關鍵幀比例越低、視頻像素相似度越高、運動量越小,壓縮率越高[15]。
7 結 語
隨著視頻壓縮技術的日益成熟,嵌入式視頻監控成為當今視頻監控的主流。采用ARM9 內核的
S3C2440為嵌入式硬件平臺,通過攝像頭采集數據,在嵌入式Linux與Windows操作系統相結合的跨平臺
上,實現FFMPEG的編解碼,對實際嵌入式視頻監控系統的設計開發,具有重要意義和實用價值[16]。
參考文獻
[1] 楊曉健.基于ARM9的嵌入式視頻采集系統設計[J].西安工程大學學報,2010,24(2):208-212.
[2] 蔣志峰.FFMPEG的快速音視頻開發方法[J].單片機與嵌入式系統應用,2008(1):69-71.
[3] 師娟娟.基于ARM9的嵌入式Linux移植[J].武漢理工大學學報,2008,30(2):205-208.
[4] 楊海山,何東健.基于ARM 和Linux的視頻采集系統研究與開發[J].微計算機信息,2009,25(11-2):122-124.
[5] 闕大順,杜 瑋.Vivi在S3C2410上的移植研究[J].武漢理工大學學報,2007,29(12):47-50.
[6] 熊平華,楊建剛.IP可視電話視頻會議系統設計與實現[J].計算機工程與設計,2004(4):619-621.
[7] 馮國進.嵌入式Linux驅動程序設計從入門到精通[M].北京:清華大學出版社,2008:102-146.
[8] 馮永超,羅 敏,賀貴明.一種快速YUV RGB彩色空間變換方法[J].微型機與應用,2002(7):59-60.
[9] 詹慧靜.MPEG-4編碼特性剖析及應用研究[J].武漢理工大學學報,2005,27(6):103-106.
[10]呂 雪.基于網絡多媒體的流媒體技術[J].武漢理工大學學報,2005,27(12):121-125.
[11]黎燕霞,李 揚,劉奕宏,等.基于S3C2440的視頻采集驅動設計[J].儀器儀表用戶,2009,16(3):98-99.
[12]查 婧,劉 波,曹劍中.嵌入式視頻采集與網絡傳輸系統[J].電子器件,2009,32(3):646-648.
[13]余兆明,李曉飛,陳春來.MPEG-4標準及其應用[M].北京:北京郵電大學出版社,2002.
[14]曹少坤.一種嵌入式網絡攝像機的設計[J].微計算機應用,2008,29(10):69-73.
[15]張學武,楊學星,江 冰.基于H.263 的視頻編碼、解碼的研究及軟件實現[J].計算機工程與設計,2005,26(9):
2491-2493.
[16]鄭旭東,張培仁,高修峰,等.嵌入式網絡視頻監控系統[J].儀表技術與傳感器,2006(08):24-26.