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.

Examples

There are both C++ and QML examples available.

C++ Examples

Camera Example

Shows how to capture a still image or record video. or video.

Media Player Example

Playing audio and video.

QML Examples

QML Media Player Example

Playing audio and video using Qt Quick.

QML Recorder Example

Recording audio and video using Qt Quick.

Reference Documentation

C++ Classes

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

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

QML Types

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

Video

A convenience type for showing a specified video

VideoOutput

Render video or camera viewfinder

cameraDevice

Describes a camera device

cameraFormat

Describes a video format supported by a camera device

mediaMetaData

Provides meta-data for media files