メインコンテンツまでスキップ

製品サービスアーキテクチャ

このページでは、project/app/ 配下のアプリケーションについて、その責務、使用言語、ビルドオプション、起動方法、およびカスタマイズの入口を説明します。ここは、Seeed が元の Rockchip SDK に対して最も大きな追加を行っている部分であり、製品カスタマイズが最も頻繁に行われる場所です。

サービス概要​

                        ┌──────────────────────────────┐
sensor ──► rockit ──►│ recamera_ipc (rkipc, C) │──► Internal RTSP 127.0.0.1:5554
▲ │ Main application for video, audio, recording, and AI inference │ │
│ └──────────────┬───────────────┘ ▼
rkaiq(ISP) │ protobuf ┌─────────┐
rockiva(NPU) │ Unix socket │ go2rtc │──► WebRTC :8555
librknnrt(NPU) ▼ └─────────┘ RTSP :554 (optional)
┌──────────────────────────────┐
│ recamera_notify (Python) │──► MQTT / HTTP / UART / WebSocket
└──────────────────────────────┘

┌────────────────────┐ ┌─────────────────────┐ ┌──────────────────────┐
│ recamera_web │ │ recamera_services │ │ recamera_onvif (C) │
│ React frontend + backend │ │ Rust: gmgr/skt2ws/ │ │ ONVIF device discovery and control │
│ nginx static assets │ │ tmir/rcisd │ └──────────────────────┘
└────────────────────┘ └─────────────────────┘
│
┌────────────────────┐ ┌───────▼─────────────┐
│ overlay system services │ │ recamera_utils │
│ ttyd/sshd/syslog/ │ │ Factory and test tools │
│ watchdog/board-id │ └─────────────────────┘
└────────────────────┘

アプリケーション一覧とビルドオプション​

アプリケーション言語ボードビルドオプション説明
recamera_ipcC (CMake + protobuf)RK_APP_TYPE=RKIPC_RV1126B_RECAMERA2コア製品レベルの IPC アプリケーション
recamera_webReact/Node + C/C++RK_APP_RECAMERA_WEB=yWeb 設定インターフェース(フロントエンド + バックエンド)
recamera_servicesRustRK_APP_RECAMERA_SERVICES=ygmgr、skt2ws、tmir、rcisd を含むシステムサービス
recamera_notifyPythonRK_APP_RECAMERA_NOTIFY=yAI 推論通知(MQTT/HTTP/UART/WebSocket)
recamera_onvifCRK_APP_RECAMERA_ONVIF=yONVIF プロトコル実装
recamera_utilsShell / Python / C明示的なビルドオプションなし工場テスト、シリアル番号ツール、ストレステスト
rkaiC++ (CMake)RK_APP_TYPE により制御RKAI ラッパー(LLM/VLM)とサンプル
rkllm-inferenceC++RK_APP_RKLLM_INFERENCE=yRKNN + RKLLM マルチモーダル推論デモ
rkipcCRockchip リファレンス実装recamera_ipc のアップストリームベースライン
wifi_appC + サードパーティソースRK_ENABLE_WIFI=ywpa_supplicant / hostapd / bluez / GATT
cvrC—車載録画
aov_sampleC—常時オン・低消費電力ビジョン(AOV)サンプル
ao_record_demoCRK_APP_TYPE に RK_AO_RECORD_DEMO を含む音声録音デモ
uvc_app_tinyC—UVC カメラモード
ipcwebフロントエンドおよびバックエンド—元の Rockchip Web リファレンス実装
testdemoC/C++—low_delay_net_display、yoloworld_demo
fastboot_clientCRK_ENABLE_FASTBOOTFastboot クライアント
nginx_mk——nginx パッケージング
component/混在—共通コンポーネント:ao_record_service、fastboot_server、lvgl、rkadk、rkfsmk

RK_APP_TYPE=RKIPC_RV1126B_RECAMERA2 は複合識別子です。一部のアプリケーション(ao_record_demo など)は、ビルドするかどうかを判断するために $(filter RK_XXX, $(RK_APP_TYPE)) を使用します。

recamera_ipc(コアアプリケーション)​

構成​

project/app/recamera_ipc/
├── CMakeLists.txt / Makefile / cmake/ / format.sh
├── LICENSE
├── docs/ # Rockchip_Developer_Guide_Linux_RKIPC_{CN,EN}.md (V1.7.6) + resources
├── protobufs/ # Message definitions for communication with notify and web
├── model/rknn/ # yolox_s.rknn(+json)、nanodet-plus-m_416.rknn(+json)
├── lib/
├── system/
└── src/rv1126b_ipc/
├── main.c
├── CMakeLists.txt
├── RkLunch.sh # ★ System-wide application startup entry point
├── RkLunch-stop.sh
├── rkipc-3840x2160.ini # ★ Default configuration (resolution/bitrate/RTSP/ONVIF options)
└── video/

common モジュール(機能マップ)​

project/app/recamera_ipc/common/ のコードは機能ごとに構成されています。関連するディレクトリを見つけるには、この表を使用してください:

モジュール責務
audio/audio.c でのキャプチャとエンコード、rkaudio_mp3.c での MP3 プロンプト音声
isp/rkaiq ラッパー
venc/ビデオエンコード
rtsp/内部 RTSP サービス(127.0.0.1:5554)
rtmp/RTMP ストリーミング
osd/タイムスタンプ/テキストオーバーレイ
region_clip/、roi/領域クロップおよび ROI
rockiva/ROCKIVA アルゴリズム統合
rc_infer/、rc_model/カスタム推論フレームワークとモデル管理
rc_notify/推論結果を recamera_notify に送信
event/イベントシステム
storage/録画ストレージおよび SD カード管理
network/ネットワーク設定
socket_server/Web バックエンドおよび notify 用のソケットサービス
system/、sysutil/システム情報およびユーティリティ関数
param/INI パラメータの読み書き
vendor_storage/ベンダーストレージ領域(シリアル番号、MAC アドレスなど)
vigil/、vigil_device_support/vigil 関連コード(protobuf と libblkid に依存)
player/プレーヤー
lvgl/、ui/画面上の UI(LVGL)
uvc/UVC モード
ivm/インテリジェントビデオ監視
gstreamer/GStreamer 関連コード

起動と停止​

デバイス上では、生成された init スクリプトが次のコマンドを呼び出します:

# sh /oem/usr/bin/RkLunch.sh         # Start
# sh /oem/usr/bin/RkLunch-stop.sh # Stop

RkLunch.sh は /etc/profile.d/RkEnv.sh を source してから、rkipc と関連プロセスを起動します。自分のアプリケーションを起動時に開始したい場合は、別の init スクリプトを追加するのではなく、まずこのスクリプトを変更してください。

設定​

デバイス上のランタイム設定は /userdata/config/rkipc.ini(書き込み可能パーティション上)であり、初期状態では rkipc-3840x2160.ini からコピーされます。go2rtc の起動スクリプトは、その [video.0.rtsp]、[video.0.onvif]、[video.1.rtsp] セクションを読み取り、ポート 554 を公開するかどうかを判断します。

設定を変更した後は、rkipc を再起動し、go2rtc も再起動してください(その設定は起動時に /tmp/go2rtc/go2rtc.yaml に生成されます):

# sh /oem/usr/bin/RkLunch-stop.sh && sh /oem/usr/bin/RkLunch.sh
# /oem/usr/etc/init.d/S50go2rtc restart

recamera_services(Rust システムサービス)​

以下の情報は recamera_services/README.md からの抜粋です:

コンポーネント目的設定
gmgrGPIO マネージャー。GPIO 制御と監視のための HTTP/WebSocket API を提供gmgr/config.json
skt2wsソケット → WebSocket ブリッジ。Unix ソケットデータを転送(rkipc-record-events により使用)skt2ws/config.json
tmirTTY ミラー。シリアルポートをソケット/WebSocket に多重化(ttyS4 をミラー)tmir/config.json
rcisdreCamera Intellisense デーモン。イベントをキューイングし、ファイルを転送外部設定なし

その他のディレクトリには、inotify_passwd/(パスワードファイルの変更監視)、key_factory/(工場ボタン)、led/(LED 制御)、scripts/init.d/ などがあります。

ビルド​

cd project/app/recamera_services
make # Default target: armv7-unknown-linux-gnueabihf
make SERVICE_TARGET=aarch64-unknown-linux-gnu # Use 64-bit for reCamera Pro
make gmgr # Build one component
make clean && make help

Rust と Docker が必要です(cross はクロスコンパイルに Docker を使用します)。gmgr/setup-libgpiod.sh は libgpiod 依存関係を準備します。

デフォルトのターゲットは 32-bit armv7 です。 reCamera Pro は aarch64 を使用するため、明示的に SERVICE_TARGET=aarch64-unknown-linux-gnu を指定してください。そうしないとバイナリは動作しません。./build.sh app を使用する場合、SDK が正しいターゲットを設定しますが、make を手動で呼び出す際には見落としやすい点です。

出力レイアウト​

out/
├── etc/init.d/{S40gmgr,S40skt2ws,S40tmir,S49rcisd}
└── usr/
├── bin/{gmgr,skt2ws,tmir,rcisd}
└── share/{gmgr_config.json,skt2ws_config.json,tmir_config.json}

gmgr API​

HTTP ポート 8080 で待ち受けるとともに、Unix ソケット /dev/shm/gmgr.sock も提供します:

GET    /api/v1/gpios                     # Lists all pins and their full descriptions
GET /api/v1/gpios/events # WebSocket stream of events from all pins
GET /api/v1/gpio/{pin_id} # Full description of one pin
GET /api/v1/gpio/{pin_id}/info # Configuration information
GET/POST /api/v1/gpio/{pin_id}/settings # state / edge / debounce_ms
GET/POST /api/v1/gpio/{pin_id}/value # Reads or writes the pin level
GET /api/v1/gpio/{pin_id}/event # Most recent event
GET /api/v1/gpio/{pin_id}/events?limit=5

ローカル開発では、mock-gpio 機能がデフォルトで有効になっています。ハードウェアビルドの場合は、--features hardware-gpio を追加します:

cargo build --release --features hardware-gpio
cargo test

recamera_notify (Python 通知サービス)​

このサービスは rkipc から protobuf 推論データを受信し、AI カメラの結果を複数のチャネルを通じて転送します。

機能説明
ソケットサーバーrkipc から推論データを受信
解析protobuf (protobufs/inference_pb2.py)
フォーマットテンプレートベースの出力
通知チャネルMQTT、HTTP、UART、WebSocket
信頼性MQTT 切断後に自動的に再接続
設定JSON (notify_config_default.json)
ステータスMQTT/HTTP/UART のランタイムステータスは一時 JSON ファイルに書き込まれます

モジュール:core/(config_manager、inference_parser、template_formatter、socket_server、notifier_manager)、notifiers/(base_notifier、mqtt_notifier、http_notifier、uart_notifier、websocket_server、notifier_factory)、および tests/(run_all_tests.py を含む)。

ビルドとデプロイ​

export RK_APP_RECAMERA_NOTIFY=y
make -C project/app/recamera_notify

デバイス上でのインストールパス:

項目パス
Python パッケージ/usr/lib/python3.11/site-packages/recamera_notify/
起動スクリプト/usr/bin/notify_server.sh
システムサービス/etc/init.d/S49notify
# /etc/init.d/S49notify start
# /etc/init.d/S49notify stop
# ps aux | grep notify_server

対象デバイスは Python 3.11 を使用します。ホスト側で別バージョンを使って開発する場合は、構文と依存関係の互換性を確認してください。

recamera_onvif (C)​

標準的な ONVIF デバイス検出と制御を実装します。ディレクトリには src/(dom.c、authenticate.c、cJSON.c、その他の SOAP/XML 処理コード)、socket_client/、script/ が含まれます。また、パケットキャプチャデバッグ用に RECV.log、SENT.log、TEST.log も含まれます。

RK_APP_RECAMERA_ONVIF=y によって有効化されます。ONVIF が有効な場合、go2rtc も外部 RTSP を有効にします(優先順位のルールについては Device Access and Debugging を参照してください)。

recamera_web (フロントエンドとバックエンド)​

project/app/recamera_web/
├── recamera_web_react/ # React frontend
│ ├── package.json / src / public / backend / nginx.conf / requirements.txt
└── recamera_web_backend/ # C/C++ backend (CMake + thirdparty + ipcweb-env-rv1126b)

フロントエンドの機能(README より):

  • 多言語対応(英語と中国語)、ライト/ダークテーマ、レスポンシブレイアウト
  • デバイス情報: モデル、シリアル番号、CPU/メモリ/ストレージの監視、設定保存、再起動、工場出荷時リセット
  • ライブビュー: ストリームプレビュー、再生/一時停止、スナップショット、録画、および解像度/フレームレート/ビットレート/コーデックの制御
  • 録画設定: 連続、スケジュール、モーション検知トリガー、または AI イベントトリガー録画;ストレージパス、セグメント、ループ上書き、ファイルの閲覧・再生・ダウンロード・削除
  • AI 推論: 物体検出(YOLO シリーズ)、画像セグメンテーション、キーポイント検出(ポーズ/顔/手)、画像分類(ResNet、EfficientNet)。各タスクごとに、モデル、信頼度しきい値、バッチサイズ、推論デバイス(GPU/CPU/NPU)、および可視化を設定可能。
  • ターミナル: コマンドラインインターフェースを通じてデバイスを管理(ttyd と統合)

フロントエンドには Node.js 18 以降が必要です。ビルド出力は nginx.conf に従ってデプロイされます(nginx は nginx_mk によって提供されます)。ビデオプレビューはポート :8555 上の go2rtc WebRTC を使用します。

recamera_utils (工場およびテスト用ユーティリティ)​

ディレクトリ項目
hw_test/bt_adv.sh(Bluetooth アドバタイズテスト)、imu_test.py(IMU テスト;カーネルオプション CONFIG_INV_ICM42670_I2C=y に対応)
emc_test/AP6256_MFG.bin、wl ユーティリティ、および BT RF Test Commands for Linux-v09.pdf — Wi-Fi/Bluetooth RF 認証テスト
rf_range_test/bt_client.py、bt_server.py、wifi_ap.py、wifi_sta.py —— RF 到達距離テスト
stress_test/cpu_stress.py、npu_stress.py、emmc_sd_stress.py、emc_test.py
sn_tool/SN_TOOL — シリアル番号を書き込み(upgrade_tool sn と併用)

これらのツールを工場作業手順書のベースとして使用してください。各ディレクトリには README.md が含まれています。

その他のアプリケーション​

アプリケーション説明
rkaiRKAI ラッパーライブラリ(rkai_LLM、rkai_VLM)、サンプル(rkai_samples_llm.cpp、rkai_samples_vlm.cpp、rkai_samples_vlm_vision.cpp)、およびドキュメント doc/Rockchip_Developer_Guide_Linux_RKAI_{CN,EN}.md;common/include/ には rknn_api.h、rknn_custom_op.h、cJSON.h、cnpy.h、easy_timer.h が含まれます
rkllm-inferenceAI and NPU Development を参照
wifi_appwpa_supplicant(2.6、または WPA3 用に 2.10)、hostapd、libnl 3.9.0、openssl 3.2.1、bluez 5.77、rtk_hciattach、および GATT サーバー/クライアントツールをビルド;設定は /userdata/rk96x/conf にあります。RK_ENABLE_WIFI_CHIP は RK960 または RK962 プレフィックスを選択します
aov_sampleAOV 低消費電力サンプル:sample_aov_aiisp_iva_venc.c、sample_aoa_capture.c、sample_aov_audio.c、resume_suspend_test.sh
testdemo/yoloworld_demoエンドツーエンドの YOLO-World デモ
component/ao_record_service(音声録音サービス)、fastboot_server(高速起動)、lvgl(GUI)、rkadk(アプリケーション開発キット)、rkfsmk(ファイルシステム)

起動順序の概要​

/etc/init.d/ および /oem/usr/etc/init.d/ 内のスクリプトは、デバイス上で数値順に実行されます:

順序スクリプトソース
S00board-idoverlay
S10log(WebSocket ログ)overlay
S15watchdogoverlay
S20hwclockoverlay
S20/S21linkmount / appinitbuild.sh により自動生成(パーティションをマウント / RkLunch.sh を呼び出し)
S40gmgr、skt2ws、tmirrecamera_services
S49rcisdrecamera_services
S49notifyrecamera_notify
S50sshd、ttyd、go2rtcoverlay
S70vsftpdoverlay
S99factorykey、inotify_passwd、ledrecamera_services

サービスを追加する際は、未使用のシーケンス番号を選び、依存関係を考慮してください。例えば、ネットワークに依存するサービスは S40 以降に、/userdata を必要とするサービスは S20linkmount の後に起動します。

ソースリポジトリ​

これは .git メタデータを含まないソーススナップショットです。README ファイルによると、これらのアプリケーションは Seeed 社内 GitLab リポジトリに対応しています:

アプリケーションリポジトリ
recamera_onvifhttps://iteam-gitlab.seeed.cn/rockchip/linux-ipc-app-recamera2-onvif.git
recamera_utilshttps://iteam-gitlab.seeed.cn/rockchip/linux-ipc-app-recamera2-utils.git

命名パターンは rockchip/linux-ipc-app-recamera2-<module> です。他の recamera_* アプリケーションも同じ規則に従っている可能性があります(表を完成させる前に、社内 GitLab でこれを確認してください)。アップストリームへの変更は、この SDK スナップショットではなく、対応するリポジトリで行ってください。そうしないと、次回の同期時に失われる可能性があります。

変更影響クイックリファレンス​

次の項目を変更したい場合…ここを編集リビルド
ビデオ解像度/ストリーム/RTSP/ONVIF オプションrecamera_ipc/src/rv1126b_ipc/rkipc-3840x2160.ini またはデバイス上の /userdata/config/rkipc.iniapp + firmware(またはデバイスの INI を直接編集)
Web UI ページrecamera_web/recamera_web_react/src/app + firmware
Web バックエンド APIrecamera_web/recamera_web_backend/src/上記と同じ
GPIO 定義/APIrecamera_services/gmgr/config.json および src/上記と同じ
推論通知のフォーマット/チャネルrecamera_notify/notify-server/、notify_config_default.json上記と同じ
AI モデルrecamera_ipc/model/rknn/ および対応する .json ファイルapp + firmware
起動アプリケーションrecamera_ipc/src/rv1126b_ipc/RkLunch.shapp + firmware
ログのフォーマット/出力overlay-buildroot-syslog-ng/etc/syslog-ng.confrootfs + firmware
Serial/SSH/ttyd ポリシーoverlay-buildroot-sshd、overlay-buildroot-ttydrootfs + firmware
オーディオチャネルマッピングoverlay-buildroot-asound/etc/asound.confrootfs + firmware

技術サポートと製品ディスカッション​

弊社製品をお選びいただきありがとうございます。私たちは、製品をできるだけスムーズにご利用いただけるよう、さまざまなサポートを提供しています。お好みやニーズに応じて選べる複数のコミュニケーションチャネルをご用意しています。

Loading Comments...