ラズパイで映像をストリーミングしてみた

この記事はギークフィードアドベントカレンダー2023の6日目の記事です。

https://qiita.com/advent-calendar/2023/geekfeed

 

はじめに

こんにちは、geekfeedのwadaです。

普段はYouWireというソフトウェアの開発にかかわっているのですが、業務外ではRaspiなどのハードウェア関係のものも触ることも多いです。

本記事では、Raspiを使ったIoTの定番として映像のストリーミングをしたいと思います。

映像のストリーミングをすると、ネットワークにつながっていれば遠隔からでいろいろなものを監視できたりするので結構楽しいです。

私は観葉植物を観察したりしています。

 

前提

以下の2つができることが前提です。

1.ラズパイにアクセスできること

2.カメラモジュールがあること

手順

1.カメラデバイスの接続確認

以下のコマンドでカメラデバイスの状態を確認できます。

detected = 0 detected = 1
supported = 0 カメラポートが有効化されていない
( raspi-config を設定 )
supported = 1 カメラモジュールが正しく認識できていない 正しく認識されている

 

2.使用デバイスの確認

v4l2-ctl コマンドでカメラモジュールに割り当てられているデバイスファイルを確認することができます。v4l2-ctlとは、Video for Linux 2(V4L2) APIを使用してビデオデバイスを制御するためのユーティリティです。V4L2は、Linuxカーネルでビデオデバイス(ウェブカメラ、TVチューナーなど)を操作するためのAPIです。v4l2-ctlは、このAPIを使用してデバイスの設定や状態の確認を行うためのコマンドラインツールです。

この場合、 /dev/video0 というファイルにカメラモジュールが割り当てられていることがわかります。

 

3.デバイスの性能確認

上記で調べたデバイスファイルを以下のように指定することで

v4l2-ctl -d /dev/video --list-formats

カメラの対応コーデック、解像度、fpsなどが確認できます。

この場合は、カメラがh.264コーデックに対応していることがわかります。

一般に、市販のwebカメラはPC側でエンコードする前提で設計されているものが多いので、カメラ側に h.264ハードウェアエンコーダを搭載していません。しかし、h.264コーデックに対応したものであれば、raspiの負荷が少なくなると思われます。

 

4.ストリーミング開始

以下のコマンドで映像をストリーミングできます。

ストリーミングする際のFPSに関して、一時的な動作を確認する防犯カメラ的な用途であれば3~5fps、AIなどの物体検知をしたい場合は10~30fpsが必要だといわれています。このコマンドでは30 fpsに設定しています。

 

5.外部からの接続

vlcメディアプレイヤーを使う場合は以下のコマンドで動画を取得できます。

これでネットワークにアクセスできれば動画を見ることができるようになりました。

終わりに

クライアントを強制終了するとストリーミングが終了する

raspivid の問題だと思うのですが、クライアントの接続を強制的に切ったり、長時間映像をストリーミングしていると raspivid が終了するようです。

どちらのエンコーダが使われているのかわからない

Raspberry PIはPico以外のすべてのモデルにH.264ハードウェアエンコーダを搭載しているようです。カメラモジュールにもエンコーダが搭載されている場合はどちらのエンコーダが使われるのかわからなかったです。

これに関しては  raspivid のマニュアルを調べたり、 v4l2-ctl でデバイスの状態を詳しく調査すればわかると考えています。

 

この記事が気に入ったら
いいね ! しよう

Twitter で
The following two tabs change content below.
アバター
wada
YouWireという商品の開発にかかわっています。 数学と工学が好きです。ソフトウェアと工学を組み合わせて様々なものの自動化をしたいと考えています。今の興味は植物の栽培で、個人で野菜の栽培を自動化できたら楽しいと思っています。

【採用情報】一緒に働く仲間を募集しています

採用情報
ページトップへ