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
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-basegstreamer1.0-plugins-good(includesv4l2src,rtpjitterbuffer,udpsink/udpsrc)gstreamer1.0-plugins-ugly(includesx264enc)gstreamer1.0-libav(includesavdec_h264)
UDP port 5000 is not blocked by the firewall on the PC
Find your PC's IP address by running
ip addrorhostname -Ion 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:
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:
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=falseon both ends — Prevents GStreamer's internal clock from throttling the pipeline, which would otherwise introduce buffering delays.rtpjitterbufferon the receiver — Compensates for out-of-order or delayed UDP packets on the network without stalling the decoder.
Last updated