Raspberry Pi 3 でRTSPを見る(結論)

使い道のないRaspberry Pi 3 Model B (RPi3) やRaspberry Pi 3 Model B+ (RPi3+)で,RTSPを視聴する方法の結論としては,

ffplay (FFMPEG)で見る

で最終決定しました.唯一懸念されていた時間遅れの蓄積は,その後半日ほど連続運転したところ,不思議と解消されました

FFMPEGが使えるならばRaspberry Pi OSでも行けるはずですが,いまさら面倒なので,RPi3ではManjaro ARM xfce, RPi3+ではManjaro ARM KDE Plasmaでこのまま行きます.

自動起動については,

#!/bin/sh
sleep 30
DISPLAY=:0 /usr/bin/ffplay rtsp://ユーザー名:パスワード@ホストのFQDN/指定された文字列 -loglevel quiet -fs > /dev/null 2>&1 &

というスクリプトを実行可能にして適当な場所に置いて設定からAutostartに指定したら,xfceもKDE Plasmaもうまくいきました.sleep 30については要調整です.フルスクリーンオプション-fsはお好みで.

なお,xfceでは設定のScreen saverをOFFが機能しますが,KDE Plasmaはそのスイッチが効かないようなので,ワークアラウンドとして,.xprofile

DISPLAY=:0 xset -dpms
DISPLAY=:0 xset s off

を書いてます.

たぶん,下記のスクリプトのように,コンソールにlogを出さないようにしたためかもしれません.それでも多少は遅れます.
と言いつつ後日試しました.ffplayだけのためにインストールするなら,Raspberry Pi OSが一番楽で,起動も早いのでお勧めです.
一年前にそうだったのですがその後確認はしていません😅

「VLCでrtspを見る」は依然難航中

なんだか相変わらず断片的な書きなぐりなので,何をどうしたくて今どういう問題に直面しているのかというのを一旦まとめます.

最終目標としては,安いモニターカメラが出力するRTSP (Real Time Streaming Protocol)をRaspberry Pi 3 Model B (以下RPi3.Raspberry Pi 3 Model B+はRPi3+)にて視聴するというプロジェクトです.

昨年の段階ではRPi3およびRPi3+にManjaro ARMをインストールして,Manjaroが配布する(もとはArch Linux)VLCで視聴できていました.

しかし,その後一年間モニターカメラの運用を停止していた間にManjaroのVLCもDebianやUbuntu等と同様にRTSPのサポートを止めてしまったようで,RPi3(+)で視聴する方法がなくなってしまいました.

それで現在RPi3(+)でRTSPサポートの付いたVLCを動かす方法を色々探しています.

VLCについて明らかなのは,「本家のVLCはRTSPの視聴が可能」ということです.直接本家がバイナリーを配布しているmacOS版は問題なくモニターカメラからのRTSPを音声込みで再生できています.Windows版については確認していませんが,たぶん同様に問題ないと思います.

一方,Linuxについては,各distroのbuildを尊重しているようです.

SlackwareはdistroにはVLCは含まれていません.SlackBuildsにスクリプトがあるので,sbopkgでbuildできるはずですが,必要なパッケージが35もあってめげてしまいます.それでも気を取り直してまずVLC本体からbuildして,エラーが出るパッケージ(=必須のパッケージ)をbuild & installしていこうと方針を立て,

sbopkg -b vlc

とすると,ソースの配布サイトのアドレスがresolvできないというどうしようもないエラーが出てしまいます.

なお,前述のVLCのダウンロードサイトには,Slackwereのバイナリーのリンクもあります.これはSlackwareに貢献著しいAlienさんがbuildしたもので,試したところ,32bit版も64bit版も問題なくRTSPを再生できます.もし,Alienさんに限らずだれかがARM用もbuildして配布していれば解決なんですが😅

仮想マシンのSlackware 15.0 (32bit版)でRTSPを再生するAlienさんbuildのVLC

ManjaroのVLCもRTSP NGか

色々事情がありまして,しばらくRTSPを視聴せずに来ましたが,また必要にかられて再開しました.

macOSでVLCの本家からdownloadしたVLC media playerは,従来どおり難なく視聴できます.たぶんWindowsでも本家からdownloadすれば使えると思います.

ところが,Manjaro (AMD64版)では視聴できなくなっていました.Debian同様ソースコードにライセンス上の問題があるとかそういう関係でRTSPの機能を除外してしまったのでしょうか

ManjaroでRTSPが視聴可能というのは,Raspberry Piでも視聴可能にできるという大きな意義があったのですが,それができないとなると,Raspberry Piでの監視カメラシステム構築に大きな支障となってしまいます.

さてどうするか

ManjaroのVLCでRTSPの再生ができないことを他のいくつかの環境からテストしてみます.それで確定となれば新しいdistroを探さなければなりません.

Slackwareではsbopkgでbuildできることが解っています.しかし,slackbuilds.orgに登録されているスクリプトは,すべてのアーキテクチャでエラー無くbuildできるとは限りません.特に最終ゴールはRaspberry Pi 3なので,AMD64やx86環境はOKでもaarch64環境でbuildができる可能性は低いと考えています.

それと,依存ファイルの多さです.35もあります.オプショナルなモジュールならば無くてもVLCのbuildスクリプトがその機能を除外して先に進んでくれるようですが,必須のライブラリーがbuildできないとそこでアウトです.一番成功の可能性が高いAMD64でのbuildも躊躇してしまいます.

筆者にはその辺の事情は関係ないので調べません😅
日本の政府やメディアは「防犯カメラ」と呼ばせたいようですが.

仮想マシンと実マシンの行き来についてまとめ update 2

前項「仮想マシンと実マシンの行き来についてまとめ update」に関して,その後新しいことがわかったのでupdateします.

実マシンから仮想マシンへの移行

これは比較的楽です.Linux distroの32 bit版でも64 bit版でもたいていうまくいきます.仮想マシンの仮想ディスクイメージ(以下「仮想イメージ」と略します)は,MBRでもGPTパーティションでも大丈夫です.仮想マシンでマルチブートする必要はありませんし,SWAPにzramを使用すれば,MBRではroot用の1本のパーティションで済みます

ブートローダーの設定は,Slackware64 15.0のインストール用DVDイメージからブートさせて,chrootして設定します.もちろん他のdistroのインストールDVDイメージでもできますが,使い慣れていることもあり一番堅実な感じがします.

32bit OSについては同様にSlackwareのオリジナル(32bit版)を使用します.

これで,Slackware 32/64, Debian 32/64, Manjaro 64のそれぞれの実マシンを仮想化できています.

特に他の設定で引っかかるところもありません.fstabの記述は最初は/dev/sda1などにしておいて,必要に応じてUUIDなどに書き換えれば良いと思います.

十分習熟したこともありますがほぼまちがいなく仮想化できます.

仮想マシンから実マシンへの移行

こちらは,難易度が少し高いです.基本的には第1OSのManjaroのGRUBから起動するようにします(ただし,grub.cfgの手直しが必要).

64bit版 Linux

64bit版については,第1OSであるManjaroのGRUBから,Debian, Slackware64, Manjaroをブートできるようにできました.

設定の要所としては,第1OSのManjaroのgrub.cfgの手直しと,コピーした第2OSのfstabの記述をUUIDにしておくくらいでしょうか.

唯一Debian AMD64については,第1OSのManjaroのEFI+GRUBからのブートに加えて,自前のEFI+GRUBからのブートもできるようになりました.しかし,過去にはうまく行かなかったこともあり,どうするとうまく行ってどうすると失敗するのかは解っていません.

32bit版 Linux

32bit版に関しては,基本的に64bit版と同じ手順・注意で実マシンの移行自体はできています.しかし,引越し先のハードとのインコンパチが原因と思われるトラブルにつきまとわれています.

Slackware 15.0 の32bit 版は,第1OS ManjaroのGRUBから起動はしますが,何回かに1度ブートに失敗して,BIOSのブート画面に戻りますが,再度ブートすればたいていsddmが表示され,KDEにログインできます.

Debian 32bit paeについては,CUIは起動しますが,GUIではXは起動しますが,sddmが起動してくれません.いや,起動はしているのですが画面が全面黒でポインティングディバイスに連れてポインターは動き,場所に応じてIビームや矢印になります.試しにパスワードを入力してみると,ログインできたようですが,KDEのデスクトップは表示されず黒画面のままです.

これは,ビデオドライバーのインコンパチに違いないと当たりをつけ,Xorg.0.logを見ると,glamoreglというドライバーが選択されています.ビデオカードは “NVidia GeForce GT 640” という古いものです.たぶん,64bitでは問題ないのでしょうが今更32bit版を使う人も少ないので32bit版ではバグが潰しきれていないのではないでしょう.

/etc/X11/xorg.conf.d/内に,01-video-driver.confというテキストファイルを作りました.内容は,

Section "Device"
     Identifier "Card1"
     # Driver "nouveau"
     Driver "fbdev"
     BusID "PCI:1:0:0"
EndSection

です.そう,最初に “nouveau” を試しましたが,sddmは表示されログインできますが,KDEのデスクトップが表示されたところで画面はフリーズしてしまうので, “fbdev” にしたところ,いろいろDesktop Effectsは使えませんが,とりあえずはKDEが使えるようになりました

仮想マシンの実マシン化に直接は関係ありませんが,付随した問題なので記録しておく次第です.

“distribution” の略は “distro” です.「ディストリ」と略して書くと,英語のドキュメントを読んでないことがバレます.
GPTの場合はBIOS BOOTパーティションが必要.
特に電源投入後初回のブート時はほぼ100%失敗します.
Debian 9時代まで実マシンだった.
この記事も,Debian 32bit pae bookwormのKDEで動くFirefoxから書いてます.

仮想マシンと実マシンの行き来についてまとめ update

前項「仮想マシンと実マシンの行き来についてまとめ」に多少勘違いなどがあったので,updateします.

実マシンから仮想マシンへの移行

これは比較的楽です.Linux distroの32 bit版でも64 bit版でもたいていうまくいきます.仮想マシンの仮想ディスクイメージ(以下「仮想イメージ」と略します)は,MBRでもGPTパーティションでも大丈夫です.仮想マシンでマルチブートする必要はありませんし,SWAPにzramを使用すれば,MBRではroot用の1本のパーティションで済みます

ブートローダーの設定は,Slackware64 15.0のインストール用DVDイメージからブートさせて,chrootして設定します.もちろん32bit OSについてはSlackwareのオリジナル(32bit版)を使用します.これで,Slackware 32/64, Debian 32/64, Manjaro 64のそれぞれの実マシンを仮想化できています.

特に他の設定で引っかかるところもありません.fstabの記述は最初は/dev/sda1などにしておいて,必要に応じてUUIDなどに書き換えれば良いと思います.

十分習熟したこともありますがほぼまちがいなく仮想化できます.

仮想マシンから実マシンへの移行

こちらは,難易度が少し高いです.基本的には第1OSのManjaroのGRUBから起動するようにします(ただし,grub.cfgの手直しが必要).

32bit版 Linux

32bit版に関しては,実マシンの移行自体はできたもののトラブルにつきまとわれています.

Debian 32bit paeについては,CUIは起動しますが,GUIではsddmが起動してくれない,というところまでは行きます.本体のKDEにログインできませんが,その他の機能は問題ないようで,他のマシンからsshでつないで調べてみたりしていますが,今のところ解決していません.

また,Slackware 15.0 の32bit 版についても,第1OS ManjaroのGRUBから起動はしますが,何回かに1度ブートに失敗して,BIOSのブート画面に戻りますが,再度ブートすればたいていsddmが表示され,KDEにログインできます.

64bit版 Linux

64bit版については,第1OSであるManjaroのGRUBから,Debian, Slackware64, Manjaroをブートできるようにできました.

設定の要所としては,第1OSのManjaroのgrub.cfgの手直しと,コピーした第2OSのfstabの記述をUUIDにしておくくらいでしょうか.

唯一Debian AMD64については,第1OSのManjaroのEFI+GRUBからのブートに加えて,自前のEFI+GRUBからのブートもできるようになりました.しかし,過去にはうまく行かなかったこともあり,どうするとうまく行ってどうすると失敗するのかは解っていません.

GPTの場合はBIOS BOOTパーティションが必要.
Debian 9時代まで実マシンだった.
特に電源投入後初回のブート時はほぼ100%失敗します.