Qt에서 동영상을 처리하기 위해서는 QMovie를 이용하여 애니메이션 gif를 통해 처리를 하거나, Phonon::VideoPlayer을 이용하여야 합니다.

Phonon::VideoPlayer의 경우 동영상을 처리하기 위해서 linux에서는 gstreamer, windows에서는 DirectShow, Mac OS X에서는 QuickTime을 이용하는데,

이러한 의존성 때문에 배포등에 문제가 발생되는 경우가 있습니다.

이러한 Phonon의 단점을 극복하기 위해서 QtAV라는 오픈소스 Qt 동영상 라이브러리가 있습니다.

 

QtAV는 FFmpeg을 이용해서 비디오를 디코딩하고, PortAudio를 이용해서 이미지, 오디오등을 재생합니다.

따라서 QtAV를 사용하기 위해서는 FFmpeg, Port Audio 라이브러리가 필요하고, 여기에 추가적으로 Ligav가 추가적으로 필요합니다.

 

QtAV 빌드

QtAV를 빌드하기 위해서는 FFmpeg, PortAudio, Libav등이 미리 설치되어 있어야 합니다.

ubuntu의 경우 간단히 apt-get으로 설치를 하며 되고, 윈도우의 경우 https://github.com/wang-bin/QtAV/wiki/Compile-FFmpeg-and-PortAudio URL을 참고해서 빌드를 하면 됩니다.

추가 라이브러리가 정상적으로 잘 설치되었다면 다음과 같이 화경변수를 등록해 놓고, QtAV를 빌드할 수 있습니다.

 

windows

[code]
set INCLUDE=ffmpeg_path\include;portaudio_path\include;%INCLUDE%
set LIB=ffmpeg_path\lib;portaudio_path\lib;%LIB%
[/code]

linux

[code]
export LD_LIBRARY_PATH=ffmpeg_path/lib:portaudio_path/lib:$LD_LIBRARY_PATH
[/code]

Qt Creator에서 작업을 한다면, 위의 설정을 다음과 같은 프로젝트 설정화면의 Build Environment에 등록을 해 주시면 됩니다.

모든 설정이 완료되었다면 QtAV소스를 열어 다음과 같이 간단하게 build를 해주시면 됩니다.

[code]
$ qmake
$ make
[/code]

 

QtAV사용

QtAV를 내 프로젝트에서 사용하기 위해서는 QtAV 1.3.4이상에서는 다음과 같이 프로젝트에 추가를 해 줍니다.

[code]
CONFIG += av
[/code]

Qt5에서는

[code]
QT += av
[/code]

만약 QtAV 1.3.4보다 아래 버전이라면, 다음의 myproject 예제와 같이 추가를 해 줍니다.

myproject/myproject.pro

[code]
TEMPLATE = subdirs
SUBDIRS +=  libQtAV  myplayer
myplayer.depends += libQtAV
libQtAV.file = QtAV/QtAV.pro
include(QtAV/root.pri)
[/code]

위와같이 project 파일에서 QtAV라이브러리에 대한 설정을 모두 마쳤다면, 코드사용은 다음과 같이 아주 쉽게 처리가 됩니다.

c++

[code language="c"]
WidgetRenderer renderer;
renderer.show();
AVPlayer player;
player.setRenderer(&renderer);
player.play("test.avi");
[/code]

QML

[code]
import QtQuick 2.0
import QtAV 1.3
Rectangle {
    width: 640
    height: 360
    color: "black"
    VideoOut {
        id: vo
        anchors.fill: parent
    }
    AVPlayer {
        id: player
        videoOut: vo
    }
    MouseArea {
        anchors.fill: parent
        onClicked: {
            player.source = "test.mp4"
            player.play()
        }
    }
}
[/code]

 

QtAV를 이용한 예제

 

QtAV on Mac OS X