成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

手把手教你Ubuntu下移植MJPG-Streamer

開源
在嵌入式系統中,常用的視頻圖像處理開源系統有:luvcview、cheese、motion、mjpg-streamer或者ffmpeg。

彭老師在錄制的《物聯網綜合項目實戰》課程中,在web頁面中加入了實時監控攝像頭的功能,特地整理了一篇如何移植視頻流服務器的文章,供大家學習。

圖片

一、嵌入式視頻圖像開源庫

在嵌入式系統中,常用的視頻圖像處理開源系統有:luvcview、cheese、motion、mjpg-streamer或者ffmpeg,其中:

  • luvcview: 基于V4L2、SDL的程序,支持拍照錄像,參數調節,代碼精簡實用,適合學習V4L2編程。
  • cheese:基于V4L2、GTK的程序,支持拍照錄像,特殊視頻效果。
  • motion:移動偵測拍照程序。
  • mjpg-streamer:網絡攝像機程序。

二、mjpg-streamer簡介

MJPG-streamer是一個優秀的開源project,它可以通過HTTP的方式訪問linux上面的兼容攝像頭,從而做到遠程視頻傳輸的效果。

MJPG-streamer從webcam攝像頭采集圖像,把他們以流的形式通過基于ip的網絡傳輸到瀏覽器如Firehox,Cambozola,VLC播放器,Windows的移動設備或者其他擁有瀏覽器的移動設備。

它可以利用某些webcams的硬件壓縮功能來降低服務器CPU的開銷。

它為嵌入式設備和一些常規服務器提供了一個輕量且更少CPU消耗的方案,因為它無需為視頻幀壓縮浪費大量的計算效率。

三、測試攝像頭

圖片圖片

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

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

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

ubuntu 16.04已經自帶該程序。

(3)測試。

攝像頭連接后會生成以下設備文件。

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

運行:

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

圖片

四、移植

安裝準備:

1、安裝前準備

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

如果沒有安裝git,執行以下命令:

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 #目錄下提供了 的執行程序和各個輸入輸出設備組件
├── mjpg-streamer-experimental
├── mjpg-streamer.tar.gz
├── README.md
├── udp_client
└── uvc-streamer #目錄下提供了 uvc-streamer的可執行目錄

6 directories, 2 files

ps:重新編譯前,需要執行。

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

圖片圖片

編譯生成的庫文件功能:

(1)input_testpicture.so。這是一個圖像測試插件,它將預設好的圖像編譯成一個頭文件,可以在沒有攝像頭的情況下傳輸圖像,從而方便調試程序。
(2)input_uvc.so。此文件調用USB攝像頭驅動程序V4L2,從攝像頭讀取視頻數據。
(3)input_control.so。這個文件實現對攝像頭轉動的控制接口。
(4)output_http.so。這是一個功能齊全的網站服務器,它不僅可以從單一文件夾中處理文件,還可以執行一定的命令,它可以從輸入插件中處理一幅圖像,也可以將輸入插件的視頻文件根據現有M-JPEG標準以HTTP視頻數據服務流形式輸出。
(5)output_file.so。這個插件的功能是將輸入插件的JPEG圖像存儲到特定的文件夾下,它可以用來抓取圖像。

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,默認是JPEG,一口君使用的羅技攝像頭是YUV
"./output_http.so -w ./www" :指定web服務器根目錄./www,我們可以通過瀏覽器測試攝像頭
"./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、測試

運行:

./start.sh

(1)網頁測試。

圖片

圖片(2)網頁視頻流測試。

圖片圖片

(3) 拍照功能實現。

瀏覽器上地址欄輸入如下內容:

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

或者:

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

snapshot 表示每次抓拍一張圖形顯示在網頁上,stream 表示視頻流也就是連續的圖像。

6、補充

一口君還使用了一款z-star攝像頭,該款攝像頭不要添加-y選項。

圖片

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

有時候攝像頭生成的設備文件不是/dev/video0。

圖片

我們需要對應參數:

-d /dev/video1

五、代碼流程

圖片

六、支持單拍、連拍

由于 mjpg_stream 中 output-file.so 能實現連續拍照的功能,不能實現單拍或 連拍幾張的功能所以需要對 output_file 原碼進行修改。修改文件目錄:

peng@ubuntu:~/work/camera/mjpg-streamer/mjpg-streamer/plugins/output_file/output_file.c
  1. 在 196 行 函數 voidworker_thread(voidarg) 體中加入以下代碼:
char buf[10];   //用于存放從管道讀取的命令
int flags = 0; //拍照標志,1:表示11張照片,2:表示1張照片
int fd_com = 0; //打開管道的文件描述符
int stop_num = 0; //拍照計數
if ( access("/tmp/webcom",F_OK) < 0 ) //創建有名管道用于接收拍照命令
{
if ( mkfifo("/tmp/webcom",0666 ) < 0)
{
printf("photo fifo create failed\n");
}
}
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) //判斷拍照的數量
{
if ( stop_num > 9)
{
stop_num = 0;
flags = 0;
}
}
else if (flags == 2)
{
stop_num = 0;
flags = 0;
}
責任編輯:姜華 來源: 一口Linux
相關推薦

2011-01-10 14:41:26

2025-05-07 00:31:30

2011-05-03 15:59:00

黑盒打印機

2021-07-14 09:00:00

JavaFX開發應用

2020-12-21 09:47:16

UbuntuMinicondalinux

2011-02-22 13:46:27

微軟SQL.NET

2021-02-26 11:54:38

MyBatis 插件接口

2021-12-28 08:38:26

Linux 中斷喚醒系統Linux 系統

2022-03-14 14:47:21

HarmonyOS操作系統鴻蒙

2022-07-27 08:16:22

搜索引擎Lucene

2022-01-08 20:04:20

攔截系統調用

2023-04-26 12:46:43

DockerSpringKubernetes

2022-12-07 08:42:35

2015-07-28 14:27:44

2020-07-09 08:59:52

if else模板Service

2020-04-14 10:20:12

MySQL數據庫死鎖

2021-08-04 08:55:02

Socket Java開發

2011-01-06 10:39:25

.NET程序打包

2016-04-27 09:49:16

用戶模型產品總結

2009-11-09 14:57:37

WCF上傳文件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一区久久 | 国产片侵犯亲女视频播放 | 国产二区精品视频 | 亚洲成人精品 | 欧美区在线| 玖玖综合在线 | 久久天天躁狠狠躁夜夜躁2014 | 免费在线看黄 | 狠狠婷婷综合久久久久久妖精 | 色综合99| 国产高潮好爽受不了了夜色 | 毛片电影 | 日本一区二区高清视频 | 国产成人精品久久 | 中文久久 | 久久最新精品视频 | 一区二区三区在线免费观看 | 黄色毛片黄色毛片 | 国产精品久久久久久久久婷婷 | 国产视频福利在线观看 | 亚洲网站在线观看 | 欧美激情综合 | www久久 | 网站一区二区三区 | 免费看a | 午夜精品久久久久久久星辰影院 | 久久免费视频2 | 91久久夜色 | 青青久草 | 成人午夜 | 中文字幕视频在线观看 | 另类亚洲视频 | 亚洲综合伊人 | 久久精品性视频 | 精品乱码一区二区三四区 | 四虎成人精品永久免费av九九 | 中文字幕国产精品 | 精品成人在线观看 | 一区二区三区av | 日本手机在线 | 欧美日韩精品久久久免费观看 |