ラズパイの映像ストリーミング。WEBブラウザでサクサク表示する映像にする
ラズパイカメラの映像をネットワークに配信する。下図(1)番の部分を準備します。
ラズパイの環境を確認します。
CoderDojo青梅のラズタンク プロジェクトではRaspberry PI OS(Debian10 OS, コードネーム Buster)を使います。最新はDebian12やDebian11(コードネーム Bullseye)ですが、これはラズパイ専用カメラなど旧機能が使えないなどいろいろあるのでアップグレードはしていません。
$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
ラズパイカメラを使えることを検査する
下記コマンドを実行して detected の値を調べます
$ vcgencmd get_camera
supported=1 detected=0, libcamera interfaces=0
↑ ここを見る
supported=1 detected=0 #認識されてない
supported=1 detected=1 #認識された
[MJPG-streamer]をインストールする
アプリのパッケージをインストールします
$ sudo apt-get install cmake libjpeg8-dev
続行しますか? [Y/n] y
ラズパイを再起動します。もしも下図画面が表示されたら <了解> を押したのち、再起動します
$ sudo reboot
リポジトリ(github)にあるアプリ(mjpg-streamer)をクローンします
$ git clone https://github.com/jacksonliam/mjpg-streamer.git mjpg-streamer
mjpg-streamer ディレクトリへ移動します
$ cd mjpg-streamer/mjpg-streamer-experimental
makeコマンドで「mjpg-streamer」プログラムをソースファイルからビルドして実行可能なプログラムで出力・保存します。少し時間かかります。コマンドプロンプト[$]に戻ったら終了
$ make
参考:C言語などで記述したソースファイル(プログラム/コード)は、コンピュータが実行可能な言語にコンパイル(変換)して、ひとつのファイルにリンク(結合)します。このコンパイルやリンク作業を自動実行できるのが makeコマンドによるビルド作業です。
[MJPG-streamer]を起動する
make を実行したディレクトリに「start.sh」ファイルが出来ていることを確認して、”start.sh”シェルを実行して映像配信サーバーを起動する
$ ./start.sh
映像配信ストリーミングを受信する
ラズパイと同じネットワークに接続されているPCで、WEBブラウザを立ち上げてWEBサーバーにアクセスします。URLは自分のラズパイのIPアドレスにポート番号[:8080]を追加したものです。
http://192.168.xx.xx:8080/
または、映像のみの場合
http://192.168.xx.xx:8080/?action=stream
映像をカスタマイズする
画像を180度回転したり、画像サイズを変更したりできます。
“start.sh”シェルの内容を変更します。原型は下記コードの通り、-iオプションで入力を、-oオプションで出力するように設定されています。
▼原型
$ ./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so -w ./www“
>> 画像サイズ 640x480
>> HTTPポート 8080
>> パスワード 無効
>> WEBコンテンツフォルダ ./www/
画像を180度回転させる場合は、-iオプションを変更します。例えば
▼画像を180度回転する場合、xxxの場所に記述
$ ./mjpg_streamer -i "./input_uvc.so xxxxx" -o "./output_http.so -w ./www“
$ ./mjpg_streamer -i "./input_uvc.so –rot 180" -o "./output_http.so -w ./www“
>> xxxxの部分に指定すること(例 -i "./input_uvc.so –rot 180" )
>> 解像度:-r 1920x1080
>> フレームレート:-f 30
>> ポート番号: --port 8081
>> IDパスワード: -c test:password
>> 水平フリップ:-hf
>> 垂直フリップ:-vf
>> 回転: -rot (0~359)