一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

H.264嵌入式視頻監(jiān)控系統(tǒng)項目指導

 lchjczw 2012-11-26

硬件:MINI2440                      軟件:Linux-2.6.32


一、H.264介紹

       H.264是一種視頻壓縮編碼標準。該標準能夠在較低帶寬(2M以內)情況下提供高質量的圖像傳輸。據(jù)數(shù)據(jù)分析,在同等畫質下,H.264比上一代編碼標準MPEG2平均節(jié)約64%的傳輸碼流,而比MPEG4要平均節(jié)約39%的傳輸碼流。


二、H.264視頻監(jiān)控系統(tǒng)架構

       架構圖如下


注意,攝像頭最好采用網(wǎng)眼2000這款老攝像頭,這款攝像頭已經(jīng)停產(chǎn),很難找。我買了一個最新款的攝像頭,最終由于采集的圖像包數(shù)據(jù)過大,無法用UDP傳輸導致失敗,因為UDP一次最多傳送2K以內的包,否則會造成丟包,導致客戶端收到數(shù)據(jù)顯示為一片綠色。


三、視頻數(shù)據(jù)采集接口V4L2

首先我們要解決的第一個問題當然是如何采集到攝像頭的數(shù)據(jù)。要操作攝像頭就要和攝像頭驅動打交道,幸運的是現(xiàn)在的Linux內核已經(jīng)集成了大多數(shù)的攝像頭驅動。所以這點不需要我們關心,如果Linux內核沒有集成就只有自己移植咯。

V4L2全稱Video for Linux two,它是Linux提供的一套標準的API,應用程序通過一套API來調用音視頻設備驅動操作音視頻設備。這一套API屏蔽了音視頻的硬件細節(jié),提供了一個通用接口給應用程序。V4L2具體在Linux上以IOCTL系統(tǒng)調用提供給用戶,通過IOTCL寫入不同的命令實現(xiàn)音視頻設備的不同操作。

具體操作流程如下:


首先打開視頻設備,然后獲取設備和圖像的信息,如最大最小分辨率等,然后獲得攝像頭存儲緩沖區(qū)的信息并且進行內存映射,再然后對攝像頭進行一些必要的設置,如獲取一幀圖像的大小,圖像的格式(RGB、YUV等等),然后啟動采集。下面是一些常用的V4L2命令:

1 VIDIOC_REQBUFS:分配內存

2 VIDIOC_QUERYBUF:把VIDIOC_REQBUFS中分配的數(shù)據(jù)緩存轉換成物理地址

3 VIDIOC_QUERYCAP:查詢驅動功能

4 VIDIOC_ENUM_FMT:獲取當前驅動支持的視頻格式

5 VIDIOC_S_FMT:設置當前驅動的頻捕獲格式

6 VIDIOC_G_FMT:讀取當前驅動的頻捕獲格式

7 VIDIOC_TRY_FMT:驗證當前驅動的顯示格式

8 VIDIOC_CROPCAP:查詢驅動的修剪能力

9 VIDIOC_S_CROP:設置視頻信號的邊框

10 VIDIOC_G_CROP:讀取視頻信號的邊框

11 VIDIOC_QBUF:把數(shù)據(jù)從緩存中讀取出來

12 VIDIOC_DQBUF:把數(shù)據(jù)放回緩存隊列

13 VIDIOC_STREAMON:開始視頻顯示函數(shù)

14 VIDIOC_STREAMOFF:結束視頻顯示函數(shù)

15 VIDIOC_QUERYSTD:檢查當前視頻設備支持的標準,例如PAL或NTSC。

具體操作參考這篇文章:http://blog.csdn.net/seven407/article/details/6401792#comments


四、H.264編碼庫的操作

       通過V4L2接口我們采集到了一幀一幀的視頻數(shù)據(jù),然后我們的第二個問題是如何將內存中的幀數(shù)據(jù)進行H.264標準壓縮了。H.264是一套標準,有很多組織對其進行的代碼編寫和實現(xiàn),我用的是T264編碼庫,它是國內視頻編碼自由組織合力開發(fā)的。它遵循H.264視頻編碼標準,并吸收了JM,X264和Xvid三個源碼的優(yōu)點。在Linux下完成壓縮編碼。大家可以去下載T264的源碼,然后進行編譯,然后在T264/avr文件夾下會生成一些列*.obj文件,應用程序可以直接使用這些目標文件提供的功能函數(shù)對YUV格式視頻進行編碼。其流程如下圖所示


       首先init_param函數(shù)讀取配置文件的一些編碼配置信息,包括圖像幀大小,1幀間距,參考幀數(shù)目等。T264的源碼庫中有配置參考文件enconfig.txt,一般需要改變的參數(shù)只有是圖像幀大小的配置。然后t264_open調用init_param讀取的配置信息讀264編碼器進行初始化。再然后調用T264_malloc為編碼器分配空間用于存儲編碼后的幀數(shù)據(jù)。最后再調用T264_encode開始編碼,該函數(shù)的參數(shù)包括上一部分V4L2操作中為視頻數(shù)據(jù)映射的內存地址,且該函數(shù)會返回編碼后一幀數(shù)據(jù)大小。這樣視頻數(shù)據(jù)就被壓縮放到為T264分配的內存空間中了。當不需要編碼的時候調用T264_close關閉編碼器。

五、基于UDP方式的視頻實時傳輸

       當我們得到H.264編碼標準壓縮好的數(shù)據(jù)的時候我們需要發(fā)送到windows客戶端,那下面一個問題便是如何與windows通信和傳輸視頻數(shù)據(jù)。如何接觸到網(wǎng)絡編程應該都知道如何通過socket方式進行UDP數(shù)據(jù)傳送。注意如果壓縮后的數(shù)據(jù)包過大便無法通過UDP傳輸了,因為windows應用程序我沒時間去寫,是采用別人現(xiàn)成的,所以無奈只有用UDP方式了,如果你能寫windows應用程序可以考慮采用TCP方式,然后攝像頭就不局限于網(wǎng)眼2000了。下面是UDP傳輸方式流程:

UDP我就不多廢話了,學過網(wǎng)絡編程的都知道。


六、程序主流程圖


七、結語

       之所以去做這個項目是因為聽了國嵌的項目視頻,聽了視頻也沒理出個思路來,后來查閱了很多資料才知道了大體思路。后來我查到一篇文章是桂林電子科大的碩士論文,將這個項目講的很詳細,也測試很多數(shù)據(jù),同時說了windows應用程序的編寫。我想這個項目的作者應該是來自此人吧,國嵌給的windows應用程序和文章上貼圖的一樣,沒給源碼,且還有BUG也沒修復,后來我將此文章往國嵌的交流群一上傳便被踢出了。不管這么多了,反正跟我無關。我給大家提供下載:http://download.csdn.net/detail/ayangke/3969255

       此文只給了大體上的實現(xiàn)思路,具體實現(xiàn)還有童鞋們多查閱資料和多寫代碼??!有問題可以聯(lián)系我:qq:843308498。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产又粗又猛又大爽又黄同志| 精品熟女少妇一区二区三区| 视频一区日韩经典中文字幕| 久久热在线免费视频精品| 国产成人人人97超碰熟女| 儿媳妇的诱惑中文字幕| 91熟女大屁股偷偷对白| 福利一区二区视频在线| 午夜亚洲少妇福利诱惑| 真实偷拍一区二区免费视频| 一区二区欧美另类稀缺| 中文字幕一二区在线观看| 欧美一区二区三区在线播放| 欧美黄色成人真人视频| 欧美日韩国内一区二区| 真实国产乱子伦对白视频不卡| 亚洲黄色在线观看免费高清| 日韩一区二区三区久久| 免费在线播放一区二区| 五月婷婷六月丁香在线观看| 欧美亚洲三级视频在线观看| 玩弄人妻少妇一区二区桃花| 欧美黑人在线一区二区| 欧美亚洲美女资源国产| 国产又黄又爽又粗视频在线| 日韩精品免费一区二区三区| 久久精品中文字幕人妻中文| 中文字幕av诱惑一区二区| 国产传媒高清视频在线| 在线精品首页中文字幕亚洲| 日韩不卡一区二区在线| 91国内视频一区二区三区| 日韩亚洲激情在线观看| 91欧美亚洲视频在线| 国产av一二三区在线观看| 精品欧美一区二区三久久| 国产午夜在线精品视频| 伊人久久五月天综合网| 69老司机精品视频在线观看| 日韩精品一区二区不卡| 日本办公室三级在线观看|