ラズベリーパイを使ったライブストリーミングには複数の方法があるようです。
motionr、v4l2rtspserver、RPi-Cam-Web-Interface、MJPG-streamer…など。
Zeroで使うものとして、v4l2rtspserver、RPi-Cam-Web-Interface、MJPG-streamerの3つをやってみます。
OSイメージはRaspberry Pi OS Lite(32-bit Bullseye)です。
インストールについてはここ参照
カメラはラズベリーパイCSIカメラモジュールを使います。
MJPG-streamerについてはラズパイ3とWebカメラでライブ・ストリーミング(メモ)もご参照ください。
Zeroのレガシーカメラインターフェースを有効化しておきます
OSイメージ(Lite)はヘッドレスです。
SSHで接続して、以下から、Interface Options -> Legacy Camera で有効にしておきます。
1 |
sudo raspi-config |
v4l2rtspserver
VLC media playerのようなRTSP対応動画アプリでネットワークストリームを開いて画像を取得します。
インストール
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#準備 sudo apt install cmake git -y sudo apt install liblivemedia-dev libv4l-dev -y #追加 sudo apt-get install libssl-dev #音声もストリーミングする場合 sudo apt install libasound2-dev #v4l2rtspserverをgitクローンしてコンパイル cd ~/ git clone https://github.com/mpromonet/v4l2rtspserver.git cd v4l2rtspserver sudo cmake . sudo make install |
実行、RTSPサーバーを起動
1 |
~/v4l2rtspserver/v4l2rtspserver -F 15 -W 1440 -H 1080 -P 8080 |
クライアント側
VLC media playerのようなRTSP対応動画アプリでネットワークストリームを開きます。
VLC media playerは多くのプラットフォームに対応しているメジャーな無料アプリです。
WindowsなどにVLCをインストールして、メニュから「メディア」->「ネットワークストリームを開く」を選択
以下を入力
1 |
rtsp://[ラズパイIPアドレス]:8080/unicast |
再生を実行
自動起動するようにsystemdに登録しておく場合
1 |
sudo nano /etc/systemd/system/v4l2rtspserver.service |
以下を記述
1 2 3 4 5 6 7 8 9 10 11 12 |
[Unit] Description=v4l2rtspserver rtsp streaming server After=network.target [Service] ExecStartPre=/usr/bin/v4l2-ctl --set-ctrl horizontal_flip=0,vertical_flip=0,video_bitrate=10000000,brightness=50,white_balance_auto_preset=7,saturation=30 ExecStart=/home/pi/v4l2rtspserver/v4l2rtspserver -F 15 -W 1440 -H 1080 -P 8080 Type=simple User=root Group=video Restart=always [Install] WantedBy=multi-user.target |
登録
1 2 3 |
sudo systemctl enable v4l2rtspserver.service sudo systemctl start v4l2rtspserver.service |
Audio Streaming については調査中
RPi-Cam-Web-Interface
配信用のWebサーバーを立てることで、外部ブラウザーから見ることができます。
インストール
1 2 3 4 5 6 7 8 9 10 11 |
sudo apt install git cd ~/ git clone https://github.com/silvanmelchior/RPi_Cam_Web_Interface.git cd RPi_Cam_Web_Interface chmod u+x *.sh ./install.sh |
インストールの途中で設定を聞いてきます。
Webサーバーは3種類選択できます。Apache・nginx・lighttpd
メモリ消費量が少なく、CPU負荷の少ない高速動作がウリのlighttpd(ライティ)を使ってみます。
設定変更する場合は、マニュアル入力します。
後はたいていはデフォルトでOKです。
最後にStartするかどうか聞いてくるので「Yes」。
外部ブラウザでアクセスします。
1 |
http://[ラズパイIPアドレス]:80 |
メニュはこんな感じで多機能です。
動画像は以下の場所に保存されます。
/var/www/html/media
AutoStartに設定していますが、stop.sh、start.shで再起動できます。削除する場合はremove.sh 。
使い方とかの詳細はGitHub参照
MJPG-streamer
2023/07/08 Update (Bullseye に対応)
インストール
1 2 3 4 5 6 7 8 9 10 11 12 13 |
sudo apt update sudo apt install -y git cmake libjpeg-dev cd ~/ git clone https://github.com/neuralassembly/mjpg-streamer.git cd mjpg-streamer/mjpg-streamer-experimental make sudo make install |
カメラの番号をチェック
1 |
ls /dev/video* |
カメラが/dev/video0 にアサインされているとします。
ポート:8080でキャストしてみます。
~/mjpg-streamer/mjpg-streamer-experimental/mjpg_streamer -i "./input_uvc.so -d /dev/video0 -r 640x480 -f 10 -y -n" -o "./output_http.so -w ./www -p 8080"
ブラウザで受信
http://raspberrypi.local:8080
受信はブラウザでもいいですが、PythonからOpenCVを使って、ストリーミングされた画像をキャプチャしてみます。
OpenCVインストール
sudo apt install -y libatlas-base-dev
pip install numpy –upgrade
バージョン無しだと最新版がインストールされますが、その場合エラーになることがあります。比較的安定とされているバージョンを指定してインストールします。
pip install opencv-python==4.6.0.66
IPアドレスが192.168.0.10だとします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import cv2 URL = "http://192.168.0.10:8080/?action=stream" s_cap = cv2.VideoCapture(URL) while True: ret, img = s_cap.read() cv2.imshow("Streaming from Zero",img) key = cv2.waitKey(1) if key == 27: #Escキーで終了 break s_cap.release() cv2.destroyAllWindows() |
OpenCV 回転
時計回りに90度
img = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
反時計回りに90度
img = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)
180度
img = cv2.rotate(img, cv2.ROTATE_180)
Appendix
カメラのFFCケーブルを固定するツメが壊れた!場合
めったにないことですが、管理人のような雑な性格のものはしばしばやらかします(Zeroや3などで3回やった経験者です)。
でも、なんとかなります。
ケーブルはこんな具合に、黒のツメで挟んで固定します。
一度固定してしまえば、抜けることはあまりありません。後はツメを無くさないように注意することです。
Leave a Reply