Qt Multimedia
Qt Multimedia 는 멀티미디어 콘텐츠를 처리하기 위한 다양한 QML 유형과 C++ 클래스 세트를 제공하는 애드온 모듈입니다. 여기에는 오디오 및 비디오 파일을 재생하고 화면에 렌더링하기 위한 사용하기 쉬운 API와 시스템 카메라 및 마이크, 화면 또는 창 캡처, 오디오 또는 비디오 메모리 버퍼 등 다양한 소스에서 오디오 및 비디오를 녹화하기 위한 포괄적인 API가 포함되어 있습니다.
이 모듈의 기능은 다음과 같은 하위 모듈로 나뉩니다:
Qt Multimedia | 멀티미디어 관련 사용 사례를 위한 API를 제공합니다. |
Qt Multimedia 위젯 | 위젯 기반 멀티미디어 API를 제공합니다. |
Qt Spatial Audio | 3D 공간에서 음장을 구현하기 위한 API를 제공합니다. |
시작하기
Qt 5에서 Qt 6으로 포팅하는 경우 Qt Multimedia 의 변경 사항을 참조하십시오.
Qt Multimedia 을 처음 사용하는 경우 .qml
파일에 다음 구문을 사용하여 QML 유형을 애플리케이션으로 가져올 수 있습니다.
import QtMultimedia
C++ 라이브러리에 링크하려면 프로젝트의 CMakeLists.txt
파일에 다음을 추가합니다. my_project
을 프로젝트 이름으로 대체합니다.
find_package(Qt6 REQUIRED COMPONENTS Multimedia)
target_link_libraries(my_project PRIVATE Qt6::Multimedia)
소스에서 Qt Multimedia 빌드에 대한 지침은 소스에서 Qt Multimedia 빌드하기를 참조하세요.
개요 및 중요 주제
QML 유형
다음 표는 몇 가지 중요한 QML 유형에 대해 간략하게 설명합니다.
유형 | 설명 |
---|---|
MediaPlayer | 씬에 오디오/비디오 재생 기능을 추가합니다. |
CaptureSession | 오디오/비디오 캡처를 위한 세션을 생성합니다. |
Camera | 시스템에 연결된 카메라에 액세스합니다. |
AudioInput | 시스템에 연결된 오디오 입력(마이크)에 액세스합니다. |
AudioOutput | 시스템에 연결된 오디오 출력(스피커, 헤드폰)에 액세스합니다. |
VideoOutput | 비디오 콘텐츠를 표시합니다. |
MediaRecorder | CaptureSession 에서 오디오/비디오를 녹화합니다. |
ImageCapture | 카메라에서 정지 이미지를 캡처합니다. |
Video | 장면에 비디오 재생 기능을 추가합니다. MediaPlayer 및 VideoOutput 유형을 사용하여 비디오 재생 기능을 제공합니다. |
ScreenCapture | 화면을 캡처합니다. |
WindowCapture | 최상위 창을 캡처합니다. |
C++ 클래스
다음 표는 몇 가지 중요한 C++ 클래스에 대한 개요입니다.
클래스 | 설명 |
---|---|
QMediaPlayer | 소스에서 미디어를 재생합니다. |
QVideoWidget | 미디어 플레이어 또는 캡처 세션에서 비디오를 표시합니다. |
QMediaCaptureSession | 오디오 및 비디오를 캡처합니다. |
QCamera | 시스템에 연결된 카메라에 액세스합니다. |
QAudioInput | 시스템에 연결된 오디오 입력(마이크)에 액세스합니다. |
QAudioOutput | 시스템에 연결된 오디오 출력(스피커, 헤드폰)에 액세스합니다. |
QImageCapture | 카메라로 정지 이미지를 캡처합니다. |
QMediaRecorder | 캡처 세션에서 미디어 콘텐츠를 녹화합니다. |
QVideoSink | 개별 비디오 프레임에 액세스하고 렌더링합니다. |
QAudioSink | 원시 오디오 데이터를 오디오 출력 장치로 보냅니다. |
QScreenCapture | 화면을 캡처합니다. |
QWindowCapture | 최상위 창을 캡처합니다. |
QVideoFrameInput | 메모리 버퍼에서 비디오 프레임을 표시하거나 녹화하는 데 사용됩니다. |
QAudioBufferInput | 메모리 버퍼에서 오디오 재생 또는 녹음을 지원합니다. |
오디오 및 비디오 재생의 경우 QMediaPlayer, QAudioOutput, QVideoWidget 에 필요한 모든 기능이 포함되어 있습니다. 다른 클래스는 오디오 및 동영상 콘텐츠 캡처 전용이며, QMediaCaptureSession 은 전체 캡처 및 녹화 프로세스를 관리하는 중앙 클래스 역할을 합니다.
라이선스 및 속성
Qt Multimedia 모듈은 The Qt Company의 상용 라이선스에 따라 사용할 수 있습니다. 또한 무료 소프트웨어 라이선스에 따라 사용할 수 있습니다. Qt 5.6부터 이러한 무료 소프트웨어 라이선스는 GNU 약소 일반 공중 사용 허가서, 버전 3 또는 GNU 일반 공중 사용 허가서, 버전 2입니다. 자세한 내용은 Qt 라이선스를 참조하십시오.
또한 Qt 6.8.2의 Qt Multimedia 에는 다음과 같은 허용 라이선스에 따라 타사 모듈이 포함될 수 있습니다:
GNU 약소 일반 공중 사용 허가서 v2.1 이상과 BSD 3-항 "새" 또는 "개정" 라이선스, BSD 2-항 "단순화된" 라이선스, BSD 소스 코드 저작자 표시, ISC 라이선스, MIT 라이선스, Mozilla 공중 사용 허가서 2.0 | |
부스트 소프트웨어 라이선스 1.0 | |
독립 JPEG 그룹 라이선스 | |
zlib 라이선스 |
H.264 미디어 압축 표준과 같은 동영상 압축 표준은 특허의 적용을 받을 수 있으며 로열티 비용이 발생할 수 있다는 점에 유의하세요. 이는 운영 체제 서비스로 제공되는 경우, 타사 라이브러리 또는 Qt Multimedia 의 백엔드를 통해 제공되는 경우에도 모든 구현에 적용될 수 있습니다. Qt 라이선스에는 이러한 수수료가 포함되지 않습니다.
대상 플랫폼 및 백엔드 참고 사항
Qt Multimedia 는 미디어 재생, 녹화 및 디바이스 관리를 위한 사용자 친화적인 크로스 플랫폼 API를 제공합니다. QMediaDevices , QAudioDevice, QSoundEffect, QAudioSink, QAudioSource 를 포함한 핵심 API의 구현은 기본 Qt Multimedia 라이브러리에 통합되어 있어 추가 라이브러리가 필요하지 않습니다. 다른 Qt Multimedia API는 미디어 백엔드라고 하는 플러그인 라이브러리를 사용하여 구현됩니다. FFmpeg를 기반으로 구축된 기본 미디어 백엔드는 원활한 크로스 플랫폼 기능을 보장하며 WebAssembly 및 임베디드 Linux/Boot2Qt를 제외한 모든 플랫폼에서 기본값으로 사용됩니다. Boot2Qt의 경우 기본 백엔드는 GStreamer 위에 구축되지만 QT_MEDIA_BACKEND
환경 변수를 사용하여 FFmpeg 미디어 백엔드를 활성화할 수 있습니다.
FFmpeg 백엔드
FFmpeg 미디어 백엔드는 Qt Online Installer 에 포함되어 있고 관리자가 테스트한 FFmpeg 7.1 라이브러리에 의존합니다. 온라인 인스톨러의 바이너리 패키지는 FFmpeg에 대한 동적 링크를 사용합니다. 따라서 애플리케이션은 설치 프로그램에 FFmpeg 바이너리를 번들로 제공하거나 운영 체제에 설치되어 있는 FFmpeg에 의존해야 합니다. FFmpeg 라이브러리는 Linux/X11을 제외하고 Qt 응용 프로그램 배포하기 문서에 설명된 대로 Qt의 배포 도구를 사용하여 자동으로 배포됩니다. FFmpeg 주 버전이 Qt에서 사용하는 버전과 일치하는 경우, 응용 프로그램은 공유 라이브러리 또는 정적 라이브러리로 자체 FFmpeg 빌드를 배포할 수도 있습니다.
Qt Multimedia 은 대부분의 운영 체제에서 FFmpeg 미디어 백엔드를 활용하지만, 다른 플랫폼의 애플리케이션 간에 플랫폼별 기능적 또는 시각적 차이가 발생할 수 있습니다. FFmpeg는 모든 플랫폼에서 동일한 코덱 및 포맷 지원을 제공하지 않으며, Qt Multimedia 기능의 성능은 특정 플랫폼에서만 사용할 수 있는 하드웨어 지원에 따라 달라질 수 있습니다. 예를 들어 FFmpeg는 ARM 아키텍처를 사용하는 Linux 대상에서 하드웨어 가속과 관련된 특정 문제에 직면합니다. 따라서 모든 대상 플랫폼에서 Qt Multimedia 애플리케이션을 테스트하는 것이 좋습니다.
참고: FFmpeg 프로젝트는 다양한 라이선스 하에 기능을 제공합니다. 온라인 설치 프로그램을 통해 제공되는 사전 빌드된 FFmpeg 라이브러리에는 라이선스 및 속성 아래에 나열된 허용 라이선스에 동의하는 기능만 포함되어 있습니다.
개발 및 디버깅을 용이하게 하기 위해 일부 FFmpeg 기능은 비공개 Qt Multimedia API의 일부인 환경 변수를 통해 구성할 수 있습니다.
네이티브 백엔드
기존 애플리케이션과의 호환성을 위해 각 운영 체제별로 기본 미디어 백엔드를 유지 관리합니다:
- Linux의 GStreamer
- macOS 및 iOS의 AVFoundation
- 윈도우의 윈도우 미디어 파운데이션
- Android의 MediaCodec 프레임워크
참고: FFmpeg 미디어 백엔드가 기본 백엔드이지만, 네이티브 백엔드는 여전히 사용할 수 있지만 지원이 제한되어 있습니다. GStreamer 백엔드는 Linux에서만 사용할 수 있으며 임베디드 애플리케이션에만 권장됩니다.
참고: 안드로이드의 미디어 코덱은 Qt 6.8부터 더 이상 사용되지 않으며 다음 주요 릴리스에서 제거될 예정입니다.
Qt 유지 관리자는 기본 백엔드의 중요한 문제를 해결하기 위해 노력하지만 플랫폼 간 일관되지 않은 동작을 비롯한 사소한 문제는 해결하지 못합니다. 새로운 기능은 FFmpeg 미디어 백엔드에서만 구현됩니다.
GStreamer 백엔드에는 보다 세밀한 제어를 위해 일부 비공개 API가 있습니다. 그러나 GStreamer 백엔드에는 알려진 버그가 있습니다. 자세한 내용은 GStreamer에서 확인할 수 있습니다.
백엔드 제한 사항은 문서화되며 각 클래스에서 그 상태를 유지 관리할 것입니다.
백엔드 변경하기
기본 FFmpeg 백엔드에 문제가 있는 경우 네이티브 백엔드로 테스트하는 것이 좋습니다. QT_MEDIA_BACKEND
환경 변수를 windows
, gstreamer
(Linux), darwin
(macOS 및 iOS) 또는 android
로 설정하여 네이티브 백엔드로 전환할 수 있습니다:
export QT_MEDIA_BACKEND=darwin
FFmpeg를 사용 백엔드로 강제로 할당하려면 변수를 ffmpeg
으로 설정합니다:
export QT_MEDIA_BACKEND=ffmpeg
Qt Multimedia 컴파일 단계에서 기본 미디어 백엔드는 cmake 변수 QT_DEFAULT_MEDIA_BACKEND
를 통해 구성할 수 있습니다.
타겟 플랫폼 참고 사항
다음 페이지에는 멀티미디어 백엔드와 관련이 없는 특정 대상 플랫폼에 대한 문제가 나열되어 있습니다.
권한
Qt 6.6부터 Qt Multimedia 모듈은 새로운 QPermission API를 사용하여 camera 및 microphone 권한을 처리합니다. 즉, Qt 자체에서 더 이상 이러한 권한을 쿼리하지 않으므로 클라이언트 애플리케이션에서 직접 수행해야 합니다.
새로운 QPermission API를 애플리케이션에 통합하는 방법에 대한 예제는 애플리케이션 권한 페이지를 참조하세요.
참조 및 예제
© 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.