1. 程式人生 > >MJPG-Streamer視訊流伺服器移植

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