Raspberry PiでRTSPネットワークカメラを構築する方法

1. はじめに

今回は、自分自身への備忘録を兼ねて、Raspberry PiでRTSPネットワークカメラの構築方法を、お伝えしたいと思います。

参考文献:【小ネタ】Raspberry Pi と USB接続のWebカメラ でRTSPサーバを作って動画を配信する

1-1. この記事を読んでできること

  • Raspberry Piを用いた、RTSPネットワークカメラの構築ができるようになる。

2. Raspberry Pi 用の microSDカード作成

ここでは、Raspberry Pi の microSDカードを作成します。今回は、PC と Raspberry Pi を直接、有線LAN接続し、セットアップをすすめますので、そのための事前準備もおこないます。

2-1. OSイメージファイル(RASPBIAN Buster WITH DESKTOP)の入手

  • 以下のURLから、OSイメージファイル(RASPBIAN Buster WITH DESKTOP)をダウンロードする。OSイメージファイルは、NOOBSでもよいらしいが、少しセットアップがややこしくなるらしいので、ここでは、Raspbianを推奨します。
RASPBIAN_Buster_WITH_DESKTOPダウンロードサイトURL
https://www.raspberrypi.org/downloads/raspbian/

参考:この記事作成時のファイルバージョン:2019-09-26-raspbian-buster-full.zip

 

2-2. microSDカードのフォーマット

  • SD Formatter for Windowsなどのソフトを用いて、使用するmicroSDカードをフォーマットしておく。

2-3. microSDカードへOSイメージの書き込み(所要時間:15分)

  • Etcherなどのソフトを用いて、使用するmicroSDカードへOSイメージを書き込む。

2-4. Raspberry Pi の有線LAN 固定IPアドレスの設定

  • Visual Studio Codeなどのテキストエディタを用いて、microSDカード直下フォルダの「cmdline.txt」ファイルを開き、1行目の行末に固定IPアドレスを追記し、保存する。保存の際は、テキストファイルの文字コード、改行コードが変わらないよう注意すること。 スクリーンショット (9).png

スクリーンショット (11).png

cmdline.txt
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=49783f5b-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh splash plymouth.ignore-serial-consoles ip=192.168.1.2

2-5. Raspberry Pi のSSH有効化の設定

  • microSDカード直下フォルダにファイル名「ssh」(空ファイル拡張子なし)で新規作成する。保存の際は、不要なファイル拡張子(.txt等)が付かないよう注意すること。

2-6. Raspberry Pi のWi-Fi設定

  • あらかじめWi-Fi設定を済ませておきたい場合に設定してください。
  • 設定に自信がない方は、このあとの手順で、Raspberry Pi の GUIからでも設定できます。
  • microSDカード直下フォルダにファイル名「wpa_supplicant.conf」(改行コード:LF)で新規作成し、ファイルの内容を以下のとおり設定する。(ssidとパスワードpskは、各自の環境に合わせて設定してください。)
wpa_supplicant.conf
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
        ssid="----Your-WiFi-SSID----"
        psk="----PLAIN-PASSPHRASE----"
}

2-7. microSDカード の完成

  • 完成した microSDカード を、PCからおもむろに抜き取る。

3. PCの有線LAN 固定IPアドレス設定

ここでは、PC側(Windwos / Mac)の有線LAN IPアドレスを、固定IPアドレスに設定します。
普段、PCを有線LANでお使いの方は、一時的にオフラインとなります。このあと、Raspberry Pi側で、無線LANネットワークを利用し、オンライン認証が必要となります。必ず、無線LANネットワークが確保できている状況でこれからの作業を進めてください。お持ちのPCに、有線LANポートが付いていない場合は、USB型のイーサネットアダプタ等をご用意ください。

3-1. イーサネットのアダプタオプション変更

  • 「Windowsアイコン」→「設定」→「ネットワークとインターネット」→「アダプタのオプションを変更する」を選択する。

スクリーンショット (13).png

 

  • ネットワーク接続画面の「イーサネット」を右クリックし、「プロパティ」を選択する。
  • イーサネットのプロパティ画面で、「インターネットプロトコルバージョン4(TCP/IPv4)を選択し、「プロパティ」ボタンをクリックする。

スクリーンショット (14).png

 

  • 全般タブ内の「次のIPアドレスを使う」をチェックし、「IPアドレス」および「サブネットマスク」を設定し、「OK」ボタン、「適用」ボタンをクリックする。 スクリーンショット (15).png
IPアドレス
192.168.1.1
サブネットマスク
255.255.255.0

 

  • これで、PCの固定IPアドレス(192.168.1.1)と、Raspberry Piの固定IPアドレス(192.168.1.2)の設定が完了し、有線LANケーブルを用いて接続できる準備がととのいました。今回の方法を用いることで、通常、Raspberry Piのセットアップで必要となる、USBキーボード、USBマウス、HDMIケーブル、モニタ等を用意せずともRaspberry Piのセットアップを進めることができます。Alexa Voice Service(AVS)のセットアップに限らず、今回の方法を活用してみてください。

4. PC(Windows / Mac)からRaspberry PiへSSH&VNC接続

ここでは、Raspberry Piへ遠隔操作(SSH&VNC接続)するため、PC(Windows / Mac)とRaspberry Piの接続(有線LAN接続)をおこないます。

4-1. Raspberry Piの起動

  • Raspberry Piの必須デバイス(USBカメラ)を接続する。
  • Raspberry Piの電源をONにし、Raspberry Piにたましいを吹き込む。

4-2. PC と Raspberry Pi との有線LAN接続

  • Raspberry Pi の有線LANポートにLANケーブルをぶっさす。
  • 片方のLANケーブルを、PCの有線LANポートにぶっさす。
  • PCで、ターミナル端末を起動(Windowsの場合は、Win旗印をクリックし、「cmd」を入力後、コマンドプロンプトをクリックすると真っ黒画面が起動する。)
  • ターミナル端末から、pingコマンドを実行し、ネットワークの疎通確認をする。
pingコマンド(疎通確認PC→RaspberryPi)
C:\> ping 192.168.1.2

cmd.png

 

4-3. SSHクライアントでの接続

  • PCで、SSHクライアント(TeraTerm 等)を起動し、ホストにRaspberry Piの固定IPアドレス「192.168.1.2」またはホスト名「raspberrypi.local」を入力し、OKボタンをクリックする。 teraterm1.png

 

  • セキュリティ警告が出た場合は、「続行」ボタンをクリックする。 teraterm2.png

 

  • SSH認証画面で、ユーザ名とパスフレーズを入力し、「OK」ボタンをクリックする。
ユーザ名(デフォルト)
pi
パスフレーズ(デフォルト)
raspberry

 

  • SSHクライアントで、ログインが確認できたことを確認する。 teraterm4.png

 

4-4. 環境設定の設定(SSHクライアントでの操作)

  • SSHクライアントから、以下の操作をおこない、環境設定「タイムゾーン」と「VNC接続の許可」を設定する。
環境設定
$ sudo raspi-config

4 Localisation Options → I2 Change Timezone → Asia → Tokyo

5 Interfacing Options → P3 VNC → YES → Ok

設定が済んだら、「Finishi」を選択し、環境設定を終了する。

teraterm5.png

 

teraterm6.png

 

teraterm7.png

 

teraterm8.png

 

4-5. VNCクライアントでの接続

  • VNCクライアントを起動し、Raspberry Piの固定IPアドレスまたはホスト名「raspberrypi.local」を入力し、接続する。
RaspberryPiの固定IPアドレス
192.168.1.2

キャプチャ5.PNG

 

  • VNCクライアントで、Raspberry Piのパスワードを入力し、接続する。
RaspberryPiのパスワード(デフォルト)
raspberry

vnc2.png

 

4-6. Raspberry Piで無線LAN(Wi-Fi)接続する(VNCクライアントでの操作)

そろそろ大詰めですが、ここからのコマンド操作では、オンラインでの認証作業が必要となり、Raspberry Piをオンラインに接続する必要があります。手順に従い、Raspberry Piをオンライン状態にしてください。

  • VNCクライアントから、ネットワークアイコンをクリックし、各自の無線LANアクセスポイント(Wi-Fi)に接続する。 キャプチャ6.PNG

 
- VNCクライアントでの、Raspberry Piで無線LAN(Wi-Fi)接続が完了したら、ネットワークアイコンが、無線LANアイコンに代わることを確認する。
キャプチャ7.PNG

 

4-7. Raspberry Pi のソフトウェアアップデートおよびファームウェアアップデートの実行

アップデートコマンド&アップグレードコマンド
$ sudo apt update
$ sudo apt upgrade

このコマンドで、「パッケージ一覧の更新」および「パッケージの更新」が完了します。

5. Raspberry PiへRTSPをセットアップ(SSHクライアントでの操作)

やっとこさ、準備が整いましたね。手順としては、残すところあとわずかです。

5-1. SSHクライアントからRaspberry Piへ接続する。

ssh1.png

5-2. USBカメラをRaspberry Piに接続する。

5-3. USBカメラの認識を確認する。

  • /dev/video0が表示されること。
コマンド
$ v4l2-ctl --list-devices

cm2835-codec-decode (platform:bcm2835-codec):
        /dev/video10
        /dev/video11
        /dev/video12

UVC Camera (046d:080a) (usb-3f980000.usb-1.2):
        /dev/video0
        /dev/video1

5-4. /etc/modulesにbcm2835-v4l2を追加する。

  • 「bcm2835-v4l2」を末尾に追記すること。
コマンド
$ sudo vi /etc/modules

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

i2c-dev
bcm2835-v4l2

5-5. v4l2rtspserverをインストールする。

コマンド
// モジュールのインストール
$ sudo apt-get install cmake
$ sudo apt-get install subversion
$ sudo apt-get install liblivemedia-dev

// 任意の作業ディレクトリに移動
$ cd ~/Documents/

// コンパイル&インストール
$ git clone https://github.com/mpromonet/h264_v4l2_rtspserver.git
$ cd h264_v4l2_rtspserver
$ sudo cmake .
$ sudo make install

// インストール後の確認
$ ls -la /usr/local/bin/v4l2rtspserver

6. Raspberry PiからRTSPネットワークカメラ映像を配信

コマンド
$ sudo v4l2rtspserver

7. Windows10のVLCメディアプレイヤーでRTSPネットワークカメラ映像を確認

  • メニューから「メディア」 > 「ネットワークストリームを開く」 を選択する。

  • 「ネットワークURL」に以下のURLを設定する。
    rtsp://raspberrypi.local:8554/unicast
    または固定IP指定
    rtsp://192.168.1.2:8554/unicast
    で入力し、「再生」ボタンをクリックする。

image.png

image.png

8. Raspberry Pi起動時にサービス自動起動するようにする。

  • /etc/rc.localファイルに /usr/local/bin/v4l2rtspserver -W 1280 -H 720 -F 3 を追記する。(-Wに横幅、-Hに高さ、-Fにフレーム数を指定する。)
  • フレーム数に7~8以上指定すると、比較的カクツキの少ない映像配信ができるかと思います。
コマンド
$ sudo vi /etc/rc.local

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

/usr/local/bin/v4l2rtspserver -W 1280 -H 720 -F 3

exit 0

8. Raspberry Piを再起動して、RTSPネットワークカメラのサービス自動起動を確認する。

コマンド
// Raspberry Piを起動
$ sudo shutdown -r now

9. おわりに

みなさまの学習の参考になれば幸いです。

2019/10/26 TAKAHIRO NISHIZONO

10. 追記その1:supervisorを用いたデーモン化

  • /etc/rc.localに追記したサービス自動起動の場合、v4l2rtspserverがダウンした時のリスタートやログ出力が管理できていないので、supervisorを用いたデーモン化をしてみました。
  • 事前準備として、/etc/rc.localファイルに追記した1行を削除またはコメントアウトし、rasberry pi を一度再起動しておいてください。(v4l2rtspserverのプロセスが停止しており、ポート番号8554が空いている状態にするため)

参考文献:Raspberry Piに【Supervisor】をインストールして、motionをデーモン化してみた

10.1 supervisorのインストール

コマンド
$ sudo apt-get update
$ sudo apt-get install supervisor

10.2 conf設定ファイルの新規作成

コマンド
$ sudo vi /etc/supervisor/conf.d/v4l2rtspserver_sv.conf
// 以下の内容を新規ファイルに追記し保存する。

[program:v4l2rtspserver]
command=/usr/local/bin/v4l2rtspserver -W 1280 -H 720 -F 3  ; 起動コマンド
user=pi               ; 起動ユーザー
autostart = true      ; 自動起動
autorestart = true    ; 自動リスタート
numprocs=1            ; 起動するプロセス数
redirect_stderr=true  ; エラー出力を標準出力にリダイレクト
stdout_logfile=/var/log/v4l2rtspserver.log  ; 標準出力ログのファイル名

10.3 conf設定ファイルの再読み込み

コマンド
$ sudo supervisorctl reread
v4l2rtspserver: available

10.4 サブプロセス追加反映

コマンド
$ sudo supervisorctl add v4l2rtspserver
v4l2rtspserver: added process group

10.5 supervisorステータスの確認

  • ステータス状態が「RUNNING」であれば、すでにv4l2rtspserverがデーモン化して起動中となります。ステータス状態が「FATAL」の場合は起動失敗しているので、ログ出力ファイル「/var/log/v4l2rtspserver.log」を確認しましょう。
コマンド
$ sudo supervisorctl status
v4l2rtspserver                   RUNNING   pid 1000, uptime 0:00:01
zono_0
( ɵ̷̥̥᷄ .̠ ɵ̷̥̥᷅ ) バイク:Vストローム250 パソコン:Ryzen 2700x カメラ:PENTAX K-r 派 動画編集:DaVinci Resolve 15 Qiita:http://qiita.com/zono_0 川崎市近郊バイクツーリングマップ:http://bit.ly/2GGMc9J
ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
コメント
この記事にコメントはありません。
あなたもコメントしてみませんか :)
すでにアカウントを持っている方は
ユーザーは見つかりませんでした