・Raspberry Pi 3B/ZERO の カメラ で撮影した動画をブラウザで視る

下記は、node-redのダッシュボードにストリーム配信しています。
mjpgst



簡単に配信することが出来たので備忘録を書いておきます。

1.RASPIでの作業

 ①インストール(下記のコマンドを順次コピペして実行します)
 $ sudo apt-get install -y cmake libv4l-dev libjpeg-dev imagemagick
 $ git clone https://github.com/jacksonliam/mjpg-streamer.git
 $ cd mjpg-streamer/mjpg-streamer-experimental
 $ make

 ②動画の配信
 標準カメラの場合
  $ ./mjpg_streamer -o "./output_http.so -w ./www" -i "./input_raspicam.so -x 640 -y 480 -fps 30 -q 10"

 USBカメラの場合
  $ ./mjpg_streamer -o "./output_http.so -w ./www" -i "./input_uvc.so -r 800x600 -fps 30"

 ③配信を強制的に止める場合
 $ ps ax         <--プロセスIDを確認
 $ kill -9 1234  <-- -9は、強制終了

2.動画の受信
 ①ブラウザで http://[ラズパイのIP]:8080/ を開くだけです。

参考URL:Raspberry Pi 3 の標準カメラで撮影した動画をブラウザに配信する方法まとめ


3.MJPG Streamerが、起動しない時

pi@raspberrypi:~ $ ./msstart.sh
MJPG Streamer Version: git rev: 501f6362c5afddcfb41055f97ae484252c85c912
 i: fps.............: 30
+++++++++
 i: Starting Camera
mmal: mmal_vc_component_create: failed to create component 'vc.ril.camera' (1:ENOMEM)
mmal: mmal_component_create_core: could not create component 'vc.ril.camera' (1)
error create camera

上記エラーで、MJPG Streamerが、起動できないときのチェック方法

①カメラが有効になっているか確認
$ sudo raspi-config
5 Interfacing Options => P1 Camera => Yes

②カメラを認識しているか確認

pi@raspberrypi:~ $ vcgencmd get_camera 
supported=1 detected=0 <-------------カメラを認識していない

pi@raspberrypi:~ $ ls -al /dev/video* <------ /dev/video0が無い
crw-rw----+ 1 root video 81, 0  1月 21 16:07 /dev/video10
crw-rw----+ 1 root video 81, 1  1月 21 16:07 /dev/video11
crw-rw----+ 1 root video 81, 2  1月 21 16:07 /dev/video12

調べた結果、カメラのコネクタが外れかかっていた。再度差し込み

pi@raspberrypi:~ $ vcgencmd get_camera
supported=1 detected=1 <-------------カメラを認識した

pi@raspberrypi:~ $ ls -al /dev/video*
crw-rw----+ 1 root video 81, 3  1月 21 16:27 /dev/video0 <------ /dev/video0が表示
crw-rw----+ 1 root video 81, 0  1月 21 16:27 /dev/video10
crw-rw----+ 1 root video 81, 1  1月 21 16:27 /dev/video11
crw-rw----+ 1 root video 81, 2  1月 21 16:27 /dev/video12

4.mjpg_streamer の起動用と停止用のシェルスクリプトを書いて簡単に実行できるにした。
 
 ①mjpg_streamer の起動シェル 「msstart.shの内容」

pi@raspberrypi:~ $ cat msstart.sh

#!/bin/sh
if pgrep mjpg_streamer > /dev/null
then
    echo "mjpg_streamer already running"
else
    cd mjpg-streamer/mjpg-streamer-experimental/
    ./mjpg_streamer -o "./output_http.so -w ./www" -i "./input_raspicam.so -rot 270 -x 640 -y 480 -fps 30 -q 10"> /dev/null 2>&1&
    echo "mjpg_streamer started"
fi

 ②mjpg_streamer の停止シェル 「msstop.shの内容」

pi@raspberrypi:~ $ cat msstop.sh

#!/bin/sh
if pgrep mjpg_streamer
then
    kill $(pgrep mjpg_streamer) > /dev/null 2>&1
    echo "mjpg_streamer stopped"
else
    echo "mjpg_streamer not running"
fi

5.カメラの取り付け方により回転したいときのオプション 「-rot」
①ラズパイカメラのオプション指定(google 翻訳済み)

$ ./mjpg_streamer -i "input_raspicam.so --help"

 -------------------------------------------------- -------------
 入力プラグインのヘルプ..:raspicam入力プラグイン
 -------------------------------------------------- -------------
 次のパラメーターをこのプラグインに渡すことができます。

 [-fps | --framerate] ...:ビデオフレームレートの設定、デフォルトは5フレーム/秒
 [-x | --width] ........:フレームキャプチャの幅、デフォルトは640
 [-y | --height] ........:フレームキャプチャの高さ、デフォルトは480
 [-quality] .............:JPEG品質を0〜100に設定、デフォルトは85
 [-usestills] ...........:ビデオモードの代わりに静止モードを使用します
 [-preview] .............:全画面プレビューを有効にします
 [-timestamp] ...........:各フレームのタイムスタンプを取得します

 -sh:画像の鮮明度を設定します(-100〜100)
 -co:画像のコントラストを設定します(-100〜100)
 -br:画像の明るさを設定します(0〜100)
 -sa:画像の彩度を設定します(-100〜100)
 -ISO:キャプチャISOを設定します
 -vs:ビデオの安定化をオンにします
 -ev:EV補正を設定します
 -ex:露出モードを設定します(raspistill notesを参照)
 -awb:AWBモードを設定します(raspistill notesを参照)
 -ifx:画像効果を設定します(raspistill notesを参照)
 -cfx:色効果の設定(U:V)
 -mm:メータリングモードを設定します(raspistill notesを参照)
 -rot:画像の回転を設定します(0-359)
 -stats:各画像の画像統計を計算します(-usestillsのノイズを減らします)
 -drc:ダイナミックレンジ補正レベル(raspistill notesを参照)
 -hf:水平反転を設定します
 -vf:垂直フリップを設定します
 -------------------------------------------------- -------------


②WEBカメラのオプション指定(google 翻訳済み)
 
$ ./mjpg_streamer -i "input_uvc.so --help"

 -------------------------------------------------- -------------
 入力プラグインのヘルプ..:UVC webcam grabber
 -------------------------------------------------- -------------
 次のパラメーターをこのプラグインに渡すことができます。

 [-d | --device] .......:開くビデオデバイス(カメラ)
 [-r | --resolution] ...:ビデオデバイスの解像度、
                          次の文字列のいずれかです。
                          QQVGA QCIF CGA QVGA CIF PAL
                          VGA SVGA XGA HD SXGA UXGA
                          FHD
                          または次のようなカスタム値
                          例:640x480
 [-f | --fps] ..........:1秒あたりのフレーム数
                          (カメラは異なる値に強制される場合があります)
 [-q | --quality] .>....:JPEGエンコーディングの品質を設定します
 [-m | --minimum_size]> .:この制限よりも小さいフレームをドロップします。便利です
                          ウェブカメラが小さなサイズのガベージフレームを生成する場合
                          低照度条件下で発生する可能性があります
 [-e | --every_frame] ..:番号付き以外のすべてのフレームをドロップします
 [-n | --no_dynctrl] ...:Linux-UVCドライバーのdynctrlを初期化しません
 [-l | --led] ..........:LEDを「オン」、「オフ」に切り替え、「点滅」または終了させます
                          値「auto」を使用するドライバー次第
 [-t | --tvnorm] ......:TV-Norm pal、ntscまたはsecamを設定します
 [-u | --uyvy] ........:UYVY形式を使用、デフォルト:MJPEG(より多くのCPUパワーを使用)
 [-y | --yuv] ........:YUV形式を使用、デフォルト:MJPEG(より多くのCPUパワーを使用)
 [-fourcc] ............:FOURCCコーデック「argopt」を使用します。
                          現在サポートされているコーデックは次のとおりです。RGBP
 [-timestamp] ..........:フレームタイムスタンプにシステム時間を入力します
 [-softfps] ............:このfpsを試行して達成するためにフレームをドロップします
                          f音を避けるために、カメラを最大fpsに設定します
 [-timeout] ............:デバイスクエリのタイムアウト(秒)
 [-dv_timings] .........:DVタイミングクエリとイベント処理を有効にします
 -------------------------------------------------- -------------

 オプションのパラメーター(すべてのカメラでサポートされているわけではありません):

 [-br] .................:画像の明るさを設定します(自動または整数)
 [-co] .................:画像のコントラストを設定します(整数)
 [-sh] .................:画像の鮮明度を設定します(整数)
 [-sa] .................:画像の彩度を設定します(整数)
 [-cb] .................:カラーバランスの設定(自動または整数)
 [-wb] .................:ホワイトバランスの設定(自動または整数)
 [-ex] .................:露出を設定します(自動、シャッター優先、絞り優先、または整数)
 [-bk] .................:逆光補正の設定(整数)
 [-rot] ................:画像の回転を設定します(0-359)
 [-hf] .................:水平反転を設定(true / false)
 [-vf] .................:垂直フリップの設定(true / false)
 [-pl] .................:電力線フィルターの設定(無効、50hz、60hz、自動)
 [-gain] ...............:ゲインの設定(自動または整数)
 [-cagc] ...............:クロマゲインコントロールの設定(自動または整数)
 -------------------------------------------------- -------------