> ## Documentation Index
> Fetch the complete documentation index at: https://imsdkdocs.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Multimedia

This section covers QIM SDK multimedia pipelines that use LiteRT for inference.

## 1. Camera

***

### 1.1 Single 1080p YUV stream from live source

**Description**
Captures a live feed from a camera device (e.g., USB via V4L2 or MIPI camera via qticamsrc) and displays it on the screen using Wayland.

**Pipeline Diagram**

This Pipeline diagram for USB camera

<img src="https://mintcdn.com/qimsdk/LUzi1SsU-yLionE6/sample-pipelines/images/multimediapipelines_single-1080p-yuv-stream-from-live-source.png?fit=max&auto=format&n=LUzi1SsU-yLionE6&q=85&s=94d1089205eb8095ae7898eb7b5f86a6" alt="Pipeline Diagram" width="947" height="219" data-path="sample-pipelines/images/multimediapipelines_single-1080p-yuv-stream-from-live-source.png" />

**Pipeline Command**

<Accordion title="Try me">
  <CodeGroup>
    ```bash ISP camera theme={null}
    gst-launch-1.0 \
      qticamsrc name=camsrc ! \
      video/x-raw,width=1920,height=1080,framerate=30/1 ! \
      waylandsink fullscreen=true
    ```

    ```bash USB camera theme={null}
    gst-launch-1.0 \
      v4l2src device=/dev/video0 ! \
      video/x-raw,format=YUY2 ! \
      qtivtransform ! video/x-raw,format=NV12 ! \
      waylandsink fullscreen=true
    ```

    ```bash RTSP camera theme={null}
    gst-launch-1.0 \
      rtspsrc location={file_path} latency=200 ! rtph264depay ! h264parse ! \
      v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! \
      waylandsink fullscreen=true
    ```
  </CodeGroup>

  <Accordion title="Plugins used in Pipeline">
    | Plugin                                             | Description                                                               |
    | -------------------------------------------------- | ------------------------------------------------------------------------- |
    | [qticamsrc](../plugin-reference/qticamsrc)         | ISP camera source plugin for capturing raw video frames from MIPI camera. |
    | [v4l2src](../plugin-reference/v4l2src)             | V4L2-based video capture source for USB cameras.                          |
    | [videoconvert](../plugin-reference/videoconvert)   | Converts video between different color formats.                           |
    | [qtivtransform](../plugin-reference/qtivtransform) | Hardware-accelerated video transformation (format conversion, scaling).   |
    | [waylandsink](../plugin-reference/waylandsink)     | Renders video frames to a Wayland display surface.                        |
  </Accordion>
</Accordion>

<Note>
  In case of an **Internal data stream error** for USB camera, ensure that the USB camera device node or for RTSP camera RTSP stream location are correctly configured.
</Note>

***

### 1.2 Three 1080p YUV streams from live source

**Description**
Captures three 1080p streams from a single multi-stream capable camera source (`qticamsrc`) and displays them at different positions on the same screen.

**Pipeline Diagram**

<img src="https://mintcdn.com/qimsdk/LUzi1SsU-yLionE6/sample-pipelines/images/multimediapipelines_three-1080p-yuv-streams-from-live-source.png?fit=max&auto=format&n=LUzi1SsU-yLionE6&q=85&s=946d6761148734cf0a7717cc6b7007ad" alt="Pipeline Diagram" width="1352" height="507" data-path="sample-pipelines/images/multimediapipelines_three-1080p-yuv-streams-from-live-source.png" />

**Pipeline Command**

<Accordion title="Try me">
  ```bash theme={null}
  gst-launch-1.0 -e -v \
    qtivcomposer name=mixer \
      sink_0::position="<0,0>"  sink_0::dimensions="<480,270>" \
      sink_1::position="<480,0>"  sink_1::dimensions="<480,270>" \
      sink_2::position="<960,0>"  sink_2::dimensions="<480,270>" \
    mixer. ! queue ! waylandsink fullscreen=true \
    qticamsrc name=camsrc camera=0 video_0::type=preview video_1::type=video \
    camsrc. ! queue ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 \
             ! videoscale ! video/x-raw,width=480,height=270 \
             ! mixer.sink_0 \
    camsrc. ! queue ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 \
             ! videoscale ! video/x-raw,width=480,height=270 \
             ! mixer.sink_1 \
    camsrc. ! queue ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 \
             ! videoscale ! video/x-raw,width=480,height=270 \
             ! mixer.sink_2
  ```

  <Accordion title="Plugins used in Pipeline">
    | Plugin                                           | Description                                                                   |
    | ------------------------------------------------ | ----------------------------------------------------------------------------- |
    | [qticamsrc](../plugin-reference/qticamsrc)       | ISP camera source plugin supporting multiple simultaneous output streams.     |
    | [qtivcomposer](../plugin-reference/qtivcomposer) | Hardware video compositor that blends multiple input streams into one output. |
    | [waylandsink](../plugin-reference/waylandsink)   | Renders video frames to a Wayland display surface.                            |
  </Accordion>
</Accordion>

***

## 2. Camera and Video Encode

### 2.1  One Stream — 1080p AVC Video Record

**Description**
This pipeline captures a single 1080p live camera stream, encodes it to H.264 (AVC) using hardware acceleration, muxes it into an MP4 container, and saves it to the device filesystem.

**Pipeline Diagram**

<img src="https://mintcdn.com/qimsdk/LUzi1SsU-yLionE6/sample-pipelines/images/multimediapipelines_one-stream-1080p-avc-video-record.png?fit=max&auto=format&n=LUzi1SsU-yLionE6&q=85&s=92152633d246b30e229f0206ca792df7" alt="Pipeline Diagram" width="1836" height="245" data-path="sample-pipelines/images/multimediapipelines_one-stream-1080p-avc-video-record.png" />

**Pipeline Command**

<Accordion title="Try me">
  ```bash export command theme={null}
  mkdir -p $HOME/{media,models}
  ```

  ```bash pipeline command theme={null}
  gst-launch-1.0 -e \
    qticamsrc name=camsrc camera=0 video_0::type=preview video_1::type=video ! \
    video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! \
    queue ! v4l2h264enc capture-io-mode=4 output-io-mode=4 ! \
    queue ! h264parse ! mp4mux ! queue ! \
    filesink location=$HOME/media/mux.mp4
  ```

  <Accordion title="Plugins used in Pipeline">
    | Plugin                                         | Description                                              |
    | ---------------------------------------------- | -------------------------------------------------------- |
    | [qticamsrc](../plugin-reference/qticamsrc)     | ISP camera source plugin for capturing raw video frames. |
    | [v4l2h264enc](../plugin-reference/v4l2h264enc) | Hardware-accelerated H.264 video encoder.                |
    | h264parse                                      | Parses H.264 bitstream and adds framing metadata.        |
    | mp4mux                                         | Muxes encoded streams into an MP4 container.             |
    | filesink                                       | Writes pipeline data to a file on the filesystem.        |
  </Accordion>
</Accordion>

Pull Recorded File to Host PC

```bash theme={null}
# Using SCP
scp -r root@[DEVICE IP-ADDR]:$HOME/mux.mp4 .
```

***

### 2.2  One Stream - 1080p AVC RTSP from live source

**Description**
Captures 1080p video, encodes it to H.264, and streams it over RTSP using `gst-rtsp-server` (via UDP sink).

**Pipeline Diagram**

<img src="https://mintcdn.com/qimsdk/LUzi1SsU-yLionE6/sample-pipelines/images/multimediapipelines_one-stream-1080p-avc-rtsp-from-live-source.png?fit=max&auto=format&n=LUzi1SsU-yLionE6&q=85&s=7953a450861bca255d7dc207b07fb939" alt="Pipeline Diagram" width="1810" height="209" data-path="sample-pipelines/images/multimediapipelines_one-stream-1080p-avc-rtsp-from-live-source.png" />

**Pipeline Command**

<Accordion title="Try me">
  ```bash theme={null}
  ## 1. Start RTSP Server (in background or separate terminal)
  gst-rtsp-server -p 8900 -m /live "( udpsrc name=pay0 port=8554 caps=\"application/x-rtp,media=video,clock-rate=90000,encoding-name=H264,payload=96\" )" &

  ## 2. Run Pipeline
  gst-launch-1.0 -e \
    qticamsrc ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! \
    v4l2h264enc capture-io-mode=4 output-io-mode=4 ! \
    h264parse config-interval=-1 ! rtph264pay pt=96 ! \
    udpsink host=127.0.0.1 port=8554
  ```

  <Accordion title="Plugins used in Pipeline">
    | Plugin                                         | Description                                              |
    | ---------------------------------------------- | -------------------------------------------------------- |
    | [qticamsrc](../plugin-reference/qticamsrc)     | ISP camera source plugin for capturing raw video frames. |
    | [v4l2h264enc](../plugin-reference/v4l2h264enc) | Hardware-accelerated H.264 video encoder.                |
    | h264parse                                      | Parses H.264 bitstream and adds framing metadata.        |
    | rtph264pay                                     | Payloads H.264 video into RTP packets.                   |
    | udpsink                                        | Sends RTP packets over UDP for RTSP streaming.           |
  </Accordion>
</Accordion>

***

### 2.3 Two streams - 4K AVC and 480p AVC from live source

**Description**
Simultaneously captures and records two streams: one 4K and one 480p, both encoded in H.264 and saved as MP4.

**Pipeline Diagram**

<img src="https://mintcdn.com/qimsdk/LUzi1SsU-yLionE6/sample-pipelines/images/multimediapipelines_two-streams-4k-avc-and-480p-avc-from-live-source.png?fit=max&auto=format&n=LUzi1SsU-yLionE6&q=85&s=d076c22839fe362ad700c0c7282eaa8a" alt="Pipeline Diagram" width="1855" height="556" data-path="sample-pipelines/images/multimediapipelines_two-streams-4k-avc-and-480p-avc-from-live-source.png" />

**Pipeline Command**

<Accordion title="Try me">
  ```bash export command theme={null}
  mkdir -p $HOME/{media,models}
  ```

  ```bash pipeline command theme={null}
  gst-launch-1.0 -e --gst-debug=2 \
    qticamsrc name=camsrc camera=0 video_0::type=preview video_1::type=video \
    camsrc. ! video/x-raw,format=NV12,width=3840,height=2160,framerate=30/1 ! \
        queue ! v4l2h264enc capture-io-mode=4 output-io-mode=4 ! \
        queue ! h264parse ! mp4mux ! queue ! filesink location=$HOME/media/video1.mp4 \
    camsrc. ! video/x-raw,format=NV12,width=640,height=480,framerate=30/1 ! \
        queue ! v4l2h264enc capture-io-mode=4 output-io-mode=4 ! \
        queue ! h264parse ! mp4mux ! queue ! filesink location=$HOME/media/video2.mp4
  ```

  <Accordion title="Plugins used in Pipeline">
    | Plugin                                         | Description                                                        |
    | ---------------------------------------------- | ------------------------------------------------------------------ |
    | [qticamsrc](../plugin-reference/qticamsrc)     | ISP camera source supporting multiple simultaneous output streams. |
    | [v4l2h264enc](../plugin-reference/v4l2h264enc) | Hardware-accelerated H.264 video encoder.                          |
    | h264parse                                      | Parses H.264 bitstream and adds framing metadata.                  |
    | mp4mux                                         | Muxes encoded streams into an MP4 container.                       |
    | filesink                                       | Writes pipeline data to a file on the filesystem.                  |
  </Accordion>
</Accordion>

***

### 2.4 Three 1080p AVC streams from live source

**Description**
Records 1080p AVC (H.264), 1080p HEVC (H.265), and displays a live 1080p preview simultaneously.

**Pipeline Diagram**

<img src="https://mintcdn.com/qimsdk/LUzi1SsU-yLionE6/sample-pipelines/images/multimediapipelines_three-1080p-avc-streams-from-live-source.png?fit=max&auto=format&n=LUzi1SsU-yLionE6&q=85&s=c7c6f045631f58cfaf23483628f80396" alt="Pipeline Diagram" width="1834" height="713" data-path="sample-pipelines/images/multimediapipelines_three-1080p-avc-streams-from-live-source.png" />

**Pipeline Command**

<Accordion title="Try me">
  ```bash export command theme={null}
  mkdir -p $HOME/{media,models}
  ```

  ```bash pipeline command theme={null}
  gst-launch-1.0 -e --gst-debug=2 \
    qticamsrc name=camsrc camera=0 video_0::type=preview video_1::type=video \
    camsrc. ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! \
        queue ! v4l2h264enc capture-io-mode=4 output-io-mode=4 ! \
        queue ! h264parse ! mp4mux ! queue ! filesink location=$HOME/media/video2.mp4 \
    camsrc. ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! \
        queue ! v4l2h265enc capture-io-mode=4 output-io-mode=4 ! \
        queue ! h265parse ! mp4mux ! queue ! filesink location=$HOME/media/video2_hevc.mp4 \
    camsrc. ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! \
        waylandsink sync=false fullscreen=true enable-last-sample=false
  ```

  <Accordion title="Plugins used in Pipeline">
    | Plugin                                         | Description                                                        |
    | ---------------------------------------------- | ------------------------------------------------------------------ |
    | [qticamsrc](../plugin-reference/qticamsrc)     | ISP camera source supporting multiple simultaneous output streams. |
    | [v4l2h264enc](../plugin-reference/v4l2h264enc) | Hardware-accelerated H.264 video encoder.                          |
    | h264parse                                      | Parses H.264 bitstream and adds framing metadata.                  |
    | [v4l2h265enc](../plugin-reference/v4l2h265enc) | Hardware-accelerated H.265/HEVC video encoder.                     |
    | h265parse                                      | Parses H.265 bitstream and adds framing metadata.                  |
    | mp4mux                                         | Muxes encoded streams into an MP4 container.                       |
    | filesink                                       | Writes pipeline data to a file on the filesystem.                  |
    | [waylandsink](../plugin-reference/waylandsink) | Renders video frames to a Wayland display surface.                 |
  </Accordion>
</Accordion>

***

### 2.5 Three stream - 4K JPEG Snapshot, 1080p AVC MP4, 1080p YUV from live source

**Description**
Captures 4K JPEG snapshots, records 1080p video, and displays a preview simultaneously.

**Pipeline Diagram**

<img src="https://mintcdn.com/qimsdk/LUzi1SsU-yLionE6/sample-pipelines/images/multimediapipelines_three-stream-4k-jpeg-snapshot-1080p-avc-mp4-1080p-yuv-from-live-source.png?fit=max&auto=format&n=LUzi1SsU-yLionE6&q=85&s=952b5fc4538d73510eb25d6dccd4acaa" alt="Pipeline Diagram" width="1835" height="712" data-path="sample-pipelines/images/multimediapipelines_three-stream-4k-jpeg-snapshot-1080p-avc-mp4-1080p-yuv-from-live-source.png" />

**Pipeline Command**

<Accordion title="Try me">
  ```bash export command theme={null}
  mkdir -p $HOME/{media,models}
  ```

  ```bash pipeline command theme={null}
  gst-launch-1.0 -e --gst-debug=2 \
    qticamsrc name=camsrc camera=0 video_0::type=preview video_1::type=video \
    camsrc. ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! \
        queue ! v4l2h264enc capture-io-mode=4 output-io-mode=4 ! \
        queue ! h264parse ! mp4mux ! queue ! filesink location=$HOME/media/video2.mp4 \
    camsrc.image_1 ! "image/jpeg,width=3840,height=2160,framerate=30/1" ! \
        multifilesink location=$HOME/media/frame%d.jpg sync=true async=false \
    camsrc. ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! \
        waylandsink fullscreen=true async=true sync=false
  ```

  <Accordion title="Plugins used in Pipeline">
    | Plugin                                         | Description                                                            |
    | ---------------------------------------------- | ---------------------------------------------------------------------- |
    | [qticamsrc](../plugin-reference/qticamsrc)     | ISP camera source supporting video, preview, and image output streams. |
    | [v4l2h264enc](../plugin-reference/v4l2h264enc) | Hardware-accelerated H.264 video encoder.                              |
    | h264parse                                      | Parses H.264 bitstream and adds framing metadata.                      |
    | mp4mux                                         | Muxes encoded streams into an MP4 container.                           |
    | filesink                                       | Writes pipeline data to a file on the filesystem.                      |
    | multifilesink                                  | Writes a sequence of JPEG snapshot files to disk.                      |
    | [waylandsink](../plugin-reference/waylandsink) | Renders video frames to a Wayland display surface.                     |
  </Accordion>
</Accordion>

***

## 3. Multi Camera/Multi client use cases

### 3.1 Two streams: Main camera: 4K AVC MP4, 1080p YUV Preview and Secondary Camera: 720p AVC, 720p YUV

**Description**
Uses two camera sensors. Main camera provides 4K recording and 1080p preview. Secondary camera provides 720p recording and 720p preview.

**Pipeline Diagram**

<img src="https://mintcdn.com/qimsdk/LUzi1SsU-yLionE6/sample-pipelines/images/multimediapipelines_two-streams-main-camera-4k-avc-mp4-1080p-yuv-preview-and-secondary-camera-720p-avc-720p-yuv.png?fit=max&auto=format&n=LUzi1SsU-yLionE6&q=85&s=9cc46d0ee450cbe548167d1d0bd068f9" alt="Pipeline Diagram" width="1066" height="750" data-path="sample-pipelines/images/multimediapipelines_two-streams-main-camera-4k-avc-mp4-1080p-yuv-preview-and-secondary-camera-720p-avc-720p-yuv.png" />

**Pipeline Command**

<Accordion title="Try me">
  ```bash export command theme={null}
  mkdir -p $HOME/{media,models}
  ```

  ```bash pipeline command theme={null}
  gst-launch-1.0 -e \
    qticamsrc name=camsrc_0 camera=0 video_0::type=video video_1::type=preview \
    camsrc_0. ! video/x-raw,format=NV12,width=3840,height=2160,framerate=30/1 \
        ! queue ! v4l2h264enc capture-io-mode=4 output-io-mode=4 \
        ! queue ! h264parse ! mp4mux ! filesink location=$HOME/media/main_4k.mp4 \
    camsrc_0. ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 \
        ! queue ! waylandsink sync=false \
    qticamsrc name=camsrc_1 camera=1 video_0::type=video video_1::type=preview \
    camsrc_1. ! video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 \
        ! queue ! v4l2h264enc capture-io-mode=4 output-io-mode=4 \
        ! queue ! h264parse ! mp4mux ! filesink location=$HOME/media/secondary_720p.mp4 \
    camsrc_1. ! video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 \
        ! queue ! filesink location=$HOME/media/secondary_720p.yuv
  ```

  <Accordion title="Plugins used in Pipeline">
    | Plugin                                         | Description                                               |
    | ---------------------------------------------- | --------------------------------------------------------- |
    | [qticamsrc](../plugin-reference/qticamsrc)     | ISP camera source plugin; one instance per camera sensor. |
    | [v4l2h264enc](../plugin-reference/v4l2h264enc) | Hardware-accelerated H.264 video encoder.                 |
    | h264parse                                      | Parses H.264 bitstream and adds framing metadata.         |
    | mp4mux                                         | Muxes encoded streams into an MP4 container.              |
    | filesink                                       | Writes pipeline data to a file on the filesystem.         |
    | [waylandsink](../plugin-reference/waylandsink) | Renders video frames to a Wayland display surface.        |
  </Accordion>
</Accordion>

***

### 3.2 Two streams - both 720p - one from each camera with Side-By-Side stitching sent to display

**Description**
Stitches two 720p streams (one from each camera) into a single side-by-side frame using [`qtivcomposer`](../plugin-reference/qtivcomposer). The result is recorded and streamed via RTSP.

**Pipeline Diagram**

<img src="https://mintcdn.com/qimsdk/LUzi1SsU-yLionE6/sample-pipelines/images/multimediapipelines_two-streams-both-720p-one-from-each-camera-with-side-by-side-stitching-sent-to-display.png?fit=max&auto=format&n=LUzi1SsU-yLionE6&q=85&s=224b2ee6102c4ff2923ae18e65a67e26" alt="Pipeline Diagram" width="1847" height="399" data-path="sample-pipelines/images/multimediapipelines_two-streams-both-720p-one-from-each-camera-with-side-by-side-stitching-sent-to-display.png" />

**Pipeline Command**

<Accordion title="Try me">
  ```bash export command theme={null}
  mkdir -p $HOME/{media,models}
  ```

  ```bash pipeline command theme={null}
  gst-launch-1.0 -e -v \
    qtivcomposer name=mixer \
      sink_0::position="<0,0>" sink_0::dimensions="<1280,720>" \
      sink_1::position="<1280,0>" sink_1::dimensions="<1280,720>" \
    mixer. ! queue ! tee name=t_split \
      t_split. ! queue ! v4l2h264enc capture-io-mode=4 output-io-mode=4 \
        ! queue ! h264parse ! mp4mux ! filesink location=$HOME/media/sidebyside.mp4 \
      t_split. ! queue ! v4l2h264enc capture-io-mode=4 output-io-mode=4 \
        ! queue ! h264parse config-interval=-1 ! rtph264pay pt=96 \
        ! udpsink host=127.0.0.1 port=8554 \
    qticamsrc name=camsrc_0 camera=0 \
      ! video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 \
      ! queue ! mixer.sink_0 \
    qticamsrc name=camsrc_1 camera=1 \
      ! video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 \
      ! queue ! mixer.sink_1
  ```
</Accordion>

***

### 3.3 Two streams - both 720p - one from each camera with Picture in Picture composition and sent to display

**Description**
Composes two streams (Picture-in-Picture) using [`qtivcomposer`](../plugin-reference/qtivcomposer). The result is recorded and streamed via RTSP.

**Pipeline Diagram**

<img src="https://mintcdn.com/qimsdk/LUzi1SsU-yLionE6/sample-pipelines/images/multimediapipelines_two-streams-both-720p-one-from-each-camera-with-picture-in-picture-composition-and-sent-to-display.png?fit=max&auto=format&n=LUzi1SsU-yLionE6&q=85&s=4f51353a7ef7d3fcd47e76a3e67a4621" alt="Pipeline Diagram" width="1851" height="408" data-path="sample-pipelines/images/multimediapipelines_two-streams-both-720p-one-from-each-camera-with-picture-in-picture-composition-and-sent-to-display.png" />

**Pipeline Command**

<Accordion title="Try me">
  ```bash export command theme={null}
  mkdir -p $HOME/{media,models}
  ```

  ```bash pipeline command theme={null}
  gst-launch-1.0 -e -v \
    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 ! v4l2h264enc capture-io-mode=4 output-io-mode=4 \
        ! queue ! h264parse ! mp4mux ! filesink location=$HOME/media/pip.mp4 \
      t_split. ! queue ! v4l2h264enc capture-io-mode=4 output-io-mode=4 \
        ! queue ! h264parse config-interval=-1 ! rtph264pay pt=96 \
        ! udpsink host=127.0.0.1 port=8554 \
    qticamsrc name=camsrc_0 camera=0 \
      ! video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 \
      ! queue ! mixer.sink_0 \
    qticamsrc name=camsrc_1 camera=1 \
      ! video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 \
      ! queue ! mixer.sink_1

  ```

  <Accordion title="Plugins used in Pipeline">
    | Plugin                                           | Description                                                    |
    | ------------------------------------------------ | -------------------------------------------------------------- |
    | [qticamsrc](../plugin-reference/qticamsrc)       | ISP camera source plugin; one instance per camera sensor.      |
    | [qtivcomposer](../plugin-reference/qtivcomposer) | Hardware video compositor composing Picture-in-Picture layout. |
    | [v4l2h264enc](../plugin-reference/v4l2h264enc)   | Hardware-accelerated H.264 video encoder.                      |
    | h264parse                                        | Parses H.264 bitstream and adds framing metadata.              |
    | mp4mux                                           | Muxes encoded streams into an MP4 container.                   |
    | filesink                                         | Writes pipeline data to a file on the filesystem.              |
    | rtph264pay                                       | Payloads H.264 video into RTP packets.                         |
    | udpsink                                          | Sends RTP packets over UDP for RTSP streaming.                 |
  </Accordion>
</Accordion>

***

## 4. Transform and Transcode use-cases

### 4.1 Rotate, Flip, and Scale

**Description**
Demonstrates hardware-accelerated transformations (Rotation, Flip, Downscale) using [`qtivtransform`](../plugin-reference/qtivtransform).

**Pipeline Diagram**

<img src="https://mintcdn.com/qimsdk/LUzi1SsU-yLionE6/sample-pipelines/images/multimediapipelines_rotate-flip-and-scale.png?fit=max&auto=format&n=LUzi1SsU-yLionE6&q=85&s=49f8d0b6ebce2fe515297db03874fc5d" alt="Pipeline Diagram" width="1132" height="239" data-path="sample-pipelines/images/multimediapipelines_rotate-flip-and-scale.png" />

**Pipeline Command**

<Accordion title="Try me">
  <CodeGroup>
    ```bash Rotate 180° theme={null}
    gst-launch-1.0 \
      qticamsrc ! video/x-raw,format=NV12,width=1920,height=1080 ! \
      qtivtransform rotate=180 ! \
      waylandsink fullscreen=true
    ```

    ```bash Downscale 4K to 1080p + Flip theme={null}
    gst-launch-1.0 \
      qticamsrc ! video/x-raw,format=NV12,width=3840,height=2160 ! \
      qtivtransform flip-horizontal=true ! \
      video/x-raw,width=1920,height=1080 ! \
      waylandsink fullscreen=true
    ```
  </CodeGroup>

  <Accordion title="Plugins used in Pipeline">
    | Plugin                                             | Description                                                             |
    | -------------------------------------------------- | ----------------------------------------------------------------------- |
    | [qticamsrc](../plugin-reference/qticamsrc)         | ISP camera source plugin for capturing raw video frames.                |
    | [qtivtransform](../plugin-reference/qtivtransform) | Hardware-accelerated video transformation: rotation, flip, and scaling. |
    | [waylandsink](../plugin-reference/waylandsink)     | Renders video frames to a Wayland display surface.                      |
  </Accordion>
</Accordion>

## 5. Video Playback use cases

***

### 5.1 Single stream video playback

**Description**
The pipeline demonstrates playback of Video stream from a file of media container format like mp4.

**Pipeline Diagram**

<img src="https://mintcdn.com/qimsdk/LUzi1SsU-yLionE6/sample-pipelines/images/multimediapipelines_single-stream-video-playback.png?fit=max&auto=format&n=LUzi1SsU-yLionE6&q=85&s=fe912116da7efdbce639d7116312289f" alt="Pipeline Diagram" width="1751" height="210" data-path="sample-pipelines/images/multimediapipelines_single-stream-video-playback.png" />

**Pipeline Command**

<Accordion title="Try me">
  ```bash export command theme={null}
  mkdir -p $HOME/{media,models}
  ```

  ```bash pipeline command theme={null}
  # Run in separate consoles or combine with &
  gst-launch-1.0 -e -v \
    filesrc location=$HOME/media/video.mp4 ! \
    qtdemux ! queue ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! waylandsink
  ```

  <Accordion title="Plugins used in Pipeline">
    | Plugin                                         | Description                                                         |
    | ---------------------------------------------- | ------------------------------------------------------------------- |
    | filesrc                                        | Reads a media file from the local filesystem.                       |
    | qtdemux                                        | Demultiplexes MP4/QuickTime container into audio and video streams. |
    | h264parse                                      | Parses H.264 bitstream and adds framing metadata.                   |
    | [v4l2h264dec](../plugin-reference/v4l2h264dec) | Hardware-accelerated H.264 video decoder.                           |
    | [waylandsink](../plugin-reference/waylandsink) | Renders video frames to a Wayland display surface.                  |
  </Accordion>
</Accordion>

***

### 5.2 Two 1080p streams video playback simultaneously

**Description**
Plays two 1080p video files simultaneously to the screen.

**Pipeline Diagram**

<img src="https://mintcdn.com/qimsdk/LUzi1SsU-yLionE6/sample-pipelines/images/multimediapipelines_two-1080p-streams-video-playback-simultaneously.png?fit=max&auto=format&n=LUzi1SsU-yLionE6&q=85&s=8762e72ad4bdf31cc7ef511b682f4327" alt="Pipeline Diagram" width="1788" height="577" data-path="sample-pipelines/images/multimediapipelines_two-1080p-streams-video-playback-simultaneously.png" />

**Pipeline Command**

<Accordion title="Try me">
  ```bash export command theme={null}
  mkdir -p $HOME/{media,models}
  ```

  ```bash pipeline command theme={null}
  # Run in separate consoles or combine with &
  gst-launch-1.0 -e -v \
    filesrc location=$HOME/media/video.mp4 ! \
    qtdemux ! queue ! h264parse ! \
    v4l2h264dec capture-io-mode=4 output-io-mode=4 ! \
    video/x-raw,format=NV12 ! queue ! waylandsink &

  gst-launch-1.0 -e -v \
    filesrc location=$HOME/media/video.mp4 ! \
    qtdemux ! queue ! h264parse ! \
    v4l2h264dec capture-io-mode=4 output-io-mode=4 ! \
    video/x-raw,format=NV12 ! queue ! waylandsink
  ``
  ```

  <Accordion title="Plugins used in Pipeline">
    | Plugin                                         | Description                                                         |
    | ---------------------------------------------- | ------------------------------------------------------------------- |
    | filesrc                                        | Reads a media file from the local filesystem.                       |
    | qtdemux                                        | Demultiplexes MP4/QuickTime container into audio and video streams. |
    | h264parse                                      | Parses H.264 bitstream and adds framing metadata.                   |
    | [v4l2h264dec](../plugin-reference/v4l2h264dec) | Hardware-accelerated H.264 video decoder.                           |
    | [waylandsink](../plugin-reference/waylandsink) | Renders video frames to a Wayland display surface.                  |
  </Accordion>
</Accordion>

***

### 5.3 8-Stream Grid Playback

**Description**
Decodes 8 1080p video files simultaneously and composes them into a 4x2 grid on the display.

**Pipeline Diagram**

<img src="https://mintcdn.com/qimsdk/LUzi1SsU-yLionE6/sample-pipelines/images/multimediapipelines_8-stream-grid-playback.png?fit=max&auto=format&n=LUzi1SsU-yLionE6&q=85&s=7c0f467423ee4785ae39a49bd71d229f" alt="Pipeline Diagram" width="1017" height="739" data-path="sample-pipelines/images/multimediapipelines_8-stream-grid-playback.png" />

**Pipeline Command**

<Accordion title="Try me">
  ```bash export command theme={null}
  mkdir -p $HOME/{media,models}
  ```

  ```bash pipeline command theme={null}
  gst-launch-1.0 -e --gst-debug=3 \
    qtivcomposer name=comp \
      sink_0::position="<0, 0>" sink_0::dimensions="<480, 540>" \
      sink_1::position="<480, 0>" sink_1::dimensions="<480, 540>" \
      sink_2::position="<960, 0>" sink_2::dimensions="<480, 540>" \
      sink_3::position="<1440, 0>" sink_3::dimensions="<480, 540>" \
      sink_4::position="<0, 540>" sink_4::dimensions="<480, 540>" \
      sink_5::position="<480, 540>" sink_5::dimensions="<480, 540>" \
      sink_6::position="<960, 540>" sink_6::dimensions="<480, 540>" \
      sink_7::position="<1440, 540>" sink_7::dimensions="<480, 540>" ! \
    queue ! waylandsink fullscreen=true \
    filesrc location=$HOME/media/video.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! comp.sink_0 \
    filesrc location=$HOME/media/video.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! comp.sink_1 \
    filesrc location=$HOME/media/video.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! comp.sink_2 \
    filesrc location=$HOME/media/video.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! comp.sink_3 \
    filesrc location=$HOME/media/video.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! comp.sink_4 \
    filesrc location=$HOME/media/video.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! comp.sink_5 \
    filesrc location=$HOME/media/video.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! comp.sink_6 \
    filesrc location=$HOME/media/video.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! comp.sink_7 
  ```

  <Accordion title="Plugins used in Pipeline">
    | Plugin                                           | Description                                                         |
    | ------------------------------------------------ | ------------------------------------------------------------------- |
    | filesrc                                          | Reads a media file from the local filesystem.                       |
    | qtdemux                                          | Demultiplexes MP4/QuickTime container into audio and video streams. |
    | h264parse                                        | Parses H.264 bitstream and adds framing metadata.                   |
    | [v4l2h264dec](../plugin-reference/v4l2h264dec)   | Hardware-accelerated H.264 video decoder.                           |
    | [qtivcomposer](../plugin-reference/qtivcomposer) | Hardware video compositor arranging decoded streams in a 4×2 grid.  |
    | [waylandsink](../plugin-reference/waylandsink)   | Renders composed video frames to a Wayland display surface.         |
  </Accordion>
</Accordion>

### 5.4 16-Stream Grid Playback

**Description**
Decodes 16 1080p video files simultaneously and composes them into a 4x4 grid on the display.

**Pipeline Diagram**

<img src="https://mintcdn.com/qimsdk/LUzi1SsU-yLionE6/sample-pipelines/images/multimediapipelines_16-stream-grid-playback.png?fit=max&auto=format&n=LUzi1SsU-yLionE6&q=85&s=95a875f525a769d427a3783a7e452bd6" alt="Pipeline Diagram" width="1367" height="1938" data-path="sample-pipelines/images/multimediapipelines_16-stream-grid-playback.png" />

**Pipeline Command**

<Accordion title="Try me">
  ```bash export command theme={null}
  mkdir -p $HOME/{media,models}
  ```

  ```bash pipeline command theme={null}
  gst-launch-1.0 -e --gst-debug=3 \
    qtivcomposer name=comp \
      sink_0::position="<0, 0>" sink_0::dimensions="<480, 270>" \
      sink_1::position="<480, 0>" sink_1::dimensions="<480, 270>" \
      sink_2::position="<960, 0>" sink_2::dimensions="<480, 270>" \
      sink_3::position="<1440, 0>" sink_3::dimensions="<480, 270>" \
      sink_4::position="<0, 270>" sink_4::dimensions="<480, 270>" \
      sink_5::position="<480, 270>" sink_5::dimensions="<480, 270>" \
      sink_6::position="<960, 270>" sink_6::dimensions="<480, 270>" \
      sink_7::position="<1440, 270>" sink_7::dimensions="<480, 270>" \
      sink_8::position="<0, 540>" sink_8::dimensions="<480, 270>" \
      sink_9::position="<480, 540>" sink_9::dimensions="<480, 270>" \
      sink_10::position="<960, 540>" sink_10::dimensions="<480, 270>" \
      sink_11::position="<1440, 540>" sink_11::dimensions="<480, 270>" \
      sink_12::position="<0, 810>" sink_12::dimensions="<480, 270>" \
      sink_13::position="<480, 810>" sink_13::dimensions="<480, 270>" \
      sink_14::position="<960, 810>" sink_14::dimensions="<480, 270>" \
      sink_15::position="<1440, 810>" sink_15::dimensions="<480, 270>" ! \
    queue ! waylandsink fullscreen=true \
    filesrc location=$HOME/media/video.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! comp.sink_0 \
    filesrc location=$HOME/media/video.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! comp.sink_1 \
    filesrc location=$HOME/media/video.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! comp.sink_2 \
    filesrc location=$HOME/media/video.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! comp.sink_3 \
    filesrc location=$HOME/media/video.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! comp.sink_4 \
    filesrc location=$HOME/media/video.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! comp.sink_5 \
    filesrc location=$HOME/media/video.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! comp.sink_6 \
    filesrc location=$HOME/media/video.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! comp.sink_7 \
    filesrc location=$HOME/media/video.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! comp.sink_8 \
    filesrc location=$HOME/media/video.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! comp.sink_9 \
    filesrc location=$HOME/media/video.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! comp.sink_10 \
    filesrc location=$HOME/media/video.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! comp.sink_11 \
    filesrc location=$HOME/media/video.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! comp.sink_12 \
    filesrc location=$HOME/media/video.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! comp.sink_13 \
    filesrc location=$HOME/media/video.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! comp.sink_14 \
    filesrc location=$HOME/media/video.mp4 ! qtdemux ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! comp.sink_15
  ```

  <Accordion title="Plugins used in Pipeline">
    | Plugin                                           | Description                                                         |
    | ------------------------------------------------ | ------------------------------------------------------------------- |
    | filesrc                                          | Reads a media file from the local filesystem.                       |
    | qtdemux                                          | Demultiplexes MP4/QuickTime container into audio and video streams. |
    | h264parse                                        | Parses H.264 bitstream and adds framing metadata.                   |
    | [v4l2h264dec](../plugin-reference/v4l2h264dec)   | Hardware-accelerated H.264 video decoder.                           |
    | [qtivcomposer](../plugin-reference/qtivcomposer) | Hardware video compositor arranging decoded streams in a 4×4 grid.  |
    | [waylandsink](../plugin-reference/waylandsink)   | Renders composed video frames to a Wayland display surface.         |
  </Accordion>
</Accordion>

<Note>
  16 hardware decode is supported only on IQ‑9075.
</Note>

## 6. Audio use cases

***

<Note>
  **Prerequisites for Audio Use Cases:**

  Before running audio pipelines, ensure the correct audio source is configured:

  ```bash theme={null}
  # Check available audio sources and their node numbers
  wpctl status

  # Set the default audio source (replace <node no.> with the actual source node number)
  wpctl set-default <node no.>
  ```
</Note>

### 6.1 PCM Audio Capture

**Description**
Captures audio from the microphone via PulseAudio, converts it, encodes it to WAV, and saves it to a file.

**Pipeline Diagram**

<img src="https://mintcdn.com/qimsdk/LUzi1SsU-yLionE6/sample-pipelines/images/multimediapipelines_pcm-audio-capture.png?fit=max&auto=format&n=LUzi1SsU-yLionE6&q=85&s=fe2d186e7cc2eb49c3fc65691a2cb7c8" alt="Pipeline Diagram" width="1336" height="224" data-path="sample-pipelines/images/multimediapipelines_pcm-audio-capture.png" />

**Pipeline Command**

<Accordion title="Try me">
  ```bash export command theme={null}
  mkdir -p $HOME/{media,models}
  ```

  ```bash pipeline command theme={null}
  gst-launch-1.0 -v pulsesrc volume=10 ! audioconvert ! wavenc ! filesink location=$HOME/media/<Audio_PCM>.wav
  ```

  <Accordion title="Plugins used in Pipeline">
    | Plugin       | Description                                                 |
    | ------------ | ----------------------------------------------------------- |
    | pulsesrc     | Captures audio from a PulseAudio input device (microphone). |
    | audioconvert | Converts audio between different formats/rates.             |
    | wavenc       | Encodes raw PCM audio into WAV format.                      |
    | filesink     | Writes pipeline data to a file on the filesystem.           |
  </Accordion>
</Accordion>

***

### 6.2 PCM Audio Playback

**Description**
A basic audio playback pipeline that reads a WAV file and routes the PCM stream to the PulseAudio sink.

**Pipeline Diagram**

<img src="https://mintcdn.com/qimsdk/LUzi1SsU-yLionE6/sample-pipelines/images/multimediapipelines_pcm-audio-playback.png?fit=max&auto=format&n=LUzi1SsU-yLionE6&q=85&s=8bec5676e1e5f2bfa5218ba7e7ff7048" alt="Pipeline Diagram" width="1243" height="205" data-path="sample-pipelines/images/multimediapipelines_pcm-audio-playback.png" />

**Pipeline Command**

<Accordion title="Try me">
  ```bash export command theme={null}
  mkdir -p $HOME/{media,models}
  ```

  ```bash pipeline command theme={null}
  gst-launch-1.0 -e filesrc location=$HOME/media/<wav_file>.wav ! wavparse ! audioconvert ! pulsesink volume=10
  ```

  <Accordion title="Plugins used in Pipeline">
    | Plugin       | Description                                               |
    | ------------ | --------------------------------------------------------- |
    | filesrc      | Reads a WAV file from the local filesystem.               |
    | wavparse     | Parses WAV container and extracts PCM audio stream.       |
    | audioconvert | Converts audio between different formats/rates.           |
    | pulsesink    | Plays audio through a PulseAudio output device (speaker). |
  </Accordion>
</Accordion>

***

### 6.3 MP3 Audio Playback (Software Decode)

**Description**
Reads an MP3 file and decodes it using `mpg123audiodec` to PulseAudio.

**Pipeline Diagram**

<img src="https://mintcdn.com/qimsdk/LUzi1SsU-yLionE6/sample-pipelines/images/multimediapipelines_mp3-audio-playback-software-decode.png?fit=max&auto=format&n=LUzi1SsU-yLionE6&q=85&s=2de0845ee580e67e0504b77ff8a961e4" alt="Pipeline Diagram" width="1485" height="198" data-path="sample-pipelines/images/multimediapipelines_mp3-audio-playback-software-decode.png" />

**Pipeline Command**

<Accordion title="Try me">
  ```bash export command theme={null}
  mkdir -p $HOME/{media,models}
  ```

  ```bash pipeline command theme={null}
  gst-launch-1.0 -e filesrc location=$HOME/media/<mp3_file>.mp3 ! mpegaudioparse ! mpg123audiodec ! pulsesink volume=10
  ```

  <Accordion title="Plugins used in Pipeline">
    | Plugin         | Description                                               |
    | -------------- | --------------------------------------------------------- |
    | filesrc        | Reads an MP3 file from the local filesystem.              |
    | mpegaudioparse | Parses MPEG audio bitstream framing.                      |
    | mpg123audiodec | Software MP3 audio decoder.                               |
    | pulsesink      | Plays audio through a PulseAudio output device (speaker). |
  </Accordion>
</Accordion>

***

### 6.4 Record 1080p Video with Audio (AVC/MP3 Capture)

**Description**
Captures 1080p video from the camera and audio from the microphone.

* **Video:** Hardware encoded (H.264).
* **Audio:** Software encoded (MP3) using `lamemp3enc`.
* **Muxing:** Muxed into an MP4 container.

**Pipeline Diagram**

<img src="https://mintcdn.com/qimsdk/LUzi1SsU-yLionE6/sample-pipelines/images/multimediapipelines_record-1080p-video-with-audio-avc-mp3-capture.png?fit=max&auto=format&n=LUzi1SsU-yLionE6&q=85&s=279e58b62dd047e16b8fd11fe099dc10" alt="Pipeline Diagram" width="1859" height="514" data-path="sample-pipelines/images/multimediapipelines_record-1080p-video-with-audio-avc-mp3-capture.png" />

**Pipeline Command**

<Accordion title="Try me">
  ```bash export command theme={null}
  mkdir -p $HOME/{media,models}
  ```

  ```bash pipeline command theme={null}
  gst-launch-1.0 -e \
  pulsesrc do-timestamp=true provide-clock=false volume=10 ! audio/x-raw,format=S16LE,channels=1,rate=48000 ! audioconvert ! queue ! lamemp3enc ! queue ! mpegaudioparse ! queue ! mp4mux name=muxer ! queue ! filesink location=$HOME/media/1080p_AVC_MP3.mp4 \
  qticamsrc ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1,interlace-mode=progressive,colorimetry=bt601 ! queue ! v4l2h264enc capture-io-mode=4 output-io-mode=5 extra-controls="controls,video_bitrate=1000000,video_gop_size=29;" ! queue ! h264parse ! muxer.
  ```

  <Accordion title="Plugins used in Pipeline">
    | Plugin                                         | Description                                                 |
    | ---------------------------------------------- | ----------------------------------------------------------- |
    | [qticamsrc](../plugin-reference/qticamsrc)     | ISP camera source plugin for capturing raw 1080p video.     |
    | [v4l2h264enc](../plugin-reference/v4l2h264enc) | Hardware-accelerated H.264 video encoder.                   |
    | h264parse                                      | Parses H.264 bitstream and adds framing metadata.           |
    | pulsesrc                                       | Captures audio from a PulseAudio input device (microphone). |
    | audioconvert                                   | Converts audio between different formats/rates.             |
    | lamemp3enc                                     | Software MP3 audio encoder.                                 |
    | aacparse                                       | Parses AAC/MP3 audio bitstream for muxing.                  |
    | mp4mux                                         | Muxes video and audio streams into an MP4 container.        |
    | filesink                                       | Writes the muxed AV file to the filesystem.                 |
  </Accordion>
</Accordion>

***

### 6.5 1080p AVC/MP3 Video Playback

**Description**
Reads an MP4 file and demuxes it into separate audio and video streams.

* **Video:** H.264 decoded via hardware and rendered to display.
* **Audio:** MP3 decoded via software (`mpg123audiodec`) and sent to speaker.

**Pipeline Diagram**

<img src="https://mintcdn.com/qimsdk/LUzi1SsU-yLionE6/sample-pipelines/images/multimediapipelines_1080p-avc-mp3-video-playback.png?fit=max&auto=format&n=LUzi1SsU-yLionE6&q=85&s=58f5dad7b53d73e1a4190515b1d5b4e2" alt="Pipeline Diagram" width="2223" height="681" data-path="sample-pipelines/images/multimediapipelines_1080p-avc-mp3-video-playback.png" />

**Pipeline Command**

<Accordion title="Try me">
  ```bash export command theme={null}
  mkdir -p $HOME/{media,models}
  ```

  ```bash pipeline command theme={null}
  gst-launch-1.0 -e filesrc location=$HOME/media/<AV_file_with_H264_video_and_MP3_audio>.mp4 ! qtdemux name=demux demux. ! queue ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! waylandsink fullscreen=true demux. ! queue ! mpegaudioparse ! mpg123audiodec ! pulsesink volume=10
  ```

  <Accordion title="Plugins used in Pipeline">
    | Plugin                                         | Description                                               |
    | ---------------------------------------------- | --------------------------------------------------------- |
    | filesrc                                        | Reads an MP4 file from the local filesystem.              |
    | qtdemux                                        | Demultiplexes MP4 container into video and audio streams. |
    | h264parse                                      | Parses H.264 video bitstream.                             |
    | [v4l2h264dec](../plugin-reference/v4l2h264dec) | Hardware-accelerated H.264 video decoder.                 |
    | [waylandsink](../plugin-reference/waylandsink) | Renders decoded video to a Wayland display surface.       |
    | mpegaudioparse                                 | Parses MPEG audio bitstream framing.                      |
    | mpg123audiodec                                 | Software MP3 audio decoder.                               |
    | pulsesink                                      | Plays decoded audio through PulseAudio speaker output.    |
  </Accordion>
</Accordion>

asdfsadfhs
