- Qt 6.6
- Qt Multimedia
- Video Overview
- Qt 6.6.3 Reference Documentation

# Video Overview

## Video Features

Qt Multimedia offers both high and low level C++ classes for playing and manipulating video data, and QML types for playback and recording. Some of the classes presented here overlap with what is presented in the Camera Overview and Audio Overview.

## Video Implementation Details

### Playing Video in C++

You can use the QMediaPlayer class to decode a video file, and display it using QVideoWidget, QGraphicsVideoItem, or a custom class.

Here's an example of using QVideoWidget:

     player = new QMediaPlayer;
     player->setSource(QUrl("http://example.com/myclip1.mp4"));

     videoWidget = new QVideoWidget;
     player->setVideoOutput(videoWidget);

     videoWidget->show();
     player->play();

And an example with QGraphicsVideoItem:

     player = new QMediaPlayer(this);

     QGraphicsVideoItem *item = new QGraphicsVideoItem;
     player->setVideoOutput(item);
     graphicsView->scene()->addItem(item);
     graphicsView->show();

     player->setSource(QUrl("http://example.com/myclip4.ogv"));
     player->play();

### Playing Video in QML

You can use VideoOutput to render content that is provided by either a MediaPlayer or a Camera. The VideoOutput is a visual component that can be embedded into a QQuickScene or Window, while all media decoding and playback control is handled by the MediaPlayer or CaptureSession. A Video element has been provided for convenience. It combines MediaPlayer, VideoOutput and AudioOutput elements in one item.

### Working with Low Level Video Frames

Qt Multimedia offers a number of low level classes to make handling video frames a bit easier. These classes are primarily used when writing code that processes video or camera frames (for example, detecting barcodes, or applying a fancy vignette effect), or needs to display video in a special way that is otherwise unsupported.

The QVideoFrame class encapsulates a video frame and allows the contents to be mapped into system memory for manipulation or processing. Using your own QVideoSink allows you to receive these frames from QMediaPlayer and QCamera.

### Recording Video

The central class for any type of capturing or recording of audio and video is QMediaCaptureSession (or the CaptureSession QML type). You can connect a QCamera (Camera in QML) and a QMediaRecorder (MediaRecorder)to the session and then ask the media recorder to start recording.

## Supported Media Formats

What media formats are supported ultimately depends on the configuration of the target system.

### Windows

By default what is available on a MS Windows target depends on the version of Windows Media Player that was packaged with the OS. See the Windows Media Player documentation for official information.

Independent of Windows Media Player, there are of course numerous codec packs that could be installed. See the codec guide site for some examples.

### Android

See Android supported media formats for this information.

### Linux

On Linux this is about installing the correct GStreamer plugins.

#### Minimum Required GStreamer Plugins

- gstreamer1.0-plugins-base
- gstreamer1.0-plugins-good
- gstreamer1.0-plugins-pulseaudio

For a Linux desktop target, it is strongly recommended to have `gstreamer1.0-libav` for good codec coverage and `gstreamer1.0-vaapi` to get hardware acceleration.

On embedded Linux, the required set of plugins could be somewhat different.

### Determining Supported Media Formats at Runtime

You can determine what formats are available on a target system at runtime using the static QMediaFormat API.

- Use QMediaFormat::isSupported() on a QMediaFormat::ConversionMode to query a specific format.
- Use QMediaFormat::supportedFileFormats() on a default constructed QMediaFormat to get all the supported file formats.

## Examples

There are both C++ and QML examples available.

### C++ Examples

Camera Example | Shows how to capture a still image or record video.
Media Player Example | Playing audio and video.

### QML Examples

Media Player Example | Playing audio and video using Qt Quick
QML Media Player Example | Playing audio and video using Qt Quick.
QML Video Recorder | Recording audio and video using Qt Quick.

## Reference Documentation

### C++ Classes

QCapturableWindow | Used for getting the basic information of a capturable window
QMediaCaptureSession | Allows capturing of audio and video content
QMediaPlayer | Allows the playing of a media files
QMediaRecorder | Used for encoding and recording a capture session
QScreenCapture | This class is used for capturing a screen
QVideoFrame | Represents a frame of video data
QVideoFrameFormat | Specifies the stream format of a video presentation surface
QVideoSink | Represents a generic sink for video data
QVideoWidget | Widget which presents video produced by a media object
QWindowCapture | This class is used for capturing a window

### QML Types

CapturableWindow | Type is used getting basic of a window that is available for capturing via WindowCapture
CaptureSession | Allows capturing of audio and video content
MediaPlayer | Adds media playback to a scene
MediaRecorder | For encoding and recording media generated in a CaptureSession
ScreenCapture | This type is used for capturing a screen
Video | A convenience type for showing a specified video
VideoOutput | Render video or camera viewfinder
WindowCapture | This type is used for capturing a window
cameraDevice | Describes a camera device
cameraFormat | Describes a video format supported by a camera device
mediaMetaData | Provides meta-data for media files