> For the complete documentation index, see [llms.txt](https://dev.solid-run.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dev.solid-run.com/hailo/hailo-15/sbc-platform/hailo-15-other-articles/hailo-15-evk-imx678-csi-camera-streaming-over-gstreamer-rtp-udp.md).

# Hailo-15 EVK — IMX678 CSI Camera Streaming over GStreamer RTP/UDP

## CSI Camera Live Streaming — IMX678 via GStreamer

This section describes how to stream live video from the IMX678 CSI camera connected to the **Hailo-HB-IIoT EVK** (SolidRun Hailo-15 SBC) to a **Ubuntu PC** over a local network using GStreamer's RTP/UDP pipeline.

The EVK acts as the **sender**, capturing raw frames from the camera, encoding them with H.264, and transmitting them over UDP. The Ubuntu PC acts as the **receiver**, decoding and displaying the stream in real time.

### Revision and Notes

| Date        | Owner        | Revision | Notes           |
| ----------- | ------------ | -------- | --------------- |
| 15 Apr 2026 | Yazan Shhady | 1.0      | Initial release |

### Prerequisites

Before running the commands, make sure the following conditions are met:

* Both the EVK and the Ubuntu PC are connected to the **same local network**
* **GStreamer** is installed on both the EVK and the PC
* The following GStreamer plugin packages are available on both sides:
  * `gstreamer1.0-plugins-base`
  * `gstreamer1.0-plugins-good` (includes `v4l2src`, `rtpjitterbuffer`, `udpsink/udpsrc`)
  * `gstreamer1.0-plugins-ugly` (includes `x264enc`)
  * `gstreamer1.0-libav` (includes `avdec_h264`)
* **UDP port 5000** is not blocked by the firewall on the PC

> **Find your PC's IP address** by running `ip addr` or `hostname -I` on the Ubuntu PC. It is referred to as `<PC_IP>` in the commands below.

***

### Step 1 — Start the receiver on the Ubuntu PC

Launch the receiver **first**, before starting the sender on the EVK. This ensures the PC is ready to accept the incoming UDP stream before transmission begins.

bash

```bash
gst-launch-1.0 -v \
  udpsrc port=5000 \
  caps="application/x-rtp,media=video,encoding-name=H264,clock-rate=90000,payload=96" ! \
  rtpjitterbuffer ! \
  rtph264depay ! \
  h264parse ! \
  avdec_h264 ! \
  videoconvert ! \
  autovideosink sync=false
```

**Pipeline breakdown:**

| Element            | Role                                                          |
| ------------------ | ------------------------------------------------------------- |
| `udpsrc port=5000` | Listens for incoming UDP packets on port 5000                 |
| `rtpjitterbuffer`  | Smooths out packet timing variations caused by network jitter |
| `rtph264depay`     | Extracts H.264 bitstream from RTP packets                     |
| `h264parse`        | Parses the H.264 stream for downstream decoding               |
| `avdec_h264`       | Decodes H.264 video using libav                               |
| `videoconvert`     | Converts the decoded frame format for display                 |
| `autovideosink`    | Renders the video in a display window                         |

***

### Step 2 — Start the sender on the EVK

Run the following command on the **Hailo-HB-IIoT EVK**. Replace `<PC_IP>` with the actual IP address of your Ubuntu PC.

bash

```bash
gst-launch-1.0 -v \
  v4l2src device=/dev/video0 ! \
  video/x-raw,width=1920,height=1080,framerate=30/1 ! \
  videoconvert ! \
  x264enc tune=zerolatency bitrate=4000 speed-preset=ultrafast ! \
  rtph264pay pt=96 config-interval=1 ! \
  udpsink host=<PC_IP> port=5000 sync=false
```

**Pipeline breakdown:**

| Element                                                        | Role                                                   |
| -------------------------------------------------------------- | ------------------------------------------------------ |
| `v4l2src device=/dev/video0`                                   | Captures raw frames from the IMX678 camera via V4L2    |
| `video/x-raw,width=1920,height=1080,framerate=30/1`            | Sets the capture resolution to 1080p at 30 fps         |
| `videoconvert`                                                 | Converts the raw frame format for the encoder          |
| `x264enc tune=zerolatency bitrate=4000 speed-preset=ultrafast` | Encodes video with H.264 optimized for minimal latency |
| `rtph264pay pt=96 config-interval=1`                           | Packages the H.264 stream into RTP packets             |
| `udpsink host=<PC_IP> port=5000`                               | Transmits RTP packets to the PC over UDP               |

***

### Expected result

Once both pipelines are running, a video window will open on the Ubuntu PC displaying the live feed from the IMX678 camera at 1920×1080 resolution and 30 fps.

***

### Pipeline design notes

* **`tune=zerolatency`** — Disables B-frames and encoder lookahead, significantly reducing encoder-introduced delay.
* **`speed-preset=ultrafast`** — Minimizes encoding computation time at the cost of slightly lower compression efficiency, which is the right trade-off for real-time streaming.
* **`config-interval=1`** — Sends SPS/PPS headers with every keyframe, making the stream more robust if the receiver joins late or the connection is briefly interrupted.
* **`sync=false`** on both ends — Prevents GStreamer's internal clock from throttling the pipeline, which would otherwise introduce buffering delays.
* **`rtpjitterbuffer`** on the receiver — Compensates for out-of-order or delayed UDP packets on the network without stalling the decoder.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dev.solid-run.com/hailo/hailo-15/sbc-platform/hailo-15-other-articles/hailo-15-evk-imx678-csi-camera-streaming-over-gstreamer-rtp-udp.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
