作成開始 : 令和2年(2020年)04月04日(土) 最終更新 : 令和2年(2020年)04月07日(火)

Linux Bean で DroidCamを使ってスマホをWebカメラにしてみた。


対面形式のアンケート調査の候補になったとの電話連絡があり、その受け答えの中でカメラ使えるPCありますかとかWifiありますか、ス マホありますかの確認があった。
ははぁ、これは新型コロナウイルス関連質問だなーと思った。
主催者サイドは可能ならテレワークみたいに特定の場所に集まらないで取材したいのだろうと思った。

実際は、友人から頂戴した Windows10 搭載のカメラ付きノートPCは持っているが普段使いは linux Bean 16.04 である。
カメラもマイクも持っていない。
何か方法はないかな・・・!? と探していたところ、DroidCamというものでスマホ(Andoroid)をWebカメラにできることがわかった。
この方法でskypeとかで使えるらしい。

さっそく検証してみた。

※テキストが多くなりますことご容赦ください。
※デジカメでの撮影写真にピンボケありもご容赦ください。
1.DroidCam Wireless Webcam(無料版) をスマホにインストール
●Playストアからandroidスマホにインストールします。

-> playストアアプリを起動します。
    ↓
 検索窓に「droidcam」と挿入して検索します。
    ↓
DroidCam Wireless Webcamのインストールボタンをタッチします。
    ↓
インストールボタンをタッチするとDroidCam Wireless Webcamにカメラ、マイク、Wifi接続の許可をする必要があります。
「同意する」をタッチします。これでインストールするまで少々待ちます。続けて起動させます。
●DroidCam Wireless Webcamを起動します。
インストールが完了すると「開く」ボタンが表示されるのでタッチしてDroidCam Wireless Webcamを起動させます。
ホームから「DroidCam Wireless Webcam」アイコンをタッチしても起動できます。
    ↓
最初に起動するとDroidCam Wireless WebcamによってスマホがPCのWebカメラやネットワークIP Webカメラになるという説明が英語であります。
下に「Next」とあるのでタッチして次ぎに進みます。
    ↓
DroidCamとの接続説明みたいの表示しますが「Got it」タッチすると DroidCam Wireless Webcam の画面を表示します。


    ↓
右上の設定をタッチすると「setting」でポート番号やインカメとかの設定できます。

とりあえず、Android側はここまでにして、PCのソフトインストールや設定をします。


2.Linux beanへの DroidCamのインストール
http://www.dev47apps.com/


    ↓
真中の「Download Linux Client」をクリックします。

    ↓
「install」をクリックします。


    ↓
ここにダウンロードやインストールの方法書いています。
・・・が、自分のは 32bit OS なので [Ubuntu18.04LTS] DroidCamでスマホをWebカメラにする方法 を参考にして以下のように実行してみました。

ずらずら書いてますけど、簡単には・・・

cd /tmp
sudo apt-get install linux-headers-`uname -r`
bits=`getconf LONG_BIT`
wget https://www.dev47apps.com/files/600/droidcam-${bits}bit.tar.bz2
tar xjf droidcam-${bits}bit.tar.bz2
cd droidcam-${bits}bit/
sudo ./install

・・・です。
takaq@takaq-FLORA-330-DG5:~$ cd /tmp
takaq@takaq-FLORA-330-DG5:/tmp$ sudo apt-get install linux-headers-`uname -r`
[sudo] takaq のパスワード:
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成していま す               
状態情報を読み取っています... 完了
linux-headers-4.4.0-151-generic はすでに最新バージョン (4.4.0-151.178) です。
linux-headers-4.4.0-151-generic は手動でインストールしたと設定されました。
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libdouble-conversion1v5 libgtkglext1 libmigemo1 libqt5opengl5
  libqt5printsupport5 libqt5qml5 libqt5quick5 libqt5sql5 libqt5sql5-sqlite
  libqt5webkit5 linux-image-3.13.0-170-generic
  linux-modules-3.13.0-170-generic linux-modules-extra-3.13.0-170-generic
  qml-module-qtquick-controls qml-module-qtquick-dialogs
  qml-module-qtquick-layouts qml-module-qtquick-privatewidgets
  qml-module-qtquick-window2 qml-module-qtquick2 smartmontools
これを削除するには 'sudo apt autoremove' を利用してください。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 242 個。
takaq@takaq-FLORA-330-DG5:/tmp$

takaq@takaq-FLORA-330-DG5:/tmp$ bits=`getconf LONG_BIT`
takaq@takaq-FLORA-330-DG5:/tmp$ wget https://www.dev47apps.com/files/600/droidcam-${bits}bit.tar.bz2
--2020-04-02 16:33:30--  https://www.dev47apps.com/files/600/droidcam-32bit.tar.bz2
www.dev47apps.com (www.dev47apps.com) をDNSに問いあわせています... 198.252.98.56
www.dev47apps.com (www.dev47apps.com)|198.252.98.56|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 515422 (503K) [application/x-bzip]
`droidcam-32bit.tar.bz2' に保存中

droidcam-32bit.tar. 100%[===================>] 503.34K   736KB/s    時間 0.7s 

2020-04-02 16:33:32 (736 KB/s) - `droidcam-32bit.tar.bz2' へ保存完了 [515422/515422]
takaq@takaq-FLORA-330-DG5:/tmp$
takaq@takaq-FLORA-330-DG5:/tmp$ tar xjf droidcam-${bits}bit.tar.bz2

takaq@takaq-FLORA-330-DG5:/tmp$ cd droidcam-${bits}bit/
takaq@takaq-FLORA-330-DG5:/tmp/droidcam-32bit$ pwd
/tmp/droidcam-32bit
takaq@takaq-FLORA-330-DG5:/tmp/droidcam-32bit$

takaq@takaq-FLORA-330-DG5:/tmp/droidcam-32bit$ sudo ./install
Webcam parameters: '640' and '480'
Building v4l2loopback-dc.ko
make: ディレクトリ '/tmp/droidcam-32bit/v4l2loopback' に入ります
make -C /lib/modules/`uname -r`/build M=`pwd`
make[1]: ディレクトリ '/usr/src/linux-headers-4.4.0-151-generic' に入ります
  LD      /tmp/droidcam-32bit/v4l2loopback/built-in.o
  CC [M]  /tmp/droidcam-32bit/v4l2loopback/v4l2loopback-dc.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /tmp/droidcam-32bit/v4l2loopback/v4l2loopback-dc.mod.o
  LD [M]  /tmp/droidcam-32bit/v4l2loopback/v4l2loopback-dc.ko
make[1]: ディレクトリ '/usr/src/linux-headers-4.4.0-151-generic' から出ます
make: ディレクトリ '/tmp/droidcam-32bit/v4l2loopback' から出ます
Moving driver and executable to system folders
Registering webcam device
Running depmod
make: ディレクトリ '/tmp/droidcam-32bit/v4l2loopback' に入ります
make -C /lib/modules/`uname -r`/build M=`pwd` clean
make[1]: ディレクトリ '/usr/src/linux-headers-4.4.0-151-generic' に入ります
  CLEAN   /tmp/droidcam-32bit/v4l2loopback/.tmp_versions
  CLEAN   /tmp/droidcam-32bit/v4l2loopback/Module.symvers
make[1]: ディレクトリ '/usr/src/linux-headers-4.4.0-151-generic' から出ます
make: ディレクトリ '/tmp/droidcam-32bit/v4l2loopback' から出ます
Adding uninstall script
Adding driver to /etc/modules
Done

そんで、ターミナルから droidcam とすると以下画面が起動します。

    ↓
「・・・」のところクリックで色々とカメラ操作できるみたいです。


3.WiFiでスマホカメラ(DroidCam Wireless Webcam)に接続
スマホとPCは同じネットワーク上とします。
    ↓
スマホカメラ(DroidCam Wireless Webcam)を起動します。
    ↓
PCのターミナルから「droidcam」を起動します。

takaq@takaq-FLORA-330-DG5:~$ droidcam
Device: Droidcam (v4l2loopback)
Found driver: /dev/video0 (fd:10)
    ↓

    ↓
上記のように入力し「Connect」をクリックします。
スマホカメラ(DroidCam Wireless Webcam)との通信が始まります。
 


残念ながらLinux版の「DroidCam」にはキャプチャ機能がありません。
今のところskypeをインストールしていないので VLC メディアプレーヤーで見てみます。
 
VLCの「メディア」 -> 「キャプチャーデバイスを開く」 -> 「キャプチャーデバイス」タブで以下のように設定します。
    ↓


そして、「再生」をクリックします。





    ↓
止める時は「Stop」クリックします。
そうするとスマホカメラ(DroidCam Wireless Webcam)のキャプチャ画面が閉じます。

いい感じなのですが、自分の環境ではWiFiだとキャプチャにかなりのタイムラグがあります。(監視カメラとしては使えるかもしれませんね)
この感覚でskypeとか使ってインターネット介しての通信はちっと辛いかもしれません。


3.スマホカメラ(DroidCam Wireless Webcam)をUSB接続で使ってみる
さて、今度はスマホカメラ(DroidCam Wireless Webcam)をUSB接続で使ったらどうなのかやってみました。
PC側の設定にかなりハマッタので整理して記録しておきます。

●adbのインストール確認
AndroidスマホをUSB接続して「DroidCam」で接続するには adb (Android Debug Bridge)なるものが必要です。
adbとは、Androidの開発ツールです。詳しくは「adb とは」とかで検索ください。

Synapticパッケージマネージャで確認しました。


    ↑
ありましたね。インストールされていました。
●デバイスが認識されているかの確認と調整
スマホ(Android)をUSB接続する前にUSBデバッグを有効にしておきます。

Android端末の「設定」に「開発者向けオプション」が存在しない場合(Android4.2以降)は次のようにして表示します。

「設定」>「タブレット情報」>「ビルド番号」をタップします(7回)
「設定」>「開発者向けオプション」>「USBデバッグ」を有効化
USB接続を抜き差しするとadb接続することができます。

端末をUSB接続します。

スマホカメラ(DroidCam Wireless Webcam)を起動しておきます。

端末をUSB接続した状態でPCの「DroidCam」を起動しUSBで「Connect」してみました。

takaq@takaq-FLORA-330-DG5:~$ adb start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
takaq@takaq-FLORA-330-DG5:~$ droidcam
    ↓


ところが、以下のエラーで接続できませんでした。
    ↓


なんか、端末が認識されていないような感じ!?

takaq@takaq-FLORA-330-DG5:~$ adb devices
List of devices attached
BISNJ5130LMW    unauthorized

許可されていないって!?
sudo adb start-server でも同じでした。

で、調べまくった結果は以下です。

~/.android/adb_usb.ini にベンダIDを書いてあげます。

ベンダIDはどうやって調べるかというと、以下のようにします。

takaq@takaq-FLORA-330-DG5:~$ lsusb
Bus 001 Device 003: ID 04d9:1400 Holtek Semiconductor, Inc. PS/2 keyboard + mouse controller
Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 0408:b0d1 Quanta Computer, Inc.
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

今回のは、Quanta Computer, Inc.なので、ベンダIDは 0408 です。
~/.android/adb_usb.iniは、sudo su でスーパーユーザになり vi で「0x0408」と記述し新規作成しました。

ルールを有効化します。
takaq@takaq-FLORA-330-DG5:~$ sudo service udev restart

takaq@takaq-FLORA-330-DG5:~$ adb kill-server

takaq@takaq-FLORA-330-DG5:~$ sudo adb start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
takaq@takaq-FLORA-330-DG5:~$ adb devices
List of devices attached
BISNJ5130LMW    device
    ↑
今度はいきましたね!! ( adb start-server だとダメ、 sudo adb start-server だとOK)

※検索した中にあった「/etc/udev/rules-d/51-android.rules にベンダIDを記載」しての方法やってみましたが関係ないようです。

では、スマホカメラ(DroidCam Wireless Webcam)をUSB接続で使ってみましょう。
●スマホカメラ(DroidCam Wireless Webcam)をUSB接続で使ってみる
スマホをPCのUSBに接続します。
デバッグモードで接続になります。スマホが許可を求めてきたら許可します。
    ↓


スマホカメラ(DroidCam Wireless Webcam)を起動しておきます。

PCのターミナルで「 sudo adb start-server 」を実行します。

takaq@takaq-FLORA-330-DG5:~$ sudo adb start-server
[sudo] takaq のパスワード:
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
takaq@takaq-FLORA-330-DG5:~$

PCのターミナルで「 droidcam 」を実行し「Connect」します。
takaq@takaq-FLORA-330-DG5:~$ droidcam
Device: Droidcam (v4l2loopback)
Found driver: /dev/video0 (fd:10)
connecting to 127.0.0.1:4747
    ↓

     ↓
上図のように入力し「Connect」をクリックします。
スマホカメラ(DroidCam Wireless Webcam)との通信が始まります。



VLC メディアプレーヤーで見てみます。
 
VLCの「メディア」 -> 「キャプチャーデバイスを開く」 -> 「キャプチャーデバイス」タブで以下のように設定します。
    ↓


そして、「再生」をクリックします。



止める時は「Stop」クリックします。
そうするとスマホカメラ(DroidCam Wireless Webcam)のキャプチャ画面が閉じます。

いい感じなのですが、自分の環境では USB2.0 のためか約2秒のタイムラグがあります。古いPCなので仕方ないかもしれませんね。
でも、実用には耐えられると思います。


4.DroidCam のランチャーショートカットを作成してみた。
DroidCam を起動するのに一々ターミナルからコマンド入力すると面倒なのでランチャーショートカットを作成して みました。

ターミナルから sudo su でスーバーユーザになり vi で設定ファイルを作成します。

~.local/share/applications に droidcam.desktop に以下を書いて保存します。
[Desktop Entry]
Version=1.0
Type=Application
Name=DroidCam
Comment=あなたのAndroid携帯電話をワイヤレスウェブカメラまたはIPカムとして使用してください。
Exec=droidcam
Icon=droidcam
Path=/usr/bin
Terminal=false
StartupNotify=false
アイコンファイルをWebから取得し、droidcam.png として ~.local/share/icons へ保存します。
これで、スタート -> その他 にランチャーショートカットが追加されます。




5.sudo adb start-server をシェルスクリプトから起動する。
sudo adb start-server もいちいちターミナルからコマンド操作するのも面倒なのでシェルスクリプトを作成してマウスクリックで起動できるようにしてみました。

ただ、sudo なので何もしないとパスワード入力を求められます。
検索した結果「パスワードを入力しなくても済む方法」があったので、記載しておきます。
sudo のパスワードを入力なしで使うには - Qiita を参考にしました。
sudoでは、sudoersファイルにより、sudoの管理者権限などを記述しています。

これを編集することにより、任意のユーザに対してパスワードを入力することなく、sudoを使用できるようにします。

ただし、編集に失敗すると、最悪、sudoが使用できなくなるので、慎重に編集しなければなりません。

そして、編集失敗の悲劇を避けるために、visudo`というものが用意されているので、必ず visudo を使用して編集しましょう。
記述ミスを指摘してくれます。

sudo visudo で起動します。


パスワード入力を無効にするには、以下のような要素を新たに入力を行います。
<username> ALL=NOPASSWD: ALL
上記の方法だと、すべてのコマンドがパスワード無しで使えるようになります。
この場合、ユーザーが乗っ取られてしまうと、やりたい放題されてしまいます。
それほど強力な設定になってしまうので、この方法はおすすめしません。

なので、以下のようにしてファイル内の「# Allow members of group sudo to execute any command」セクションに以下を追記し Ctrl + O、Ctrl + X で保存しました。
takaq   ALL=NOPASSWD:   /usr/bin/adb
これで、sudo adb start-server でもパスワード入力を求められなくなります。

前準備はこれでOKです。

起動シェルを次のように作成して所定のフォルダ(私はホームの下に bash フォルダを作成しました)に adb_start.sh という名前で保存しました。
#!/bin/bash

# set by 2020/04/05
ProcessName=adb -P 5037 fork-server server

count=`ps -ef | grep $ProcessName | grep -v grep | wc -l`
echo $count
if [ $count = 0 ]; then
        echo "$ProcessName is dead"
        sudo adb start-server
else
        echo "$ProcessName is alive"
fi
そして、sudo chmod +x adb_start.sh として実行可にしました。

これで、クリック一発で起動できます。
今日はここまで・・・2020年04月07日(火)


戻る

サイトトップへ