소연의_개발일지

 

 

 

 

QtMultimedia는 멀티미디어 콘텐츠들을 재생시키기 위한 필수적인 도구이다. 

pyqt가 깔려있지 않으면 이 부분을 임포트 해 와야 한다.

import QtMultimedia 5.15

 

만약 c++ 사용자라면 아래와 같은 코드를 헤더에 추가해줘야 한다.

#include <QtMultimedia>
#include <QtMultimediaWidgets>

 

파이큐티 사용자라면 멀티미디어를 임포트 해 준다.

import QtMultimedia

 

 

 

소스코드

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtMultimedia import *
from PyQt5.QtMultimediaWidgets import *
import time

class VideoPlayer(QWidget):
    def __init__(self, parent=None):
        super(VideoPlayer, self).__init__(parent)
        self.setWindowFlag(Qt.FramelessWindowHint)
        self.showFullScreen()
        videoItem = QGraphicsVideoItem()
        # videoItem.setWindowFlag(Qt.FramelessWindowHint)
        videoItem.setSize(QSizeF(self.width(), self.height()))
        scene = QGraphicsScene(self)
        scene.addItem(videoItem)
        graphicsView = QGraphicsView(scene)
        layout = QVBoxLayout()
        layout.addWidget(graphicsView)
        self.setLayout(layout)
        self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface)
        self.mediaPlayer.setVideoOutput(videoItem)

        # stateChanged 시그널 연결
        self.mediaPlayer.stateChanged.connect(self.handleStateChanged)

    def keyPressEvent(self, e):
        """단축키"""
        print('state: ' + str(self.mediaPlayer.state()))
        print('mediaStatus: ' + str(self.mediaPlayer.mediaStatus()))
        print('error: ' + str(self.mediaPlayer.error()))
        if e.key() == Qt.Key_L: # L키는 로드
            print('loading')
            self.load()
        if e.key() == Qt.Key_P: # P키는 플레잉
            print('playing')
            self.mediaPlayer.play()
        if e.key() == Qt.Key_Q: # Q키 누르면 종료
            self.close()
        else:
            return

    def load(self):
        """wmv 파일 로드하기"""
        local = QUrl.fromLocalFile('./boki_prologue.wmv')
        media = QMediaContent(local)
        self.mediaPlayer.setMedia(media)

    def handleStateChanged(self, state):
        """비디오가 종료되면 화면도 꺼지게 하는 함수"""
        if state == QMediaPlayer.StoppedState:
            self.close()


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    player = VideoPlayer()
    player.show()
    sys.exit(app.exec_())

 

L을 누르면 영상 로드, 

P를 누르면 영상 실행,

Q를 누르면 영상이 종료된다. 

비디오가 종료되면 화면도 종료되게 만들었다.

 

 


 

참고링크1: https://doc.qt.io/qt-5/qtmultimedia-index.html

 

Qt Multimedia 5.15.13

 

doc.qt.io

참고링크2: https://stackoverflow.com/questions/42801979/error-using-qmediaplayer-with-pyqt5-on-windows

 

Error using QMediaPlayer with PyQt5 on WIndows

Attatched below is test script that I was using in order to play sample video for PyQt5. Unfortunately, soon after loading the video, the mediaPlayer mediaStatus switches to code 8 (InvalidMedia) ...

stackoverflow.com

 

profile

소연의_개발일지

@ssoyxon

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!