For the complete documentation index, see llms.txt. This page is also available as Markdown.

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

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

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.

Last updated