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

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

 

1.カメラを有効化

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



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

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

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

 

2.  UV4Lをインストール

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

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

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

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

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

 

3.ブラウザでチェック

ブラウザを開いて、

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

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

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

 

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

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

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

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

 

5. 設定ファイルを変更

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

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

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

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

 

6.UV4Lをストップ

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

 

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

Raspbianが固まる

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

ストリーミングされない

この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で指定した画像サイズで表示できました。

h264の場合は、

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

Scroll to top