5.1 KiB
Matter Camera
This example demonstrates Matter camera using a two-chip split architecture, where signaling and media streaming are separated across two processors for optimal power efficiency.
Architecture Overview
The split mode consists of two separate firmware images:
1. matter_camera (ESP32-C6)
- Role: Matter camera with WebRTC signaling integration
- Responsibilities:
- Matter stack execution
- WebRTC signaling
- Bridge communication with media_adapter
- Always-on connectivity for instant responsiveness
2. media_adapter (ESP32-P4)
- Role: Media streaming device
- Implementation: Uses the
streaming_onlyexample from${KVS_SDK_PATH}/esp_port/examples/streaming_only - Responsibilities:
- Video/audio capture and encoding
- WebRTC media streaming
- Power-optimized operation (sleeps when not streaming)
- Receives signaling commands via bridge from matter_camera
System Architecture
┌─────────────────┐ SDIO Bridge ┌─────────────────┐
│ ESP32-C6 │◄────────────────────►│ ESP32-P4 │
│ (matter_camera) │ Communication │ (media_adapter) │
│ │ │ │
│ ┌─────────────┐ │ │ ┌─────────────┐ │
│ │ │ │ │ │ H.264 │ │
│ │ Matter │ │ │ │ Encoder │ │
│ │ │ │ │ │ │ │
│ │ Signaling │ │ │ │ Camera │ │
│ │ │ │ │ │ Interface │ │
│ └─────────────┘ │ │ └─────────────┘ │
└─────────────────┘ └─────────────────┘
▲ ▲
│ │
▼ ▼
(Signaling) Video/Audio
Hardware
Quick Start
Prerequisites
Important: This requires flashing two separate firmwares on
ESP32-C6 and ESP32-P4 of ESP32-P4 Function EV Board
Setup Camera example (ESP32-C6)
See the docs to setup esp-idf and esp-matter
Build and flash
cd esp-matter/examples/camera
idf.py set-target esp32c6
idf.py build
idf.py -p [PORT] flash monitor
NOTE:
- ESP32-C6 does not have an onboard UART port. You will need to use ESP-Prog board or any other JTAG.
- Use following Pin Connections:
| ESP32-C6 (J2/Prog-C6) | ESP-Prog |
|---|---|
| IO0 | IO9 |
| TX0 | TXD0 |
| RX0 | RXD0 |
| EN | EN |
| GND | GND |
Setup Media adapter (ESP32-P4)
Clone and setup the WebRTC SDK
git clone https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-c.git
git checkout beta-reference-esp-port
git submodule update --init --depth 1
export KVS_SDK_PATH=/path/to/amazon-kinesis-video-streams-webrtc-sdk-c
Build and flash
cd ${KVS_SDK_PATH}/esp_port/examples/streaming_only
idf.py set-target esp32p4
idf.py menuconfig
# Go to Component config -> ESP System Settings -> Channel for console output
# (X) USB Serial/JTAG Controller # For ESP32-P4 Function_EV_Board V1.2 OR V1.5
# (X) Default: UART0 # For ESP32-P4 Function_EV_Board V1.4
idf.py build
idf.py -p [PORT] flash monitor
Note: If the console selection is wrong, you will only see the initial bootloader logs. Please change the console as instructed above and reflash the app to see the complete logs.
Note: Currently, due to flash size limitations of ESP32-C6 onboard the
ESP32-P4 Function EV Board, the ota_1 partition (see
partitions.csv) is disabled and the size of the ota_0
partition is increased. This prevents the firmware from performing OTA updates.
Hence, this configuration is not recommended for production use.
Testing
You can use any Matter based camera controller app to view the video feed. Alternatively, you can also use the camera controller example from the connnectedhomeip repository.