ネットワークカメラの映像をラズパイでモニタする

IT・DX

 以前のブログで、店舗の音楽サーバ店舗温湿度店舗新築をUPしましたが、今回はそれらにも関係する防犯(監視)カメラの話です。
 当店には離れたところからでも店舗の様子が分かるようにアイ・オー・データのネットワークカメラを設置しています。現在の機種は2020年に購入したTS-WRLPで確かAmazonで6000円程度だったかと記憶しています。

 この機種を選んだ理由はアプリケーションがある(専用ソフトや汎用ブラウザ)・価格・性能(センサーが多数)です。当店は店舗と居宅が別棟で移動にやや時間がかかるため、居宅のリビングで食事中でもお客さんがこられたときに直ぐに対応できるように、27インチの余ったTVにカメラ映像を常時映しています。(つまりモニタリング)
今の最新機種はTS-NS410Wのようです。


 業務用なら高性能・高安定の専用品もあると思うのですが、やはり価格がネックで、安価な民生用を使いこなしている感じですね。
 今回、モニタリングするクライアント機器をWin10のEDGE(IEモード)からRaspberry Pi4(ラズパイ4)に移行したときの作業備忘録になります。

1.モニタするクライアント機器の種類

ネットワークカメラをTS-WRLPとした場合、アイオーから専用のアプリがでていることもあり、いろいろな方法が考えられます。

方法メリットデメリット
専用アプリケーション(QwatchView)でスマホ・タブレットに表示確実につながる・画面サイズが小さい
・常時表示するときは画面ロックなしにする
Qwatch テレビ用ネットワークカメラビューワ●AV-LS900-Vを使う・TVのHDMI端子に接続しTVのリモコンで操作できる
・大画面対応
廃番(入手不可)
PCのブラウザでみる・大画面可能
・映すだけ(音なし)なら容易
・常時モニタする場合は専用のPC必要
・IEのActivXが今後サポートされない見込み

1→2→3と順にしばらく使いましたが、いずれもハード(iPad-mini,Qwatchビューワ)が壊れてしまい、現在は、2009年に購入したFMV-BIBLO(ノートPC)をVISTA→Win8→Win10に更新し、IE→EDGE(IEモード)で使用中です。FMVはHDD→SSDに交換、バッテリーの更新、内蔵Fanエラー交換(いずれもネットで部品取りよせ自分で交換)し、時々WindowsUPDATEで更新する必要がありますが、ブラウジング程度ならここ数年は大きな問題なく使えていました。
 しかしながら、Windows10が2025年10月でサポート中止になるようで、2009年のFMVはWin11にUPDATEはできず、PC本体の更新等が今後必要になります。

2.Raspberry-Pi(ラズパイ)で再生できるか?

PCは新規に導入するとそれなりに高額なので、中古かなと思ってましたが、購入する前にラズパイでできるかも、と思い立ちました。調べてみると、QwatchはAPIを公開しており、アイオーから仕様をダウンロードして確認すると、RTSPというストリーミングプロトコルが使えることがわかりました。
 そこで手持ちのラズパイ4でテストしてみることにします。再生ソフトややり方は、今回もChatGPT先生に聞きました。

Q:
デバイスはアイ・オー・データのTS-WRLPです。画像はEDGEやChromeで表示できますが、音声を聞くにはIEモードが必要です。APIが公開されているので、Linuxでアプリをつくれますか?

ChatGPT:
はい、APIが公開されているのであれば、Linuxで独自アプリを作成して音声を再生することは可能です。IEモードが必要なのは、ActiveXなどWindows/IE限定の技術を使った再生方式に依存しているためですが、APIを通じて音声ストリーム(または音声ファイル)を直接取得できれば、IEを使わなくても対応できます。

TS-WRLPのRTSP URL は以下のように構成されます:
rtsp://<IPアドレス>:<RTSPポート>/ipcam_h264.sdp
デフォルトポートはAPIから取得可能(例:12345)
音声は AAC(48kHz, 32bit)
映像は H.264

 この後もいろいろやり取りは続きます。ChatGPT先生は質問に対して、実に確か(らしい)答えを出してくれ、それがうまくいけばいいのですが、今回はそのままでは動かないことも多く、さらに尋ねると別提案もしてくれます。しかしながら、その問題(現状)把握の視点が狭いので(あまり情報を与えていないことも理由)、その別提案をそのまま実行すると別の問題が発生して元に戻らなくなるなど、いろいろ回り道してしまいました。
#生成AIとのつきあい方にはコツがありますね。
 先生の指示に従い、手持ちのラズパイ4で実験したところ、特にプログラムをつくらなくても、既存のラズパイ用のフリーのアプリで再生できることがわかりました。よって安定して実現できるかどうかがポイントになります。

3.システム構成はどうなるの?

いろいろ試した結果をまとめると次の選択肢の組み合わせになりました

分類ハードメリット懸念事項
H1ラズパイ4高速、HDMI出力が2つ、別にAudio出力あり高価(約1万円)、本体サイズやや大きい、USB-C電源大きめ(3A)が必要、発熱大
H2ラズパイZero W2安価(約5千円)、小型(フリスクサイズ)、USB-Micro(2A)やや遅い、Audioなし(HDMI出力のみ)
分類プラットフォームメリット懸念事項
P1X-WindowGUIで操作がわかり易い重くなる
P2本体から直接(CUI)軽い操作が煩雑
分類アプリケーションメリット懸念事項
A1MPV軽め(?)いろいろオプションがあるインストール必要
A2VLCOSインストール時に標準で入っている重め(?)
A3ffplay軽め(?)
A4gtl軽め(?)

4.最終的にはラズパイ4+X11+VLC+Rebootシェル (H1+P1+A2)

最初のお試しの構成の、ラズパイ4+MPV+X11(H1+P1+A1)が一日くらいでできたまでは良かったのですが、最終構成にいきつくまでには結構苦労しました。以降は顛末記です。


Act①:ラズパイ4+X11+MPV(H1+P1+A1)でいけそうな感触。専用機にするなら安価で小さいほうがいいだろう、ということでPi-Zero W2を購入して試すことにする。

Act②:Pi-Zero W2が届き新規にOSをインストール。Pi4でうまくいった構成(X11+MPV)を構築。実行するがエラーが頻発し、音声や映像が遅延したり落ちてしまったりと安定しない。MPVのパラメータを調整するがどうしても解消できず、エラーメッセージに「CPUパワーが足りない」とあるのでX11はあきらめることにする。

Act③:Pi-Zero W2をCUIのMPVで実行させる。キャラクタベースの場合、映像出力や音声出力はシステム出力先のパラメータのこまめな設定が必要で、ChatGPTに尋ねながら動作に至る。いろいろパラメータを調整するも遅延は解消せず、ChatGPTのアドバイスに従い、他のアプリのVLC(A2), ffplay(A3), gtl(A4)を試すものの遅延やフリーズが解消せず。Pi-Zero W2はあきらめる

Act④:お試しのPi4+X11+MPV(H1+P1+A1)で24時間テスト。再生はできるものの次第に遅延が積り、また、負荷が大きく(Loadで常時5前後)発熱が著しいためか、数時間で再起動してしまう。再起動時にもパワー不足になることも。基盤単体でもこの状況なので、常時接続のために、3AのUSB電源と放熱機能付きのケースを購入する。

安定して常時稼働させるために、3AのUSB電源と放熱機能付き金属ケースを購入

Act⑤:放熱機能付きのケースを使用したところ、WiFiが不安定になる。pi4内蔵WiFiの電波強度をみたところ、2.4Gも5Gも基盤単体のときより10-15dB低下している。かろうじてアクセスポイントにつながるが、遅延が大きくなっていく。伝送速度の低下によることも考えられる。ケースを交換することも考えたが放熱がネックになるので、アンテナがケースの外になるように、外付けのUSB WiFiドングルを使うことにする。Tp-linkのAC1300 Archer T3Uを中古で購入。

Pi4をケース組み込み、WiFiのT3UをUSBで装着。
出ているケーブルは電源用USB-Cと映像用Micro-HDMI

Act⑥:T3Uのドライバはラズパイには入っていないことがわかりChatGPTに相談。ドライバのインストールを試みる。最初にアドバイスにでたドライバのクローン先はインストールファイルが足りず失敗。2番目に提案のサイトで指示に従ってコマンドを打ち込みインストール成功。

Raspberry Pi 4 + Debian Bookworm(64bit)環境に、Realtek RTL88x2BU 無線LANドライバをインストールする手順を、以下にまとめます。
________________________________________
✅ 1. 公開ドライバをクローンする
おすすめは RinCat/RTL88x2BU-Linux-Driver です。
git clone https://github.com/RinCat/RTL88x2BU-Linux-Driver.git
cd RTL88x2BU-Linux-Driver

git clone https://github.com/RinCat/RTL88x2BU-Linux-Driver.git
cd RTL88x2BU-Linux-Driver

Cloning into 'RTL88x2BU-Linux-Driver'...
remote: Enumerating objects: 2904, done.
remote: Counting objects: 100% (491/491), done.
remote: Compressing objects: 100% (127/127), done.
remote: Total 2904 (delta 426), reused 367 (delta 364), pack-reused 2413 (from 3)
Receiving objects: 100% (2904/2904), 8.78 MiB | 5.60 MiB/s, done.
Resolving deltas: 100% (2059/2059), done.

現在のドライバでのインストール手順(手動)
以下のコマンドを順番に実行してください:
________________________________________
① 必要なパッケージをインストール
sudo apt update
sudo apt install -y raspberrypi-kernel-headers build-essential dkms git
________________________________________
② カーネルモジュールをビルド

make
sudo modprobe 88x2bu

再起動してiwconfigで確認すると無事wlan1として登録に成功。wlan0は内蔵Wifiで、WiFiが2つとなり、このままでは不安定になりそうなので内蔵WiFiをOffにする。


✅ Bookworm での内蔵Wi-Fi 無効化手順(dtoverlay=disable-wifi)
1.	config.txt を編集:
sudo nano /boot/firmware/config.txt
📌 Bookworm では /boot/config.txt ではなく /boot/firmware/config.txt にあります!
________________________________________
2.	ファイルの一番下に以下を追加:
dtoverlay=disable-wifi
必要に応じて Bluetooth も無効にできます:

dtoverlay=disable-wifi
dtoverlay=disable-bt
________________________________________
3.	保存して終了(Ctrl + O → Enter → Ctrl + X)
________________________________________
4.	再起動:
sudo reboot
________________________________________
✅ 確認方法
再起動後に以下のコマンドで wlan0 が消えていることを確認します:
ip a
または:
nmcli device
wlan0 が表示されず、USB Wi-Fi(例:wlan1 → wlan0)だけが表示されていれば成功です。

SSIDやパスワード、5g/2.4gの優先度がGUIのWiFi設定で行う。通信の問題はこれで解決できたはず。

Act⑦:Act④の構成(X11+MPV)に対策(電源・放熱・WiFiの強化)をしたので少しはよくなったものの遅延は解消されず。(起動直後は遅延が2秒程度だが24時間立つと30秒くらいに遅れる)。ログをみると大量のTime-Syncエラー・CPUパワー不足警告がでている。いろいろパラメータを調整したものの解決できず、少しでも負荷を減らそうとGUIでなくCUIで検討してみる。

Act⑧:Pi4+CUI+MPV(H1+P2+A1)で検討。Pi-Zero-W2では比較的容易に実現できた(Act③)のにPi4ではなぜか音声がでてこない。ChatGPTにきくと、以下の応え。

Q:pi4 model b ラズパイOSでDRMでHDMIから音がでない

ChatGPT:
Raspberry Pi 4 Model B で DRM(Direct Rendering Manager)を使うアプリケーション(例:ChromiumのNetflixやYouTubeなど)を使っているときに HDMIから音が出ないという問題は、以下のような原因や対処法が考えられます。

✅ よくある原因と対処法
1. HDMI音声が有効になっていない
Raspberry Piは自動で音声出力先を選びますが、間違ってヘッドフォンジャック(アナログ)などに設定されている場合があります。

sudo raspi-config
「1. System Options」→「S2 Audio」
HDMI を選択して再起動

もしくは、コマンドラインで明示的にHDMI出力に設定:
amixer cset numid=3 2
0 = 自動、1 = アナログ、2 = HDMI

2. HDMIポートが2つあるため、出力先が間違っている
Raspberry Pi 4には HDMIポートが2つ あります(HDMI0とHDMI1)。HDMI1側(2つあるうちの右側)には音声が出力されないことがあります。

● 対処法:
HDMI0(左側のHDMIポート)に接続してください。

3. KMS(Kernel Mode Setting)と音声出力の相性
Raspberry Pi OS(Bullseye以降)では、デフォルトでKMS(DRM)ドライバが使われています。これがHDMI音声出力にうまく対応していない場合があります。

● 対処法:
KMSを無効にして 旧式のFKMSドライバ(Fake KMS) に変更することで音が出るようになることがあります。

● /boot/config.txt を編集:
sudo nano /boot/config.txt
以下の行を探して:
dtoverlay=vc4-kms-v3d
これをコメントアウトし(または削除)して、以下に変更:

dtoverlay=vc4-fkms-v3d
保存して再起動:
sudo reboot

4. PulseAudio と ALSA の競合
Raspberry Pi OS では PulseAudio が入っていることがあり、アプリケーションによってはうまく音が出ない場合があります。

● 確認:
pactl list sinks shor
で HDMI がリストにあるか確認し、存在しない場合は PulseAudio の設定を見直すか、一時的に PulseAudio を無効にしてみてください。

🔊 DRMコンテンツ特有の注意点(Widevine等)
Chromium + Widevine(Netflixなど)を使用する場合、HDCP対応のモニターやケーブルでないと映像が出るが音が出ない、または再生自体ができないことがあります。

HDMIケーブルを交換

モニターがHDCP対応であるか確認

🧪 その他試すべきこと
HDMIケーブルを別のものに変えてみる

HDMI接続後にRaspberry Piを再起動して音声が認識されるか試す

aplay -l でHDMIデバイスが見えているか確認

まとめ(優先順位順)
HDMIが「左側ポート(HDMI0)」に接続されているか確認
sudo raspi-config → HDMI音声を明示的に選択
/boot/config.txt を編集して vc4-fkms-v3d を有効化
PulseAudioの設定を確認(必要なら無効化)
HDMIケーブルとモニターのHDCP対応をチェック

必要であれば、/boot/config.txt の内容を貼っていただければ、より具体的にアドバイス可能です。

1の初期設定については、CUIのRaspi-configでAudioの出力先や、ドライバをPulse Audioに変更済みだが、Micro-HDMIの2つのポートのうち、左側(電源側)の優先度が高いことを知らず、右側にHDMIケーブルをつけていた。では、左側にすれば解決!としたかったのだが変わらずうまくいかない。(ちなみにGUIの時は右側のHDMIポートでもちゃんと音が出ていた。)また壁にあたる。

Act⑨:いろいろ試行錯誤しても通常のWave音すらHDMIから出ず諦めてOSの再インストールを決意。最初からやり直す。ChatGPTにもあらためて状況をクリアにしてきいてみる。

📌 それでも出ない場合は
/boot/firmware/config.txt の設定で HDMI 音声が無効化されていないか確認する必要があります。

たとえば以下の行があれば、コメントアウトしてください:
hdmi_force_hotplug=1
hdmi_drive=1       # これは音声なし(DVIモード)なので、hdmi_drive=2にすべき

🔧 正しい設定例:
hdmi_force_hotplug=1
hdmi_drive=2
変更後は再起動が必要です。

✅ 設定反映のため再起動
編集後、再起動してください:

sudo reboot

🔊 再起動後のテスト
HDMI ケーブルが HDMI0(USB-Cに近い側) に挿さっていることを確認
PulseAudio の sink を HDMI に設定(再掲):

pactl set-default-sink alsa_output.platform-fef00700.hdmi.hdmi-stereo
pactl set-sink-mute alsa_output.platform-fef00700.hdmi.hdmi-stereo 0
pactl set-sink-volume alsa_output.platform-fef00700.hdmi.hdmi-stereo 100%
テスト音を再生:

paplay /usr/share/sounds/alsa/Front_Center.wav
🔚 補足
hdmi_drive=2 を入れないと、Raspberry Pi は HDMI を「DVIモード」として扱い、映像のみ・音声なしになります。

hdmi_force_hotplug=1 を入れることで、モニターが接続されていないと判断されて音声が無効になる現象も防げます。

これで高確率で HDMI 音声が出るようになるはずです。再起動後の挙動をご確認いただき、結果をお知らせください。

結果として、デフォルトの指定+この作業のみで左側のHDMIから音も映像もでるようになった。

Act⑩:音はでるようになったものの相変わらずエラーや遅延になるので、Pi4+CUIで、MPVでの再生はあきらめてアプリ変えてみることにする。Act③と同様にアプリをMPV,CVLC,ffplay,gtcを試したところ、このうちCVLC(VLCのCUIバージョン)が最も安定だった。ChatGPTでは「CVLCはMPVより重い」とされていたが、CVLCの常時負荷は1程度と低く安定。そこで再生アプリをCVLCとし、ChatGPTにききながらパラメータの調整を行なう。

Q:pi4のVLCのオプションを教えて

ChatGPT:
Raspberry Pi 4(Pi4)上で使用する VLC(cvlc または vlc)の主なオプションを紹介します。特に RTSP や HDMI 出力、音声出力、低負荷での再生など、Pi4でよく使われる用途を中心にまとめます。

🔧 基本構文
cvlc [オプション] <メディアURLやファイル>
🎞 映像に関するオプション
オプション	説明
--fullscreen	全画面表示(X11使用時)
--no-video	映像なしで音声のみ再生
--width=1280 --height=720	解像度の指定(GUI使用時)
--aspect-ratio=16:9	アスペクト比の指定(例:4:3, 16:9)
--video-on-top	他のウィンドウより上に表示
--no-osd	OSD(再生情報の表示)をオフ

🔊 音声に関するオプション
オプション	説明
--aout=alsa	ALSA を使用して音声出力(HDMI/ジャック)
--aout=pulse	PulseAudio 出力(GUI環境で使われがち)
--alsa-audio-device=plughw:0,0	出力デバイスを明示(aplay -L で確認)
--no-audio	音声を無効にする
--volume=256	音量(0~512)
--no-audio-time-stretch	音声の時間伸縮補正を無効(CPU負荷軽減)

📶 ネットワークストリーミング(RTSPなど)
オプション	説明
--network-caching=300	ネットワークバッファ(ms)
--rtsp-tcp	RTSPをTCPで処理(UDPで不安定なとき)
--sout	出力ストリーム指定(録画等)

例:

cvlc --rtsp-tcp --network-caching=300 rtsp://192.168.1.10/live.sdp
⚙️ パフォーマンス・安定化
オプション	説明
--skip-frames	フレームを飛ばして再生(処理負荷軽減)
--avcodec-hw=none	ハードウェアデコード無効(互換性優先)
--clock-synchro=0	同期補正を無効(カクつき回避)

📜 ログとインターフェース
オプション	説明
-I dummy または --intf=dummy	インターフェース無し(cvlc はこれが標準)
-vvv または --verbose=2	詳細なログ出力
--play-and-exit	再生後に終了
--no-repeat --no-loop	ループ再生しない

💡 Pi4でのRTSP再生におすすめの構成例
cvlc -I dummy --rtsp-tcp --network-caching=300 \
  --aout=alsa --alsa-audio-device=plughw:0,0 \
  --no-audio-time-stretch \
  --skip-frames --avcodec-hw=none --clock-synchro=0 \
  rtsp://192.168.x.x:554/stream
✅ デバイスの確認に役立つコマンド
aplay -L               # ALSA デバイス一覧
cvlc -p                # VLC設定の表示(GUI環境向け)
必要であれば、目的(例:HDMI音声、RTSPカメラ再生、無音モード再生など)に合わせて最適なオプション例を具体的にご提案できます。お気軽にお知らせください。

Act⑪:Pi4+CUI+CVLC(H1+P2+A2)で、長時間テストを行なう。いろいろ試したが、相変わらず音声遅延エラー、映像デコードエラーが頻発しうまくいかず。

(pts_delay increased to 329 ms)
[0000007f9c0167a0] main decoder error: buffer deadlock prevented
[0000007f98000ca0] main input error: ES_OUT_SET_(GROUP_)PCR  is called too late
(pts_delay increased to 347 ms)
[0000007f9c0167a0] main decoder error: buffer deadlock prevented
[0000007f9c0167a0] avcodec decoder error: more than 5 seconds of late video -> dropping frame (computer too slow ?)

Act⑫:Pi4+GUI+VLC(H1+P1+A2)でテスト。これまでの結果を考察し、映像処理が遅延するのをPi4のHardWare(GPU)で処理すれば対策できそうなのに、CUIでHWデコードを自動にするとなぜか映像が乱れ、ChatGPTでも「Offを推奨」としているので、明示的にOffにしている。一番最初のAct①が意外に安定だったことを思い出し、ひょっとしてX11をかましてHWデコードでVLCならうまくいくかも、とひらめき長時間テストを行なう。24時間たってもエラーでダウンすることはなく、遅延は2秒が3-4秒になるが安定度はこれまでで最も良い。これで決定!

Act⑬:Pi4+GUI+VLC(H1+P1+A2)で、毎日朝5時に再起動→自動起動。最終的にはこの構成・設定で採用となりました。スクリプトは下記。

$cat cvlc-r.sh
#!/bin/bash
cd /home/pi
echo "$(date) shell start" | tee -a cvlc.log

# ネットワーク接続確認(初回)
until ping -c1 192.168.xx.xx >/dev/null 2>&1; do
    sleep 1
done

echo "$(date) cvlc start" | tee -a cvlc.log

vlc --network-caching=100 --fullscreen \
  --aout=alsa --no-audio-time-stretch \
  --skip-frames --clock-synchro=0 \
  rtsp://admin:ほげほげ@192.168.xx.xx:26xxx/ipcam_h264.sdp \
  &>> cvlc.log
echo "$(date) cvlc end" | tee -a cvlc.log

X11での自動起動は以下の設定です。

$ cat ~/.config/autostart/myapp.desktop
[Desktop Entry]
Type=Application
Exec=/home/pi/cvlc-r.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=My App

毎日5時の再起動はcronで設定します。

5.まとめ

費用を下げようといろいろ試したものの、結果としては最初にトライした構成が採用で、確定するまでに、3週間ほどかかりました。既存のものを含め、かかった材料費は以下になります。

No.品目購入費備考
ネットワークカメラ:アイ・オー・データTS-WRLP 約6千円中古
Raspberry pi 4 TypeB +32GBMicro-SDHC約1万円
Pi4ケース+USB電源+USB-Cケーブル+HDMIケーブル約5千円
TP-Link AC1300 Archer T3U約1千円中古
汎用液晶TV(HDMI入力)既存

Win11が動くPCは中古なら2-3万円で買えると思うのでその半額くらいですかね。
懸念事項としては、ラズパイRTSPでのストリーミング再生は、PCブラウザでの再生より約2秒ほど遅れるということです。これは接続直後からの現象でバッファのためこみと思うので、Pi5などもっと高速なら解消されるのかもしれません。pi5を入手する機会があれば試そうかと思います。

コメント・ご質問お待ちしております。

コメントを残す

コメント