はじめに
本記事はRaspberry Piでストリーミング配信を行う方法について記載しています。
ストリーミング配信を行うことで、映像や音声をリアルタイムで他のデバイスに配信することが可能です。
Raspberry Piを活用して手軽にストリーミング環境を構築したい方の参考になれば幸いです。
ストリーミング配信
ストリーミング配信を行うにあたりRaspberry Piとカメラモジュールを接続します。
本記事では、Raspberry Pi 4 Model Bと、Raspberry Pi PiNoir カメラモジュール V2.1を使用しています。
カメラモジュールの接続
Raspberry Piとカメラモジュールを接続するには、カメラモジュールをCamera Serial Interface(CSI)端子に接続します。
接続する際は、フィルムケーブルの端子側をHDMI端子側に向けてしっかりと奥まで差しこみます。
カメラモジュールが正しく接続されて認識できていることを確認するためには、以下のコマンドを実行します。
$ libcamera-hello
上記コマンドを実行すると、プレビューが5秒間表示されます。-t 0
オプションを使用すると、時間制限なしで表示します。
使用するツール
ストリーミング配信を行うにためには、libcameraとVLCについての基本的な理解が必要です。
libcameraは、従来のLinuxディストリビューション、ChromeOS、AndroidなどのLinuxベースのシステムで動作する組み込みカメラ用のオープンソースです。
libcameraは直感的なAPIを提供するとともに、信頼性の低いベンダーコードをオープンソースのコア部分から分離することにより、組み込みカメラハードウェアにおける複雑な制御を簡素化することを目指しています。
Raspberry Pi OS Bullseye以降、カメラドライバは従来のraspistillやPicameraからlibcameraに置き換えられました。従ってより柔軟で標準化されたカメラ制御が可能となりました。
vlcは「Video LAN Client」の略称であり、フランスの非営利組織であるVideoLANプロジェクトの一部として開発されているマルチメディアプレーヤーです。
再生機能をはじめ、映像や音声のリアルタイム配信にも対応しているため、Raspberry Pi上でlibcameraと組み合わせることで、取得したカメラ映像をネットワーク越しに配信する仕組みを実現できます。
実践
libcamera-vid
コマンドを用いて、Raspberry Piのカメラ映像を動画として出力することができます。
以下のコマンドを実行すると、libcameraがカメラ映像の取得を開始し、映像をTCPストリームとして 127.0.0.1:8888
で待ち受ける状態になります。
$ libcamera-vid -t 0 --inline --listen -o tcp://127.0.0.1:8888
ます。
オプションについて-t 0
は時間制限なし、--inline
はH.264ストリームをインライン形式で出力します。また、--listen
はクライアントからの接続を受け付けるための設定で、-o
で出力するインターフェースを設定します。
上記コマンド実行後、VLCメディアプレーヤーから接続可能です。以下はMacのVLCで接続する例です。
ファイルより「ネットワークを開く」を選択します。
URLに、tcp/h264://[Host]:8888
を入力して「開く」を押します。
プレイリストに表示されるので選択して再生します。
その後ウィンドウが開き映像を出力します。なお、TCP接続の場合、同時に接続できるデバイスは1台のみです。
複数のデバイスを接続したい場合は、cvlc
コマンドを使用すること同時視聴が可能です。
先にlibcamera-vid
コマンドを実行し、接続が行える状態になったらcvlc
コマンドを実行します。
$ libcamera-vid -t 0 --inline --listen -o tcp://127.0.0.1:8888 &
$ cvlc tcp/h264://127.0.0.1:8888 --sout '#standard{access=http,mux=ts,dst=:8080}' --no-sout-all --sout-keep
vlcはiPhoneのアプリがあるので、iPhoneのアプリから同時接続を行います。
iPhoneのアプリで接続する際は、同様に「ネットワークストリームを開く」を選択します。
URLを入力して「ネットワークストリームを開く」を押します。
映像が出力されます。
ホワイトバランスを調整したい場合は、libcamera-vid
コマンドに--awb <mode>
オプションを付与して実行します。
例えば、曇り空の場合は--awb cloudy
オプションを付与します。また、細かく調整したい場合は--awbgains R,G
オプションを使用することで、R及びGのゲインを調整できます。
例:--awbgains 1.5,1.2
おわりに
Raspberry Piを使用したストリーミング配信は、ペットの見守りや子供の見守りなど、さまざまな場面で手軽に活用できます。
低コストかつコンパクトなため、自宅やオフィスでの映像監視システムとしても非常に便利です。