自宅サーバー ≫ Linux Server ≫ CentOS 7 ≫ Webカメラサーバー(xawtv)

 
   
Webカメラの認識確認
BAFFALO のUVC対応 BSW13K06H と言うWebカメラを利用してWebカメラサーバーを構築する
カーネルのバージョンが 2.6.26 以上ならUVCドライバーが標準でついているのでドライバーのインストールは必要ない
当然 CentOS 7 はUVCドライバーが標準でついている
まずはWebカメラが認識されているか確認
 
 
[root@centos]# cat /sys/kernel/debug/usb/devices

 T:  Bus=04 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=5000 MxCh= 2
 B:  Alloc= 0/800 us ( 0%), #Int= 0, #Iso= 0
 D:  Ver= 3.00 Cls=09(hub ) Sub=00 Prot=03 MxPS= 9 #Cfgs= 1
 P:  Vendor=1d6b ProdID=0003 Rev= 3.10
 S:  Manufacturer=Linux 3.10.0-123.8.1.el7.x86_64 xhci_hcd
 S:  Product=xHCI Host Controller
 S:  SerialNumber=0000:00:14.0
 C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA
 I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
 E:  Ad=81(I) Atr=03(Int.) MxPS= 4 Ivl=256ms
 
   
途中略

 T:  Bus=03 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#= 7 Spd=480 MxCh= 0
 D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1
 P:  Vendor=058f ProdID=3831 Rev= 1.00
 S: 
Manufacturer=Alcor Micro, Corp.
 S: 
Product=USB 2.0 PC Camera
 C:* #Ifs= 2 Cfg#= 1 Atr=80 MxPwr=500mA
 A:  FirstIf#= 0 IfCount= 2 Cls=0e(video) Sub=03 Prot=00
 I:* If#= 0 Alt= 0 #EPs= 1 Cls=0e(video) Sub=01 Prot=00 Driver=uvcvideo
 E:  Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=8ms
 I:* If#= 1 Alt= 0 #EPs= 0 Cls=0e(video) Sub=02 Prot=00 Driver=uvcvideo
 I:  If#= 1 Alt= 1 #EPs= 1 Cls=0e(video) Sub=02 Prot=00 Driver=uvcvideo
 E:  Ad=82(I) Atr=05(Isoc) MxPS=3072 Ivl=125us
 I:  If#= 1 Alt= 2 #EPs= 1 Cls=0e(video) Sub=02 Prot=00 Driver=uvcvideo
 E:  Ad=82(I) Atr=05(Isoc) MxPS=2048 Ivl=125us
 I:  If#= 1 Alt= 3 #EPs= 1 Cls=0e(video) Sub=02 Prot=00 Driver=uvcvideo
 E:  Ad=82(I) Atr=05(Isoc) MxPS=1024 Ivl=125us
 I:  If#= 1 Alt= 4 #EPs= 1 Cls=0e(video) Sub=02 Prot=00 Driver=uvcvideo
 E:  Ad=82(I) Atr=05(Isoc) MxPS= 512 Ivl=125us

 T:  Bus=03 Lev=01 Prnt=01 Port=03 Cnt=02 Dev#= 3 Spd=12 MxCh= 0
 D:  Ver= 1.00 Cls=07(print) Sub=01 Prot=02 MxPS=64 #Cfgs= 1
 P:  Vendor=04b8 ProdID=0001 Rev= 1.00
 S: 
Manufacturer=EPSON
 S: 
Product=USB Printer
 C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 2mA
 I:* If#= 0 Alt= 0 #EPs= 2 Cls=07(print) Sub=01 Prot=02 Driver=usblp
 E:  Ad=01(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
 E:  Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms

 
    
以下略
 
USBポート毎に接続機器が表示されている
我が家のサーバーの場合、バックパネルに USB 3.0 が2個、 USB 2.0 が4個、フロントパネルに USB 2.0 が2個、合計8個の USB ポートがありますので8個の状態が表示される
ちなみに3番ポートに USB カメラ、4番ポートにプリンターを接続すていますので上記の緑字のようになります
   
関連ソフトのインストール
   
  OSのインストール時のインストール状況や他のソフトのインストール時の設定等により既にインストールされている場合もある
   
   
 [root@centos]#
yum -y install xorg-x11-drivers
 [root@centos]#
yum -y install libjpeg-devel kernel-devel ncurses-devel
 
   
  libjpeg-devel kernel-devel ncurses-devel はカーネル関連ソフトなのでサーバーの再起動
   
   
xawty のダウンロード
   
   
 [root@centos]#
wget http://dl.bytesex.org/releases/xawtv/xawtv-3.95.tar.gz
 
   
ダウンロードしたファイルを解凍
   
 [root@
centos]# tar zxvf xawtv-3.95.tar.gz
 
解凍したファイルのディレクトリの移動
   
 [root@
centos]# mv xawtv-3.95 /usr/local/bin    ( **** はHP公開ディレクトリ)
 
ダウンロードした不要なファイルを削除
   
 [root@
centos]# rm -rf xawtv-3.95.tar.gz
 
   
   
xawtv インストール
   
  ディレクトリの移動
   
   
 [root@centos]#
cd /usr/local/bin/xawtv-3.95
 
   
  make 時に fbtools.c でエラーが発生するので修正
   
   
 [root@
centos xawty-3.95]# vi /usr/local/bin/xawtv-3.95/console/fbtools.c
 /*
 * some generic framebuffer device stuff
 *
 */

 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
 #include <fcntl.h>
 #include <termios.h>
 #include <signal.h>
 #include <errno.h>
 #include <setjmp.h>
 #include <sys/ioctl.h>
 #include <sys/mman.h>
 #include <sys/wait.h>
 #include <sys/stat.h>

 #include <linux/kd.h>
 #include <linux/vt.h>
 #include <linux/fb.h>

 #include <asm/page.h>
  <--- コメント化
  

 
// #include <asm/page.h>
 
#define PAGE_SHIFT 12  <--- 追記
 #define PAGE_SIZE (1UL << PAGE_SHIFT)
  <--- 追記
 #define PAGE_MASK (~(PAGE_SIZE-1))
  <--- 追記

 
以下略
 
   
  make 時に matrox.c でエラーが発生するので修正
   
   
 [root@
centos xawty-3.95]# vi /usr/local/bin/xawtv-3.95/console/matrox.c
 #include "config.h"

 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
 #include <fcntl.h>
 #include <inttypes.h>
 #include <sys/ioctl.h>
 #include <sys/mman.h>

 #include <asm/page.h> /* PAGE_SIZE */
  <--- コメント化
  

 
// include <asm/page.h> /* PAGE_SIZE */
 
#define PAGE_SHIFT 12  <--- 追記
 #define PAGE_SIZE (1UL << PAGE_SHIFT)
  <--- 追記

 
以下略
 
   
インストール
   
 [root@
centos xawty-3.95]# ./configure
 [root@
centos xawty-3.95]# make
 [root@
centos xawty-3.95]# make install
 
   
webcam設定ファイルの作成
   
  新しく設定ファイルを作る
   
   
 [root@centos]#
vi /etc/.webcamrc
 
[grab]
 device = /dev/video0
 text = "webcam %Y-%m-%d %H:%M:%S"

 
fg_red = 255
 fg_green = 255
 fg_blue = 255
 width = 320
 height = 240

 
delay = 3    <--- 3秒毎に画像を撮影して archive で指定した場所に上書き保存する
 
wait = 0
 
rotate = 0
 top = 0
 left = 0
 bottom = -1
 right = -1
 quality = 75
 trigger = 0
 once = 0
 archive = /home/***/webcam/webcam.jpg
    <--- 画像を保存する場所(注意:1)

 
※Webカメラと画像配信するサーバーが 違う場合は以下記述
 
[ftp]
 
host = www    <--- FTPのホスト名
 
user = webcam    <--- FTPのユー
 
pass = xxxxxx    <--- FTPのパスワード
 
dir = public_html/images    <--- FTPのディレクトリ
 
file = webcam.jpg    <--- FTPのファイル名
 
tmp = uploading.jpeg
 
passive = 1
 
debug = 0
 
auto = 0
 
local = 0
 
ssh = 0
 
   
  各項目の内容は
[grab]
・device
  ビデオデバイスを指定
・text
  画像左下に文字を挿入する場合のフォーマットを指定 %Y: 年、%m: 月、%d:日、%H:時、%M:分、%S 秒
・width
  画像の横サイズ(ドット)
・height
  画像の縦サイズ(ドット)
・delay
  画像を保存する間隔  10 なら 10 秒おきに画像を保存
・quality
  JPEG の品質・画像圧縮率(0~100%)
・archive
  保存先のパスとファイル名 ファイル名には %Y、%m 等が使用できる

(注意:1)ファイル名には %Y、%m 等が使用できる がこの場合は永遠に画像を保存し続けるので注意が必要 当サイトではファイル名を指定することで毎回上書きされ常に最新の画像が1枚あるようにしている
 
[ftp]
・host
  FTPサーバのホスト名
・user
  FTPサーバのユーザーアカウント名
・pass
  FTPサーバのユーザーアカウントのパスワード
・passive
  PASVモード
・dir
  Webスペースとして公開ができるディレクトリ先
・file
  保存するファイル名
・local
  1の時はローカルのディレクトリ(ここでは、/var/www/html/image)に画像を保存
  0の時は他のサーバにftpアップロード
   
  .webcamrc のアクセス権変更
   
   
 [root@centos]#
chmod 600 /etc/.webcamrc
 
   
   
画像保存用ディレクトリの作成
   
  上記 /etc/.webcamrc で指定した画像を保存する場所
   
   
 [root@centos]#
mkdir /home/***/webcam
 
   
   
webcamの起動ファイル作成
   

 
 [root@centos]#
vi /usr/lib/systemd/system/xawtv.service
 
以下新規記述
 
[Unit]
 Description=The Web Camera Server
   <--- ステータスで表示される名前
 After=network.target remote-fs.target nss-lookup.target

 [Service]
 Type=notify
 ExecStart=/usr/local/bin/webcam /etc/.webcamrc > /dev/null 2> /dev/null &
<--- xawtv の start コマンド
 ExecStop=killall webcam
   <--- xawtv の stop コマンド
 PrivateTmp=true

 [Install]
 WantedBy=multi-user.target

 

   
※ 起動ファイルの設定内容はこちらで確認して下さい!!!
ファイルが出来上がったらデーモンのリロード

 
 [root@centos]#
systemctl --system daemon-reload
 

xawtv の起動

 
 [root@centos]#
systemctl start xawtv.service
 

自動起動設定

 
 [root@centos]#
systemctl enable xawtv.service
 

自動起動設定の確認

 
 [root@centos]#
systemctl list-unit-files | grep xawtv.service
 xawtv.service                                  enable
   <--- enable になっていればOK
 

   
   
webcam の手動起動
   
   
 
[root@centos]# webcam /etc/.webcamrc > /dev/null 2> /dev/null &
 
   
   
webcam の手動終了
   
   
 
[root@centos]# killall webcam
 
   
   
画像表示用HTMLドキュメントを作成
   
  下記ようなHTMLドキュメントを作成してWebサーバーにアップ
   
   
 
<HTML>
 <meta http-equiv="refresh" content="3">
    <--- 3秒ごとに再表示する
 
<BODY>
 <P><IMG src="/home/***/webcam/webcam.jpg" border="0" name="WEBCAM"
                                                       width="320" height="240"></P>
 </BODY>
 </HTML>

 
   
  インターネットブラウザよりWebサーバーにアップした上記ファイルにアクセスして画像表示を確認

今回の設定では3秒毎に画像が更新され、それに対応して3秒毎にインターネットブラウザもリロードされるようになっている

   
   

戻る