# Matter Camera Controller Example

This example application demonstrates the CHIP Camera Controller running on a
Linux platform and explains how to build and run the Camera Controller Example
on Linux.

In a typical setup, the Camera Controller app manages a CameraDevice app running
on a Raspberry Pi. The CameraDevice captures and encodes the video feed before
streaming it through a WebRTC track, while the CameraController receives this
video stream and displays it, creating a complete end-to-end camera solution.

---

-   [Building the Example Application](#building-the-example-application)

---

## Building the Example Application

Building and Running the Camera Example (Linux)

1. Install build‑time and runtime dependencies

```
sudo apt update
sudo apt install \
  gstreamer1.0-plugins-base \
  gstreamer1.0-plugins-good \
  gstreamer1.0-plugins-bad \
  gstreamer1.0-libav \
  libgstreamer1.0-dev \
  libgstreamer-plugins-base1.0-dev
```

2. Build the camera‑controller binary

```
# Initialise the CHIP build environment
source scripts/activate.sh

cd examples/camera-controller/

# Compile the Linux x86‑64 camera‑controller target
./scripts/build/build_examples.py \
    --target linux-x64-camera-controller \
    build
```

The resulting executable is placed in:

```
out/linux-x64-camera-controller/chip-camera-controller.
```

3. Build the app binary

```
# Initialise the CHIP build environment
source scripts/activate.sh

cd examples/camera-app/

# Compile the Linux x86‑64 camera‑app target
./scripts/build/build_examples.py \
    --target linux-x64-camera \
    build
```

The resulting executable is placed in:

```
out/linux-x64-camera/chip-camera-app.
```

4. Start the camera accessory Open a new terminal and run:

```
./out/linux-x64-camera-app/chip-camera-app --camera-deferred-offer
```

5. Launch the camera controller In a second terminal:

```
./out/linux-x64-camera-controller/chip-camera-controller
```

6. Commission the camera device At the controller prompt, pair over the local
   network using the default setup PIN 20202021 and an arbitrary nodeID 1:

```
pairing onnetwork 1 20202021
```

Wait until commissioning succeeds.

7. Start a live‑view stream Still in the controller shell, request a live view
   from the camera you just paired:

```
liveview start 1
```

You should see the GStreamer pipeline start and a video window appear,
confirming that the camera stream is active.
