MJPG-Streamer視訊流伺服器移植
環境
主機環境:Ubuntu 12.04
核心版本:3.2.0-24-generic
主機工具鏈:arm-none-linux-gnueabi version 4.3.2
交叉編譯jpeg庫
1.解壓原始碼
tar xvf jpegsrc.v8b.tar.gz
2.配置原始碼
cd jpeg-8b
./configure --prefix=/home/linux/arm/video/jpeg --host=arm-none-linux-gnueabi
3.編譯
make
4.安裝
make install
-----------------------------------------------------------------------------------------
這時候我的出現了問題:(輸入sudo make install)
[email protected]:~/workdir/jpeg-8b$ sudo make install
[sudo] password for linux:
make[1]: 正在進入目錄`/home/linux/workdir/jpeg-8b'
test -z "/home/linux/arm/video/jpeg/lib" || /bin/mkdir -p "/home/linux/arm/video/jpeg/lib"
/bin/bash ./libtool --mode=install /usr/bin/install -c libjpeg.la '/home/linux/arm/video/jpeg/lib'
libtool: install: /usr/bin/install -c .libs/libjpeg.so.8.0.2 /home/linux/arm/video/jpeg/lib/libjpeg.so.8.0.2
libtool: install: (cd /home/linux/arm/video/jpeg/lib && { ln -s -f libjpeg.so.8.0.2 libjpeg.so.8 || { rm -f libjpeg.so.8 && ln -s libjpeg.so.8.0.2 libjpeg.so.8; }; })
libtool: install: (cd /home/linux/arm/video/jpeg/lib && { ln -s -f libjpeg.so.8.0.2 libjpeg.so || { rm -f libjpeg.so && ln -s libjpeg.so.8.0.2 libjpeg.so; }; })
libtool: install: /usr/bin/install -c .libs/libjpeg.lai /home/linux/arm/video/jpeg/lib/libjpeg.la
libtool: install: /usr/bin/install -c .libs/libjpeg.a /home/linux/arm/video/jpeg/lib/libjpeg.a
libtool: install: chmod 644 /home/linux/arm/video/jpeg/lib/libjpeg.a
libtool: install: arm-none-linux-gnueabi-ranlib /home/linux/arm/video/jpeg/lib/libjpeg.a
./libtool: line 950: arm-none-linux-gnueabi-ranlib: command not found
make[1]: *** [install-libLTLIBRARIES] 錯誤 127
make[1]:正在離開目錄`/home/linux/workdir/jpeg-8b'
make: *** [install-am] 錯誤 2
------------------------
分析:
但我發現arm-none-linux-gnueabi-ranlib是存在的,最後發現是因為root使用者的編譯鏈的路徑還沒啟用。
解決方法:直接進入root許可權,先用arm-linux-gcc –v檢視工具鏈是否可用,不行的話就source一下,然後再執行一次make install,問題解決。(這個錯誤告訴我們,安裝軟體或者編譯什麼的時候最好直接在root下進行!)
--------------------------------------------------------------------------------------------
5.拷貝
完成後會在你指定的目錄下(/home/linux/arm/video/jpeg)的/lib下生成庫檔案,使用的時候就把它們複製到開發板的/lib目錄下即可。(呆會mjpg-stream的編譯也需要用到)
交叉編譯mjpg-stream
1.解壓原始碼
#tar xvf mjpg-streamer-r63.tar.gz
2.修改原始碼
(1)修改Makefile
修改頂層Makefile檔案和所有子層Makefile檔案中的編譯工具項:
將:CC = gcc
改成: CC = arm-none-linux-gnueabi-gcc
(2)修改plugins/input_uvc/Makefile檔案
a.在第 16 行新增需要使用jpeg庫標頭檔案的路徑(交叉編譯jpeg庫時指定的安裝目錄):
CFLAGS += -I/home/linux/arm/video/jpeg/include
b.在第 24 行新增編譯 input_uvc.so 所使用的庫檔案的路徑:
將:$(CC) $(CFLAGS) -ljpeg -o [email protected] input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo
改成:$(CC) $(CFLAGS) –ljpeg -L/home/linux/arm/video/jpeg/lib -o [email protected] input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo
(3)修改 plugins/input_uvc/v4l2uvc.c
a.在第 99 行 static int init_v4l2(struct vdIn *vd)函式內新增:
#if 1
struct v4l2_input inp;
inp.index = 0;
if (-1 == ioctl(vd->fd, VIDIOC_S_INPUT, &inp))
printf("VIDIOC_S_INPUT error\n");
#endif
b.在第 195 行 mmap 函式的引數中新增:
將vd->buf.length, PROT_READ, MAP_SHARED, vd->fd,
改成:vd->buf.length, PROT_READ | PROT_WRITE, MAP_SHARED, vd->fd,
c.將下面的程式碼全部註釋掉:
struct v4l2_streamparm *setfps;
setfps = (struct v4l2_streamparm *) calloc(1, si
memset(setfps, 0, sizeof(struct v4l2_streamparm
setfps->type = V4L2_BUF_TYPE_VIDEO_CA
setfps->parm.capture.timeperframe.numerator =
setfps->parm.capture.timeperframe.denominato
ret = ioctl(vd->fd, VIDIOC_S_PARM, setfps);
3.編譯mjpg-stream原始碼
#make clean
#make -j2
------------------------------------------------------------------------------------------------
執行 make -j2 之後出現錯誤:
input_uvc.c: In function 'input_init':
input_uvc.c:275: error: invalid application of 'sizeof' to incomplete type 'struct vdIn'
input_uvc.c:280: error: invalid application of 'sizeof' to incomplete type 'struct vdIn'
input_uvc.c:291: warning: implicit declaration of function 'init_videoIn'
input_uvc.c:303: error: dereferencing pointer to incomplete type
input_uvc.c:308: warning: implicit declaration of function 'input_cmd'
input_uvc.c: In function 'input_run':
input_uvc.c:331: error: dereferencing pointer to incomplete type
input_uvc.c: In function 'input_cmd':
input_uvc.c:369: warning: implicit declaration of function 'v4l2ResetControl'
input_uvc.c:379: error: dereferencing pointer to incomplete type
input_uvc.c:411: error: dereferencing pointer to incomplete type
input_uvc.c:429: error: dereferencing pointer to incomplete type
input_uvc.c:448: error: dereferencing pointer to incomplete type
input_uvc.c:477: error: dereferencing pointer to incomplete type
input_uvc.c:495: error: dereferencing pointer to incomplete type
input_uvc.c:514: error: dereferencing pointer to incomplete type
input_uvc.c:523: warning: implicit declaration of function 'v4l2UpControl'
input_uvc.c:528: warning: implicit declaration of function 'v4l2DownControl'
input_uvc.c:566: warning: implicit declaration of function 'v4l2SetControl'
input_uvc.c: In function 'cam_thread':
input_uvc.c:676: warning: implicit declaration of function 'uvcGrab'
input_uvc.c:690: error: dereferencing pointer to incomplete type
input_uvc.c:704: error: dereferencing pointer to incomplete type
input_uvc.c:706: error: dereferencing pointer to incomplete type
input_uvc.c:706: warning: passing argument 1 of 'compress_yuyv_to_jpeg' from incompatible pointer type
input_uvc.c:710: warning: implicit declaration of function 'memcpy_picture'
input_uvc.c:710: error: dereferencing pointer to incomplete type
input_uvc.c:710: error: dereferencing pointer to incomplete type
input_uvc.c:728: error: dereferencing pointer to incomplete type
input_uvc.c:729: error: dereferencing pointer to incomplete type
input_uvc.c: In function 'cam_cleanup':
input_uvc.c:758: warning: implicit declaration of function 'close_v4l2'
input_uvc.c:759: error: dereferencing pointer to incomplete type
input_uvc.c:759: error: dereferencing pointer to incomplete type
----------------------------------------
解決方法:
在目錄plugins/input_uvc下的input_uvc.c裡增加標頭檔案#include。(也不知道是我複製過來的這份程式碼有問題還是所有的都是這樣,還沒有對照)
-------------------------------------------------------------------------------------------------
編譯成功後會在目錄下生成6個庫檔案,可以用命令 ls *so 檢視一下:
input_gspcav1.so input_uvc.so output_file.so
input_testpicture.so output_autofocus.so output_http.so
還有一個可執行檔案:mjpg-stream
4.拷貝(移植)
將生成的(6個)庫檔案複製到ARM板的/lib目錄下,將mjpg-stream複製到ARM板的/bin目錄下。還可以將www目錄複製到ARM板的目錄/www上做測試。
----------------------------------------------------------------------------------------------
尚未成功
5.測試
接上USB攝像頭,在開發板上執行:
mjpg_streamer -i "/lib/input_uvc.so -y" -o "/lib/output_http.so -w /www"
還是?(mjpg_streamer -i "/mjpg/input_uvc.so -y" -o "/mjpg/output_http.so -w
192.168.100.191:8080" &)
然後再通過瀏覽器訪問:
http://192.168.100.191:8080/?action=snapshot (每次回車單張抓拍)
或者
http://192.168.100.191:8080/?action=stream (視訊流)
-----------------------------------------------------------------------------------------------
相關推薦
MJPG-Streamer視訊流伺服器移植
環境 主機環境:Ubuntu 12.04 核心版本:3.2.0-24-generic 主機工具鏈:arm-none-linux-gnueabi version 4.3.2 交叉編譯jpeg庫 1.解壓原始碼 tar xvf jpegsrc.v8b.tar.gz 2.配置原始碼 cd jpeg-
C#寫客戶端接收mjpg-streamer視訊流
最近用wpf做一個樹莓派機器人的綜合控制端,需要解析機器人攝像頭的視訊流,樹莓派是用mjpg-streamer呼叫並搭建了視訊流服務。 客戶端解析mjpg-streamer視訊幀的原理是:建立Http長連線,每次接收1024長度的資料,資料流中包含資料頭資訊和緊跟在資料頭資
Linux下MJPG-Streamer視訊伺服器搭建
int input_init(input_parameter *param, int id) { char *dev = "/dev/video0", *s; int width = 640, height = 480, fps = -1,format = V4L2_PIX_FMT_MJPEG
【原創】IP攝像頭技術縱覽(五)---網路攝像頭初試—mjpg-streamer移植與部署
【原創】IP攝像頭技術縱覽(五)—網路攝像頭初試—mjpg-streamer移植與部署 本文屬於《IP攝像頭技術縱覽》系列文章之一: Author: chad Mail: [email protected] 1、vgrabbj、spacv
jpeg庫移植,mjpg-streamer庫移植
JPEG 是全綵色和灰度影象標準化的壓縮方法。 libjpeg是一個完全用C語言編寫的庫。libjpeg 是一個完全用C語言編寫的庫,包含了被廣泛使用的JPEG解碼、JPEG編碼和其他的JPEG功能的實現。這個庫由獨立JPEG工作組維護。 libjpeg包含以下工具程式:
mjpg streamer(OpenWRT)
軟體介紹 mjpg-streamer 可以通過檔案或者是HTTP方式訪問linux UVC相容攝像頭。 安裝 在openwrt系統下,需要安裝以下攝像頭的驅動(需聯網)。 opkg install kmod-usb2 opkg install kmod-us
嵌入式web伺服器移植
文章目錄 嵌入式web伺服器移植 1.移植環境搭建 2.Lighttpd移植 2.1 下載原始碼並解壓 2.2 編譯配置 2.3 編譯安裝 2.4 Lighttpd配置
mjpg-streamer簡單解析
前言 正文 主函式 資料採集 資料傳輸 前言 相信很多搞過ARM攝像頭的,都會想著怎麼把攝像頭資料繼續傳出去,做個遠端監控什麼的。記得當初
Boa伺服器移植
Boa是一種非常小巧的Web伺服器,其可執行程式碼只有大約60KB左右。作為一種單任務Web伺服器,Boa只能依次完成使用者的請求,而不會fork出新的程序來處理併發連線請求。但Boa支援CGI,能夠為CGI程式fork出一個程序來執行。Boa的設計目標是速度和安全。 下面給大家介紹一下Bo
樹莓派上MJPG-streamer安裝手順
motion和MJPG-streamer異同 相同點:都是linux系統上監控用的程式。 不同點: motion通過motion.conf配置檔案,可以設定動態感知的動作。比如有寵物進入攝像頭範圍內,motion自動捕獲截圖或者視訊,然後觸發既定的指令碼(sh,pyt
樹莓派上MJPG-streamer的安裝過程
MJPG-streamer是一個優秀的開源project,它可以通過HTTP的方式訪問linux上面的相容攝像頭,從而做到遠端視訊傳輸的效果。最近導師的一個project和遠端視訊傳輸有關,於是筆者在樹莓派上面搭建視訊傳輸環境的時候直接選擇了MJPG-streamer。現在
樹莓派3B + Pi攝像頭+mjpg-streamer
6步完成mjpg-streamer推流 準備:根據自己pi的環境安裝編譯工具: sudo apt-get install libjpeg8-dev #JPEG支援庫 sudo apt-get install imagemagick sud
[mini2440]mjpg-streamer
1.Download. In mini2440-20110421\友善之臂編寫或整理的參考文件\通過網路瀏覽CMOS或USB攝像頭\, could find the bin file, source code, and usage document. Note: The official I
樹莓派上安裝MJPG-streamer實現視訊監控
首先安裝相應的依賴庫 sudo apt-get install subversion libjpeg8-dev imagemagick libv4l-dev cmake git 從github上 下載 MJPG-streamer,並編譯, 安裝 cd
嵌入式Web開發——Boa伺服器移植
百度百科上關於 Boa 的說明: BOA 伺服器是一個小巧高效的 web 伺服器,是一個運行於 unix 或 linux 下的,支援 CGI 的、適合於嵌入式系統的單任務的http伺服器。 原始碼開放、效能高。由於它是一個單任務的 Web 伺服器,只
nginx rtmp 視訊流伺服器直播測試
一、配置 1、nginx流媒體伺服器 下載nginx原始碼,nginx-rtmp-module原始碼,先configure “–add-modeule=…” …, 再編譯安裝,教程很多,略……。 先增加如下配置. 再配置路
MJPG-streamer原始碼分析-輸出部分
MJPG-streamer可以建立多個輸出,簡單的說,根據主函式中輸入的引數解析的結果,確定輸出通道的個數,至少保證有一個輸出通道在程式執行時存在。從引數解析結果確定每個輸出通道的引數,並以這些引數為每個通道建立傳送執行緒。在每個傳送執行緒上,不斷偵聽是否有連線請求。每當有連
MJPG-streamer原始碼分析-輸入部分
MJPG-streamer僅可以建立一個輸入通道,對一個相機進行採集(如需多個,需另行修改)。在進行相機採集開始前,需要對其進行初始化,包括採集過程的全域性變數定義和記憶體開闢。執行過程則是將相機採集得到的資料,根據從相機對映到記憶體的地址上,按照不同的格式要求(YUV或M
樹莓派新版系統上使用mjpg-streamer獲取USB攝像頭和樹莓派專用攝像頭RaspiCamera影象
網上有很多關於mjpg-stream移植到樹莓派的文章,大部分還是使用的sourceforge.net上的mjpg-streamer-r63.tar.gz,該工程版本比較老,在新版系統中編譯需要把原始碼檔案中所有 #include<linux/videodev.h&
MJPG-Streamer原始碼分析(一)
-------------------------------------------------------------------------------------------------- 另一片篇推薦的博文:http://www.armbbs.net/foru