Posts

Showing posts from March, 2021

Raspberry pi 4とUbuntu Server 20.04 64bitでRaspberry pi cameraを使う

過去には少し面倒な手順が必要だったようだが、現在では簡単。ファームウェアの更新も必要ない。 セットアップ手順 通常通りRaspberry piを起動後、/boot/firmware/config.txtを編集。以下の2行を[all]セクションに追加して再起動。 start_x=1 gpu_mem=128 start_xはカメラドライバ入りファームウェアをロードするための設定。正しく設定できれば、dmesgでstart_xファームウェアがロードされたことを確認できる。 [    0.052141] raspberrypi-firmware soc:firmware: Attached to firmware from 2021-01-08 14:32, variant start_x gpu_memはカメラの動作に必要なメモリの設定。デフォルトでは70M程度が確保されるらしいが、それでは不足らしい。上の例では128MBを確保している。 最初はconfig.txt内のコメント通りにusercfg.txtを編集して試したが、なぜかうまくいかなかった。原因は調べていないが、とりあえずconfig.txtの編集で問題なく動いている。 これらのオプションの詳細については、以下の公式ドキュメントを参照。 https://www.raspberrypi.org/documentation/configuration/config-txt/boot.md その他注意点 大きすぎる解像度でのキャプチャをリクエストすると、以下のようなエラーがでてフリーズする。 Message from syslogd@ubuntu at Mar 30 03:18:03 ...  kernel:[ 9504.087329] watchdog: BUG: soft lockup - CPU#2 stuck for 22s! [sshd:2699] 解像度を低くするか、もしかしたらメモリ容量を増やすと改善するかもしれない。詳しくは調べていない。

LinuxでUSBカメラ映像をストリーミングかつ録画する

 USBカメラの映像をネットワーク越しにストリーミング視聴できるようにしつつ、24時間録画する方法についてメモ。GStreamerを使用した。 ハードウェア Raspberry Pi 3 Logitech C920(H264エンコーダ付き) ストリーミング方法 検討したプロトコルが以下の4つ。 HLS DASH RTMP RTSP 前者2つはHTTPベースなので扱いが楽。ただしレイテンシが数十秒レベルとだいぶ長め。 RTMPはFlashでよく使われていたプロトコル。まぁ新しく使う理由はあまりない。GStreamerにデフォルトでプラグインがあるので、別のサーバに映像を送るのに使えるかもしれない。例えば、NGINXのRTMPモジュールで受けて、HLSで再送するなど。レイテンシ低い。 RTSPはよくIPカメラとかで使われているイメージ。レイテンシ低くて良い。ただしGStreamerから使うのはすこし面倒。 今回はHLSを使うことにした。GStreamerにデフォルトでプラグインがあるので楽だったので。 録画先 NASをCIFSマウントしてそこにMP4ファイルを書き込むことにした。SDカードに直接書き込むのは寿命の観点から避ける。 同様に、HLSの書き込み先もSDカードは避け、メモリ上にした。 mount -t tmpfs -o size=100M /mnt/tmp USBカメラの接続 Raspberry pi上にはUbuntu Serverをインストールした。ドライバは標準で含まれているので、カメラを接続するだけで認識された。 以下はカメラの確認のための手順。 dmesgコマンドでカメラが認識されたことの確認 lsusbコマンドで同様の確認 ls /dev/video*でデバイスファイルが存在することの確認 ファイルパーミッションの設定。今回は自ユーザをvideoグループに追加した。audioグループにも入れておくと良い。 v4l2-ctl --allでカメラ情報の確認。APTでv4l2-toolsをインストールすること。 v4l2-ctl --info --list-formatsで対応フォーマットの確認。 なお、C920は2020年頃からH264のサポートを辞めたそうなので注意。もしH264がサポートされていない場合、Raspberry pi上でのエンコードが必要

プログラミング用のディスプレイを選ぶ

 現在はSurface book2と27インチディスプレイ1枚を使っている。しかし、ラップトップの画面と視線を行き来させるのが面倒なので、外部ディスプレイをもう一枚買おうと検討している。 ディスプレイに求める条件 27インチ以上 108 ppi以上 狭いベゼル サイズに関しては、現在使っているものと同じか、より大きくしたいので27インチ以上が条件。 PPIに関しては、今のディスプレイが27インチWQHDで108PPIなので、それと同等かより良いものにしたい。会社から27インチFHD、81PPIのディスプレイが支給されたので自宅にあるが、あまりにも画質が汚すぎて5分で取り外した。なので108が下限。 2枚のディスプレイを並べたいので狭いベゼルも必須。 候補 4k UHD 27インチ $300から$400くらい。163PPI 4k UHD 32インチ $300から$400くらい。138PPI ウルトラワイド 3840x1600 38インチ $1000くらい。110PPI ウルトラワイド 3440x1440 34インチ $650から$800くらい。110PPI ウルトラワイド 5k2k 34インチ $1200くらい。163PPI ウルトラワイド 5120x1440 49インチ $1200くらい。108PPI 結論 4k UHD 27インチディスプレイを買った。満足している。