# Multi-camera/Multi-client use cases
The multi-camera/multi-client use cases show scenarios where several camera streams are displayed in modes such as picture-in-picture and side by side.
Before you run the use cases, ensure that you complete the preconditions mentioned in [GStreamer command-line use cases](https://docs.qualcomm.com/doc/80-80021-50/topic/gstreamer-application-use-cases.html).
## GMSL camera limitation for Dragonwing IQ-8275 and Dragonwing IQ-9075
With the existing software configuration, a single GMSL port supports connection to only one GMSL camera on any of its four slots.
- The GMSL Port-0 supports a single Bayer camera.
- The current release supports the OX03f10 Bayer GMSL and OX03f10 YUV GMSL cameras.
Dragonwing IQ-8275 and Dragonwing IQ-9075–GSML port support and limitation
| SoC | GMSL port connection |
| --- | --- |
| QCS6490 | Ensure that you connect the MIPI cameras to the CSI slots on the Qualcomm Dragonwing^™^ RB3 Gen 2 Development Kit. - Connect the OV9282 MIPI camera to the CAM 0A slot. - Connect the IMX577 MPI camera to the CAM3 slot. |
| Dragonwing IQ-8275 | Ensure that you connect the GMSL camera sensors to the Ride SX device.
Connect the OX03F10 Bayer GMSL camera to GMSL port 0.
Connect the OX03F10 YUV GMSL cameras to port 1 and port 3.
|
| Dragonwing IQ-9075 |
MIPI: Connect four OV9282 MIPI cameras to the CSI slots.
GMSL: Connect the OX03F10 Bayer GMSL camera to GMSL port 0 and OX03F10 YUV GMSL cameras to port 2 and port 3.
|
## Two streams—4k AVC MP4, 1080p YUV preview as Client 1 (main camera) and 720p AVC, 720p YUV as Client 2 (secondary camera)
The use cases use two (4k and 1080p) streams from the main camera, and two 720p streams from the secondary camera. One stream from each camera is multiplexed and encoded while the other pair is displayed.
Multi camera client use cases for encoding and preview
| Use case | Camera (client) |
| --- | --- |
| Multiplexed and encoded |
Main camera–4k AVC MP4
Secondary camera–720p AVC
|
| Preview |
Main camera–1080p YUV
Secondary camera–720p YUV
|
Run the use case on the target device:
gst-launch-1.0 -e qtiqmmfsrc name=camsrc_0 video_0::type=video video_1::type=preview ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! v4l2h264enc capture-io-mode=4 output-io-mode=5 ! h264parse ! queue ! mp4mux ! filesink location="/opt/mux1.mp4" \
camsrc_0.video_1 ! video/x-raw,format=NV12_Q08C,width=1280,height=720,framerate=30/1 ! waylandsink
qtiqmmfsrc name=camsrc_1 video_0::type=video video_1::type=preview ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! v4l2h264enc capture-io-mode=4 output-io-mode=5 ! h264parse ! queue ! mp4mux ! filesink location="/opt/mux2.mp4" \
camsrc_1.video_1 ! video/x-raw,format=NV12_Q08C,width=1280,height=720,framerate=30/1 ! waylandsink
Copy to clipboard
To stop the use case, use **CTRL + C**.
Pull recorded content from the device and play content on the Linux host computer.
In the terminal of the host computer, run the following commands:
scp -r root@[DEVICE IP-ADDR]:/opt/mux1.mp4 user1@[HOST IP-ADDR]:/workspace
Copy to clipboard
scp -r root@[DEVICE IP-ADDR]:/opt/mux2.mp4 user1@[HOST IP-ADDR]:/workspace
Copy to clipboard
You can play the MP4 file and snapshots on a media player and view the preview stream on the screen.
The following figure shows the flow of pipeline execution:
**Figure : Pipeline for two camera clients–encoding and preview**
## Two 720p streams—one from each camera with side by side stitching for display
The pipeline shows two 720p streams from the main camera and secondary camera respectively. Both the streams are composed side by side and displayed.
Run the use case on the target device:
gst-launch-1.0 -e qtivcomposer name=mixer sink_0::position="<0, 0>" sink_0::dimensions="<640, 360>" sink_1::position="<640, 0>" sink_1::dimensions="<640, 360>" mixer. ! queue ! waylandsink enable-last-sample=false fullscreen=true qtiqmmfsrc name=camsrc_0 camera=0 ! video/x-raw, format=NV12, width=1280, height=720, framerate=30/1 ! mixer. qtiqmmfsrc name=camsrc_1 camera=1 ! video/x-raw, format=NV12, width=1280, height=720, framerate=30/1 ! mixer.
Copy to clipboard
The composed streams from the camera are displayed.
To stop the use case, use **CTRL + C**.
The following figure shows the flow of pipeline execution:
**Figure : Two streams from primary and secondary cameras–side by side display**
## Two 720p streams—one from each camera with side by side stitching for encode and RTSP streaming
The pipeline shows two 720p streams from the main camera and secondary camera respectively. Both are composed side by side, and then duplicated and encoded. One is multiplexed and saved to a file while the other is streamed through RTSP.
Run the RTSP server in a separate console on the target device with `udpsrc`. You can also run it in the background as a service:
gst-rtsp-server -p 8900 -a -m /live "( udpsrc name=pay0 port=8554 caps=\"application/x-rtp,media=video,clock-rate=90000,encoding-name=H264,payload=96\" )"
Copy to clipboard
Run the pipeline in the same or another console on the target device:
gst-launch-1.0 -e qtivcomposer name=mixer sink_0::position='<0,0>' sink_0::dimensions='<640,360>' sink_1::position='<640,0>' sink_1::dimensions='<640,360>' mixer. ! queue ! tee name=t_split t_split. ! queue ! video/x-raw,interlace-mode=progressive,colorimetry=bt601 ! v4l2h264enc capture-io-mode=4 output-io-mode=5 ! h264parse ! queue ! mp4mux ! queue ! filesink location=/opt/mux.mp4 t_split. ! queue ! video/x-raw,interlace-mode=progressive,colorimetry=bt601 ! v4l2h264enc capture-io-mode=4 output-io-mode=5 ! h264parse config-interval=-1 ! queue ! qtirtspbin address= port=8554 qtiqmmfsrc name=camsrc_0 camera=0 ! video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 ! mixer. qtiqmmfsrc name=camsrc_1 camera=1 ! video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 ! mixer.
Copy to clipboard
To stop the use case, use **CTRL + C**.
Pull the recorded content from the device and play content on the Linux host computer.
In the terminal of the host computer, run the following command:
scp root@:/opt/mux.mp4
Copy to clipboard
You can play the MP4 file on a media player. The streamed video is displayed as an RTSP stream on the host computer. See [RTSP stream on host computer](https://docs.qualcomm.com/doc/80-80021-50/topic/camera-and-video-encode.html#section-ayq-2nh-pyb).
The following figure shows the flow of the pipeline execution:
**Figure : Pipeline for two 720p camera streams–side by side display, encoded, and streamed through RTSP**
## Two 720p streams—one from each camera with picture-in-picture composition and sent to display
The use case uses two 720p streams from the main camera and secondary camera respectively. Both are composed as picture-in-picture and displayed.
Run the use case on the target device:
gst-launch-1.0 -e qtivcomposer name=mixer sink_0::position="<0, 0>" sink_0::dimensions="<1280, 720>" sink_1::position="<590, 310>" sink_1::dimensions="<640, 360>" mixer. ! queue ! waylandsink enable-last-sample=false fullscreen=true qtiqmmfsrc name=camsrc_0 camera=0 ! video/x-raw, format=NV12, width=1280, height=720, framerate=30/1 ! mixer. qtiqmmfsrc name=camsrc_1 camera=1 ! video/x-raw, format=NV12, width=1280, height=720, framerate=30/1 ! mixer.
Copy to clipboard
The composed streams from the camera (picture-in-picture) are displayed.
To stop the use case, use **CTRL + C**.
The following figure shows the flow of the pipeline execution:
**Figure : Pipeline for two 720p streams–picture-in-picture display**
## Two 720p streams—one from each camera with picture-in-picture composition for encode and RTSP streaming
The use case uses two 720p streams from the main camera and secondary camera respectively. Both are composed as picture-in-picture, and then duplicated and encoded. One stream is multiplexed and saved to a file and the other is streamed through RTSP.
Run the use case:
- Run RTSP server in a separate console on the target device with `udpsrc`. You can run it in the background as a service:
gst-rtsp-server -p 8900 -a -m /live "( udpsrc name=pay0 port=8554 caps=\"application/x-rtp,media=video,clock-rate=90000,encoding-name=H264,payload=96\" )"
Copy to clipboard
- Run the pipeline in same or another console on the target device:
gst-launch-1.0 -e qtivcomposer name=mixer sink_0::position=""<0, 0>"" sink_0::dimensions=""<1280, 720>"" sink_1::position=""<590, 310>"" sink_1::dimensions=""<640, 360>"" mixer. ! queue ! tee name=t_split t_split. ! queue ! video/x-raw,framerate=30/1,interlace-mode=progressive,colorimetry=bt601 ! v4l2h264enc capture-io-mode=4 output-io-mode=5 ! h264parse ! queue ! mp4mux ! queue ! filesink location=/opt/mux.mp4 t_split. ! queue ! video/x-raw,framerate=30/1,interlace-mode=progressive,colorimetry=bt601 ! v4l2h264enc capture-io-mode=4 output-io-mode=5 ! h264parse config-interval=-1 ! queue ! qtirtspbin address= port=8554 qtiqmmfsrc name=camsrc_0 camera=0 ! video/x-raw, format=NV12, width=1280, height=720, framerate=30/1 ! mixer. qtiqmmfsrc name=camsrc_1 camera=1 ! video/x-raw, format=NV12, width=1280, height=720, framerate=30/1 ! mixer.
Copy to clipboard
- To stop the use case, use **CTRL + C**.
Pull the recorded content from the device and play content on the Linux host computer.
In the terminal of the host computer run the following command:
scp root@:/opt/
Copy to clipboard
You can play the MP4 file on a media player. The video is streamed over RTSP on a host computer. See [RTSP stream on host computer](https://docs.qualcomm.com/doc/80-80021-50/topic/camera-and-video-encode.html#section-ayq-2nh-pyb).
The following figure shows the flow of the pipeline execution:
**Figure : Pipeline for two 720p camera streams–picture-in-picture display, encoded, and streamed through RTSP**
### Related information
- [Multi-camera streaming](https://docs.qualcomm.com/doc/80-80021-50/topic/gst-multi-camera-stream-example.html)
- [Multi-camera streaming using Python](https://docs.qualcomm.com/doc/80-80021-50/topic/multi-camera-streaming-python-sample-app.html)
Last Published: Mar 26, 2026
[Previous Topic
Video encode and decode](https://docs.qualcomm.com/bundle/publicresource/80-80021-50/topics/camera-and-video-encode.md) [Next Topic
Transform and Transcode use cases](https://docs.qualcomm.com/bundle/publicresource/80-80021-50/topics/transform-and-transcode-use-cases.md)