網絡上盛傳的基於mini2440的攝像頭監控一般是基於 MJPEG-Streamer。這種方法利用的是V4L2的底層驅動,然後配合mjpeg這種格式的流傳輸,然後通過浏覽器浏覽視頻和控制。
下面用一個更接近真實的IP-camera的方案來實現。
參考:http://www.linuxidc.com/Linux/2013-04/83108.htm
文本照搬他的代碼,只是將他的webcam_server交叉編譯到arm上,webcam_shower編譯到pc上。
這種方案是用的V4L2的視頻驅動,然後配合ffmpeg、x264的軟件編解碼,通過udp上傳至pc顯示,視頻的編解碼真的非常麻煩,幸好有很多開源的編解碼庫可以使用,幾百行的代碼就可以實現h.264的流編碼與傳輸。
usb攝像頭得到的數據格式一般是YUV422,如果用的是cmos 攝像頭可能是raw原始數據格式,YUV422,是在raw基礎上色彩抽點編碼,因為人眼對亮度的敏感大於對色彩的敏感,所以並非對所有的色彩編碼,這樣的數據量會非常的大,視頻編解碼格式就不討論了,很多很復雜,當然,你會了,就不會覺得難。
ffmpeg和x264的作用是將YUV422再編碼成H.264
上圖看效果,這是在linux中接的圖,窗口中顯示的是從2440usb攝像頭上傳上來的視頻
這是實物圖,手機拍的
廢話少說,一步一步實現
1、平台
硬件:arm mini2440,usb攝像頭
軟件:Fedora14,arm-linux-gcc v4.4.3
2、源文件
ffmpeg-0.10.1.tar.gz
last_x264.tar.bz2
zlib-1.2.5.tar.gz (mini2440中沒有libz.so,但是程序運行時需要這個庫支持,所以下載源文件交叉編譯)
以上文件只要會搜索的人都能找到
最後是webcam應用程序,下載地址:http://www.linuxidc.com/Linux/2013-04/83108p7.htm 的2.zip