2021年02月08日
Jetson Nano - その5: Homebridge-camera-ffmpegを動かす
とりあえず、いつものごとくHomebrigdeを入れてカメラを動かします。
○Jetson Nano用のFFMPEGをインストール
Jetson Nano用にコンパイルして、FFMPEG上でNVENC、NVDECというHWエンコーダを使えるようにします。
こちらのサイトを参考にビルドしてインストールしてください。
○Nodeのインストール
ここのHomebridgeのサイトに書いてある通りにインストールします。
ちなみに今のイメージでは、8.10.0がプリインストールされている筈です。
コマンドは以下の通りです。
何事も問題なければ、以下のバージョンが表示されると思います。
○Homebridgeのインストール
1) Homebridgeのインストール
私はUIを使っていないので、本体は以下の一行で終わりです。
2) Homebridge-camera-ffmpegのインストール
ここのサイトに書いてある通りに以下のコマンドで実行します。
3) config.jsonの編集
まず、何もせずに以下のコマンドでhomebridgeを実行します。
すると、.homebridgeの下にconfig.jsonが見つかりませんという感じのメッセージが表示されると思います。
一旦、Control-Cか何かで実行したプログラムを止めます。
ここでサンプルのconfig.jsonをコピーしてきます。
コピーしたconfig.jsonをエディタで開いて、camera-ffmpegを追加します。
私はconfig.jsonはこんな感じで設定しています。
(1) 入力ソースを前回設定したrtspサーバーにしています。
(2) Jetson Nano用のFFMPEGを使うように以下のように設定しています。
ちなみに、NVDECを使おうとすると動作しなくなります。
config.jsonを以下のように変更するとDecoderとしてNVDECが呼ばれるのですが・・・上手く動作しません。
○実行
1) RTSPサーバーの立ち上げ
以下のコマンドで720P@30FrameでRTSPサーバーを立ち上げます。
ちなみに、画質をいじりたい場合は、こんな感じでnvarguscamerasrcにパラメータを渡します。
NVIDIAのフォーラムのここに書いてありました。
2) Homebridgeの実行
以下のコマンドを実行すると、QRコードが表示されると思いますので、iPhoneでHomeKitにアクセサリを登録します。
3) デモ
あとは、登録されたビデオを開くとこんな感じでカメラの画像がiPhone(iPad)でみれると思います。
(Jetson側で)Encode=>Decode=>Encode=> (iPhone/iPad側で)Decodeをやっている割にはLatency(=0.5秒ぐらい)も悪くないように思えます。
ちなみに、以下のようにjtopでNVENCが動いていることがわかります。
○Jetson Nano用のFFMPEGをインストール
Jetson Nano用にコンパイルして、FFMPEG上でNVENC、NVDECというHWエンコーダを使えるようにします。
こちらのサイトを参考にビルドしてインストールしてください。
○Nodeのインストール
ここのHomebridgeのサイトに書いてある通りにインストールします。
ちなみに今のイメージでは、8.10.0がプリインストールされている筈です。
コマンドは以下の通りです。
# setup repo
curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -
# install Node.js
sudo apt-get install -y nodejs gcc g++ make python net-tools
何事も問題なければ、以下のバージョンが表示されると思います。
# Check installed version
node -v
v14.15.4
npm -v
6.14.10
○Homebridgeのインストール
1) Homebridgeのインストール
私はUIを使っていないので、本体は以下の一行で終わりです。
sudo npm install -g --unsafe-perm homebridge
2) Homebridge-camera-ffmpegのインストール
ここのサイトに書いてある通りに以下のコマンドで実行します。
sudo npm install -g homebridge-camera-ffmpeg --unsafe-perm
3) config.jsonの編集
まず、何もせずに以下のコマンドでhomebridgeを実行します。
homebridge
すると、.homebridgeの下にconfig.jsonが見つかりませんという感じのメッセージが表示されると思います。
一旦、Control-Cか何かで実行したプログラムを止めます。
ここでサンプルのconfig.jsonをコピーしてきます。
cp /usr/lib/node_modules/homebridge/config-sample.json ~/.homebridge/config.json
コピーしたconfig.jsonをエディタで開いて、camera-ffmpegを追加します。
私はconfig.jsonはこんな感じで設定しています。
(1) 入力ソースを前回設定したrtspサーバーにしています。
"source": "-i rtsp://localhost:8554/test",
(2) Jetson Nano用のFFMPEGを使うように以下のように設定しています。
"videoProcessor": "/usr/local/bin/ffmpeg", <= Jetson Nano用のFFMPEG
"vcodec": "h264_nvmpi", <= NVENCを使うように設定
ちなみに、NVDECを使おうとすると動作しなくなります。
config.jsonを以下のように変更するとDecoderとしてNVDECが呼ばれるのですが・・・上手く動作しません。
"source": "-codec h264_nvmpi -i rtsp://localhost:8554/test",
○実行
1) RTSPサーバーの立ち上げ
以下のコマンドで720P@30FrameでRTSPサーバーを立ち上げます。
./test-launch "nvarguscamerasrc ! video/x-raw(memory:NVMM), width=1280, height=720, framerate=30/1 ! omxh264enc ! queue ! rtph264pay name=pay0 pt=96"
ちなみに、画質をいじりたい場合は、こんな感じでnvarguscamerasrcにパラメータを渡します。
NVIDIAのフォーラムのここに書いてありました。
./test-launch "nvarguscamerasrc gainrange='8 8' exposuretimerange='5000000 5000000' ! video/x-raw(memory:NVMM), width=1280, height=720, framerate=30/1 ! omxh264enc ! queue ! rtph264pay name=pay0 pt=96"
2) Homebridgeの実行
以下のコマンドを実行すると、QRコードが表示されると思いますので、iPhoneでHomeKitにアクセサリを登録します。
homebridge
3) デモ
あとは、登録されたビデオを開くとこんな感じでカメラの画像がiPhone(iPad)でみれると思います。
(Jetson側で)Encode=>Decode=>Encode=> (iPhone/iPad側で)Decodeをやっている割にはLatency(=0.5秒ぐらい)も悪くないように思えます。
ちなみに、以下のようにjtopでNVENCが動いていることがわかります。
【Jetson Nanoの最新記事】
この記事へのコメント