加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 一、嵌入式視頻圖像開(kāi)源庫(kù)
    • 二、mjpg-streamer簡(jiǎn)介
    • 三、測(cè)試攝像頭
    • 四、移植
    • 五、代碼流程
    • 六、支持單拍、連拍
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

嵌入式 | 手把手教你ubuntu下移植MJPG-streamer

2022/07/26
1384
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

彭老師在錄制的《物聯(lián)網(wǎng)綜合項(xiàng)目實(shí)戰(zhàn)》課程中,在web頁(yè)面中加入了實(shí)時(shí)監(jiān)控?cái)z像頭的功能,特地整理了一篇如何移植視頻流服務(wù)器的文章,供大家學(xué)習(xí)。

一、嵌入式視頻圖像開(kāi)源庫(kù)

嵌入式系統(tǒng)中,常用的視頻圖像處理開(kāi)源系統(tǒng)有:luvcview、cheese、motion、mjpg-streamer或者ffmpeg,其中:

• luvcview: 基于V4L2、SDL的程序,支持拍照錄像,參數(shù)調(diào)節(jié),代碼精簡(jiǎn)實(shí)用,適合學(xué)習(xí)V4L2編程

• cheese:基于V4L2、GTK的程序,支持拍照錄像,特殊視頻效果

• motion:移動(dòng)偵測(cè)拍照程序

• mjpg-streamer:網(wǎng)絡(luò)攝像機(jī)程序

 

二、mjpg-streamer簡(jiǎn)介

MJPG-streamer是一個(gè)優(yōu)秀的開(kāi)源project,它可以通過(guò)HTTP的方式訪問(wèn)linux上面的兼容攝像頭,從而做到遠(yuǎn)程視頻傳輸?shù)男Ч?/p>

MJPG-streamer從webcam攝像頭采集圖像,把他們以流的形式通過(guò)基于ip的網(wǎng)絡(luò)傳輸?shù)綖g覽器如Firehox,Cambozola,VLC播放器,Windows的移動(dòng)設(shè)備或者其他擁有瀏覽器的移動(dòng)設(shè)備。

它可以利用某些webcams的硬件壓縮功能來(lái)降低服務(wù)器CPU的開(kāi)銷(xiāo)。

它為嵌入式設(shè)備和一些常規(guī)服務(wù)器提供了一個(gè)輕量且更少CPU消耗的方案,因?yàn)樗鼰o(wú)需為視頻幀壓縮浪費(fèi)大量的計(jì)算效率。

三、測(cè)試攝像頭

1)按上圖的方式將羅技攝像頭連接入虛擬機(jī)

2)下載安裝cheese 檢測(cè)攝像頭是否能夠正常工作

$ sudo apt-get update
$ sudo apt-get install cheese

ubuntu 16.04已經(jīng)自帶該程序

3)測(cè)試

攝像頭連接后會(huì)生成以下設(shè)備文件

root@ubuntu:/home/peng/work# ls /dev/video0 -l
crw-rw----+ 1 root video 81, 0 Mar 25 07:18 /dev/video0

運(yùn)行

root@ubuntu:/home/peng/work# cheese 

 

 

四、移植

安裝準(zhǔn)備:

1. 安裝前準(zhǔn)備

sudo apt-get install libsdl1.2-dev subversion
sudo apt-get install libjpeg62-dev
sudo apt-get install imagemagick
 

2. 下載mjpeg-streamer

git clone https://github.com/shrkey/mjpg-streamer

如果沒(méi)有安裝git,執(zhí)行以下命令

sudo apt-get install git

 

3. 編譯安裝

cd mjpg-streamer/mjpg-streamer

 

 

root@ubuntu:/home/peng/work/camera/mjpg-streamer# tree -L 1 ./
./
├── doc
├── mjpeg-client     #分別有 linux和windows 的客戶端
├── mjpg-streamer    #目錄下提供了 的執(zhí)行程序和各個(gè)輸入輸出設(shè)備組件
├── mjpg-streamer-experimental
├── mjpg-streamer.tar.gz
├── README.md
├── udp_client
└── uvc-streamer     #目錄下提供了 uvc-streamer的可執(zhí)行目錄

6 directories, 2 files

ps:重新編譯前,需要執(zhí)行

make
sudo make install
root@ubuntu:/home/peng/work/camera/mjpg-streamer/mjpg-streamer# make install
install --mode=755 mjpg_streamer /usr/local/bin
install --mode=644 input_uvc.so output_file.so output_udp.so output_http.so input_testpicture.so input_file.so /usr/local/lib/
install --mode=755 -d /usr/local/www
install --mode=644 -D www/* /usr/local/www

編譯生成的庫(kù)文件功能

(1)input_testpicture.so。這是一個(gè)圖像測(cè)試插件,它將預(yù)設(shè)好的圖像編譯成一個(gè)頭文件,可以在沒(méi)有攝像頭的情況下傳輸圖像,從而方便調(diào)試程序。

(2)input_uvc.so。此文件調(diào)用USB攝像頭驅(qū)動(dòng)程序V4L2,從攝像頭讀取視頻數(shù)據(jù)。

(3)input_control.so。這個(gè)文件實(shí)現(xiàn)對(duì)攝像頭轉(zhuǎn)動(dòng)的控制接口。

(4)output_http.so。這是一個(gè)功能齊全的網(wǎng)站服務(wù)器,它不僅可以從單一文件夾中處理文件,還可以執(zhí)行一定的命令,它可以從輸入插件中處理一幅圖像,也可以將輸入插件的視頻文件根據(jù)現(xiàn)有M-JPEG標(biāo)準(zhǔn)以HTTP視頻數(shù)據(jù)服務(wù)流形式輸出。

(5)output_file.so。這個(gè)插件的功能是將輸入插件的JPEG圖像存儲(chǔ)到特定的文件夾下,它可以用來(lái)抓取圖像。

4 修改腳本

修改腳本文件

/home/peng/work/camera/mjpg-streamer/mjpg-streamer/start.sh
./mjpg_streamer -i "./input_uvc.so -y" -o "./output_http.so -w ./www" -o "./output_file.so -f /www/pice -d 15000"

 

"./input_uvc.so -y" :指定攝像頭是YUV,默認(rèn)是JPEG,一口君使用的羅技攝像頭是YUV
"./output_http.so -w ./www" :指定web服務(wù)器根目錄./www,我們可以通過(guò)瀏覽器測(cè)試攝像頭
"./output_file.so -f /www/pice -d 15000" : 指定拍照保存照片目錄/www/pice,并且每15s保存一次照片

也可以指定分辨率:

./mjpg_streamer -i "input_uvc.so -d /dev/video0 -n -y -r 640x480 -f 30" -o "./output_http.so -w ./www" -o "./output_file.so -f /www/pice -d 15000"

市面上有的攝像頭支持格式有YUV,MJPEG,H264 ;mjpg-stream支持MJPEG和YUV兩種格式

5 測(cè)試

運(yùn)行

./start.sh

(1)網(wǎng)頁(yè)測(cè)試

(2)網(wǎng)頁(yè)視頻流測(cè)試

(3) 拍照功能實(shí)現(xiàn)

瀏覽器上地址欄輸入如下內(nèi)容:

http://127.0.0.1:8080/?action=snapshot

或者

http://127.0.0.1:8080/?action=stream

snapshot 表示每次抓拍一張圖形顯示在網(wǎng)頁(yè)上,stream 表示視頻流也就是連續(xù)的圖 像

6. 補(bǔ)充

一口君還使用了一款z-star攝像頭,該款攝像頭不要添加-y選項(xiàng)

./mjpg_streamer -i "./input_uvc.so  -d /dev/video0" -o "./output_http.so -w ./www" -o "./output_file.so -f /www/pice -d 150000"

有時(shí)候攝像頭生成的設(shè)備文件不是/dev/video0

我們需要對(duì)應(yīng)參數(shù):

-d /dev/video1

五、代碼流程

 

六、支持單拍、連拍

由于 mjpg_stream 中 output-file.so 能實(shí)現(xiàn)連續(xù)拍照的功能,不能實(shí)現(xiàn)單拍或 連拍幾張的功能所以需要對(duì) output_file 原碼進(jìn)行修改。修改文件目錄:

peng@ubuntu:~/work/camera/mjpg-streamer/mjpg-streamer/plugins/output_file/output_file.c
  1. 在 196 行 函數(shù) voidworker_thread(voidarg) 體中加入以下代碼:
char buf[10];   //用于存放從管道讀取的命令
int flags = 0;   //拍照標(biāo)志,1:表示11張照片,2:表示1張照片
int fd_com = 0; //打開(kāi)管道的文件描述符

int stop_num = 0; //拍照計(jì)數(shù)

if ( access("/tmp/webcom",F_OK) < 0 )    //創(chuàng)建有名管道用于接收拍照命令
{
 if ( mkfifo("/tmp/webcom",0666 ) < 0)
 {
  printf("photo fifo create failedn");
 }
}

fd_com = open ("/tmp/webcom",O_RDONLY,0666);
if (fd_com < 0)
{
 perror ("open the file webcom error");
}
  1. 在229行 while( ok >= 0 && !pglobal->stop){ 后加入
if (flags == 0)
 {
  while(1)
  {
   read(fd_com,buf,sizeof(buf));
   if (strncmp(buf,"danger",6) == 0)    //拍11張照片
   {
    flags = 1;
    bzero(buf,sizeof(buf));
    break;
   }

   if (strncmp(buf,"one",3) == 0)   //拍1張照片
   {
    flags = 2;
    bzero(buf,sizeof(buf));
    break;
   }
  }
 }
  1. 在355行
355         /* if specified, wait now */
356         if(delay > 0) {
357             usleep(1000 * delay);
358         }

后加入

  stop_num++;
  if (flags == 1)        //判斷拍照的數(shù)量
  {
   if  ( stop_num > 9)
   {
    stop_num = 0;
    flags = 0;
   }
  }
  else if (flags == 2)
  {
   stop_num = 0;
   flags = 0;
  }

Ubuntu

Ubuntu

Ubuntu是Linux上用于企業(yè)服務(wù)器、桌面、云和物聯(lián)網(wǎng)的現(xiàn)代開(kāi)源操作系統(tǒng)。

Ubuntu是Linux上用于企業(yè)服務(wù)器、桌面、云和物聯(lián)網(wǎng)的現(xiàn)代開(kāi)源操作系統(tǒng)。收起

查看更多

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計(jì)資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫(xiě)文章/發(fā)需求
立即登錄

公眾號(hào)『一口Linux』號(hào)主彭老師,擁有15年嵌入式開(kāi)發(fā)經(jīng)驗(yàn)和培訓(xùn)經(jīng)驗(yàn)。曾任職ZTE,某研究所,華清遠(yuǎn)見(jiàn)教學(xué)總監(jiān)。擁有多篇網(wǎng)絡(luò)協(xié)議相關(guān)專利和軟件著作。精通計(jì)算機(jī)網(wǎng)絡(luò)、Linux系統(tǒng)編程、ARM、Linux驅(qū)動(dòng)、龍芯、物聯(lián)網(wǎng)。原創(chuàng)內(nèi)容基本從實(shí)際項(xiàng)目出發(fā),保持原理+實(shí)踐風(fēng)格,適合Linux驅(qū)動(dòng)新手入門(mén)和技術(shù)進(jìn)階。