Raspberry Pi Zero W カメラ映像をリアルタイムでストリーミングする方法

Raspberry Pi Zero W を使って、カメラ映像をリアルタイムでストリーミングする方法をご紹介します。

 

1.カメラを有効化

sudo raspi-config

sshで接続し、コマンドを実行し設定画面を開きます。
カメラオプションを探し、有効化しましょう。



最後に再起動して変更を反映させます。

コマンドを実行してカメラが認識されているか確認しておきましょう。

vcgencmd get_camera

supported=1 detected=1と表示されれば問題ありません。

 

2.  UV4Lをインストール

まず、パッケージを追加します。

curl http://www.linux-projects.org/listing/uv4l_repo/lpkey.asc | sudo apt-key add -
echo 'deb http://www.linux-projects.org/listing/uv4l_repo/raspbian/stretch stretch main' | sudo tee -a /etc/apt/sources.list

次に、パッケージをアップデートして、UV4Lをインストールします。

sudo apt-get update
sudo apt-get install uv4l uv4l-raspicam uv4l-raspicam-extras

webRTCもインストールして使いやすくします。

sudo apt-get install uv4l-webrtc-armv6

* Pi1,Zero, Zero W は”uv4l-webrtc-armv6”ですが、Pi2, Pi3などは”uv4l-webrtc”です!

最後に再起動して準備完了!

sudo shutdown -r now

 

3.ブラウザでチェック

ブラウザを開いて、

http://raspberryip:8080/stream/video.mjpeg

にアクセスするとストリーミング動画が再生されます。

が、しかし!
動画がカクカクですね。

設定を変えて、スムーズに見れるようにしましょう。

 

4.コマンドを使ってUV4Lをスタート

まず、すでに走っているUV4Lをストップします。

sudo pkill uv4l

次に、好みのオプション設定でUV4Lをスタートします。

uv4l --auto-video_nr --driver raspicam --encoding mjpeg --server-option '--port=8080' --width 640 --height 480

私の環境では、遅延が0.3秒ぐらい。
ロボットからの映像を確認するには十分です!

 

5. 設定ファイルを変更

Raspberry pi zero w を起動するたびにuv4lを終了し、好みのオプションでコマンドから再度起動するのは面倒ですよね。
そこで、設定ファイルを変更して、好みのオプションで最初から起動するようにしましょう。

エディタでuv4l-raspicam.confを開いて設定を変更します。

sudo nano /etc/uv4l/uv4l-raspicam.conf

私は画像サイズを小さく変更しました。

width = 640
height = 480

これで、Raspberry Pi Zero W を起動するだけでストリーミング動画をリアルタイムでブラウザから見れるようになりました!!!

 

6.UV4Lをストップ

sudo pkill uv4l

UV4Lを終了してからRaspbianをShutdownしましょう。
そうしないと、RaspbianのShutdownがうまく処理されず、Raspbianが再起動されなかったり、無理やり電源を切って終了させないといけなくなってしまいます。

 

<トラブルシューティング>

Raspbianが固まる

デフォルト設定のまま高画質の映像をストリーミングしているとたまにSSHが切断され、Piにアクセスできなくなることがあります。
画像処理用のメモリースペースが足りなくなっていることが原因のようです。必要に応じてGPUメモリーの割り当て容量を増やすか、画像サイズを小さくしましょう。

ストリーミングされない

http://raspberryip:8080/stream

このURLを試して、ストリーミングできるなら、”uv4l-webrtc”のバージョンが間違ってます。ステップ2でも書きましたが、Pi1,Zero, Zero W は”uv4l-webrtc-armv6”ですが、Pi2, Pi3などは”uv4l-webrtc”です!

アンドロイドでWebViewを使うと表示サイズがおかしい

http://raspberryip:8080/streamからストリーミング用HTMLを拾ってくると、ブラウザでは指定した大きさで表示されるのに、アンドロイドのWebViewで表示サイズが設定サイズより大きく表示されます。これは、参照先HTML内のViewportの設定が間違っているからです。
こっちのURLだと、WebViewで指定した画像サイズで表示できました。

http://192.168.3.10:8080/stream/video.mjpeg

h264の場合は、

http://192.168.3.10:8080/stream/video.h264

ただ、よくわからないのが設定ファイルでエンコーディングをmjpegに指定していてもvideo.h264に繋がるんですよね。このURLをリクエストした時点でエンコーディングの設定をサーバー側で変更してるのかな???

タイトルとURLをコピーしました