비디오 개요

비디오 기능

Qt Multimedia 는 비디오 데이터 재생 및 조작을 위한 고급 및 저수준 C++ 클래스와 재생 및 녹화를 위한 QML 유형을 모두 제공합니다. 여기에 소개된 클래스 중 일부는 카메라 개요오디오 개요에 소개된 것과 겹치는 부분이 있습니다.

비디오 구현 세부 사항

C++로 비디오 재생하기

QMediaPlayer 클래스를 사용하여 비디오 파일을 디코딩하고 QVideoWidget, QGraphicsVideoItem 또는 사용자 정의 클래스를 사용하여 표시할 수 있습니다.

다음은 QVideoWidget 을 사용하는 예시입니다:

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

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

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

그리고 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();

QML에서 비디오 재생하기

VideoOutput 을 사용하여 MediaPlayer 또는 Camera 에서 제공하는 콘텐츠를 렌더링할 수 있습니다. VideoOutput 은 시각적 구성 요소로 QQuickScene 또는 Window 에 삽입할 수 있으며, 모든 미디어 디코딩 및 재생 제어는 MediaPlayer 또는 CaptureSession 에서 처리합니다. 편의를 위해 Video 요소가 제공되었습니다. MediaPlayer , VideoOutputAudioOutput 요소를 하나의 항목에 결합합니다.

로우 레벨 비디오 프레임 작업

Qt Multimedia 는 비디오 프레임을 좀 더 쉽게 처리할 수 있는 여러 저수준 클래스를 제공합니다. 이러한 클래스는 주로 비디오 또는 카메라 프레임을 처리하는 코드(예: 바코드 감지 또는 멋진 비네트 효과 적용)를 작성하거나 다른 방법으로는 지원되지 않는 특별한 방식으로 비디오를 표시해야 할 때 사용됩니다.

QVideoFrame 클래스는 비디오 프레임을 캡슐화하고 조작 또는 처리를 위해 콘텐츠를 시스템 메모리에 매핑할 수 있도록 합니다. 자체 QVideoSink 를 사용하면 QMediaPlayerQCamera 에서 이러한 프레임을 수신할 수 있습니다.

비디오 녹화

오디오 및 비디오의 모든 유형의 캡처 또는 녹화를 위한 중심 클래스는 QMediaCaptureSession (또는 CaptureSession QML 유형)입니다. QCamera (QML의 카메라) 및 QMediaRecorder (MediaRecorder)을 세션에 연결한 다음 미디어 레코더에 녹화를 시작하도록 요청할 수 있습니다.

지원되는 미디어 형식

지원되는 미디어 형식은 궁극적으로 대상 시스템의 구성에 따라 다릅니다.

Windows

기본적으로 MS Windows 대상에서 사용할 수 있는 것은 OS와 함께 패키징된 Windows Media Player의 버전에 따라 다릅니다. 공식 정보는 Windows Media Player 설명서를 참조하세요.

물론 Windows Media Player와는 별개로 설치할 수 있는 코덱 팩은 다양합니다. 몇 가지 예는 코덱 가이드 사이트를 참조하세요.

Android

자세한 내용은 Android 지원 미디어 형식을 참조하세요.

Linux

Linux에서는 올바른 GStreamer 플러그인을 설치하는 방법에 대해 설명합니다.

최소 필수 GStreamer 플러그인

  • gstreamer1.0-플러그인-베이스
  • gstreamer1.0-플러그인-좋은
  • gstreamer1.0-플러그인-풀오디오

Linux 데스크톱 대상의 경우, 좋은 코덱 적용 범위를 위해 gstreamer1.0-libav, 하드웨어 가속을 위해 gstreamer1.0-vaapi 을 사용하는 것이 좋습니다.

임베디드 Linux에서는 필요한 플러그인 세트가 다소 다를 수 있습니다.

런타임에 지원되는 미디어 형식 결정하기

정적 QMediaFormat API를 사용하여 런타임에 대상 시스템에서 사용할 수 있는 형식을 확인할 수 있습니다.

예제

C++ 및 QML 예제를 모두 사용할 수 있습니다.

C++ 예제

Camera Example

정지 이미지를 캡처하거나 동영상을 녹화하는 방법을 보여줍니다.

Media Player Example

오디오 및 비디오 재생하기.

QML 예제

Media Player

다음을 사용하여 오디오 및 비디오 재생하기 Qt Quick

QML Media Player Example

QML MediaPlayer 유형을 사용하여 오디오 및 비디오 재생하기.

QML Video Recorder

Qt Quick 을 사용하여 오디오 및 비디오 녹화하기.

참조 문서

C++ 클래스

QAbstractVideoBuffer

비디오 데이터 추상화

QAbstractVideoBuffer::MapData

매핑된 평면 레이아웃을 설명하는 QAbstractVideoBuffer::MapData 구조체입니다.

QCapturableWindow

캡처 가능한 창의 기본 정보를 가져오는 데 사용됩니다.

QMediaCaptureSession

오디오 및 비디오 콘텐츠의 캡처를 허용합니다.

QMediaPlayer

미디어 파일 재생을 허용합니다.

QMediaRecorder

캡처 세션의 인코딩 및 녹화에 사용됩니다.

QScreenCapture

이 클래스는 화면 캡처에 사용됩니다.

QVideoFrame

비디오 데이터의 프레임을 나타냅니다.

QVideoFrameFormat

비디오 프레젠테이션 표면의 스트림 형식을 지정합니다.

QVideoFrameInput

사용자 정의 비디오 프레임을 QMediaRecorder에 제공하거나 QMediaCaptureSession을 통해 비디오 출력을 제공하는 데 사용됩니다.

QVideoSink

비디오 데이터의 일반 싱크를 나타냅니다.

QVideoWidget

미디어 객체에 의해 생성된 비디오를 표시하는 위젯입니다.

QWindowCapture

이 클래스는 창을 캡처하는 데 사용됩니다.

QML 유형

CapturableWindow

WindowCapture를 통해 캡처할 수 있는 창의 기본 정보를 가져오는 데 사용되는 유형입니다.

CaptureSession

오디오 및 비디오 콘텐츠의 캡처를 허용합니다.

MediaPlayer

씬에 미디어 재생을 추가합니다.

MediaRecorder

CaptureSession에서 생성된 미디어 인코딩 및 녹화용

ScreenCapture

이 유형은 화면 캡처에 사용됩니다.

Video

지정된 비디오를 표시하기 위한 편의 유형

VideoOutput

비디오 또는 카메라 뷰파인더 렌더링

WindowCapture

이 유형은 창을 캡처하는 데 사용됩니다.

cameraDevice

카메라 장치를 설명합니다.

cameraFormat

카메라 장치에서 지원하는 비디오 형식을 설명합니다.

mediaMetaData

미디어 파일에 대한 메타데이터 제공

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.