Пример #1
0
class Camera(QObject):
    def __init__(self, parent = QObject()):
        super(Camera, self).__init__(parent)
        print("3")
        self.cam = QCamera(QCameraInfo.defaultCamera())   #"/dev/video0".encode()
        print("4")
        self.caminfo = QCameraInfo(self.cam)
        self.camvfind = QCameraViewfinder()
        self.camvfindset = QCameraViewfinderSettings()
        self.cammode = self.cam.CaptureMode(0)
        self.camimgcap = QCameraImageCapture(self.cam)

    def iniCamera(self):
        print(self.caminfo.description())
        print(self.caminfo.availableCameras())

        for caminfo in QCameraInfo.availableCameras():
            print(caminfo.deviceName())

        if self.cam.isCaptureModeSupported(self.cammode):
            print("Capturemode supported")

    def startVid(self):
        #self.camimgcap.CaptureDestination(2)

        self.camvfind.show()

        self.cam.setViewfinder(self.camvfind)

        self.cam.setCaptureMode(self.cammode)

        self.cam.start()
Пример #2
0
class VideoWindow(QMainWindow):
    def __init__(self, parent=None):
        super(VideoWindow, self).__init__(parent)
        self.setWindowTitle(
            "PyQt Video Player Widget Example - pythonprogramminglanguage.com")

        self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface)
        self.camera = QCamera(0)
        self.cameraviewfinder = QCameraViewfinder()
        self.cameramode = self.camera.CaptureMode(2)
        self.cameraimgcap = QCameraImageCapture(self.camera)

        videoWidget = QVideoWidget()
        self.imageView = QLabel("add a image file")
        self.imageView.setAlignment(Qt.AlignCenter)
        self.playButton = QPushButton()
        self.playButton.setEnabled(True)
        self.playButton.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay))
        self.playButton.clicked.connect(self.play)

        self.positionSlider = QSlider(Qt.Horizontal)
        self.positionSlider.setRange(0, 0)

        self.scene1 = QGraphicsScene()
        self.view1 = QGraphicsView(self.scene1)

        # Create new action

        # Create exit action

        # Create a widget for window contents
        wid = QWidget(self)
        self.setCentralWidget(wid)

        # Create layouts to place inside widget
        # controlLayout = QHBoxLayout()
        # controlLayout.setContentsMargins(0, 0, 0, 0)
        # controlLayout.addWidget(self.playButton)
        # controlLayout.addWidget(self.positionSlider)

        videolayout = QVBoxLayout()
        videolayout.addWidget(videoWidget)

        # videolayout.addLayout(controlLayout)
        # Set widget to contain window contents

        layout = QHBoxLayout()
        layout.addLayout(videolayout)
        layout.addWidget(self.cameraviewfinder)
        # layout.addWidget(self.view1)
        wid.setLayout(layout)
        self.mediaPlayer.setVideoOutput(videoWidget)
        self.cameraviewfinder.show()
        self.camera.setViewfinder(self.cameraviewfinder)

    def exitCall(self):
        sys.exit(app.exec_())

    def play(self):
        self.showFullScreen()

        fileName = 'D:\\桌面\\some.mp4'

        if fileName != '':
            self.mediaPlayer.setMedia(
                QMediaContent(QUrl.fromLocalFile(fileName)))
            self.playButton.setEnabled(True)
        self.cameraviewfinder.resize(640, 480)
        self.camera.start()
        self.mediaPlayer.play()

        camera_capture = cv2.VideoCapture(0)

        while True:
            ret, camera_frame = camera_capture.read()
            if ret:
                self.displayImage(camera_frame)
            else:
                break
        camera_capture.release()
        cv2.destroyAllWindows()

    def mediaStateChanged(self, state):
        if self.mediaPlayer.state() == QMediaPlayer.PlayingState:
            self.playButton.setIcon(self.style().standardIcon(
                QStyle.SP_MediaPause))
        else:
            self.playButton.setIcon(self.style().standardIcon(
                QStyle.SP_MediaPlay))

    def displayImage(self, img):
        self.scene1.clear()
        pixMap = QPixmap(img)
        w, h = pixMap.width(), pixMap.height()
        self.scene1.addPixmap(pixMap)
        self.view1.fitInView(QRectF(0, 0, w, h), Qt.KeepAspectRatio)
        self.scene1.update()
Пример #3
0
class VideoWindow(QMainWindow):
    def __init__(self, parent=None):
        super(VideoWindow, self).__init__(parent)

    def setupVideoUi(self):
        self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface)

        self.camera = QCamera(0)
        self.cameraviewfinder = QCameraViewfinder()
        self.cameraviewfinder.setAspectRatioMode(Qt.IgnoreAspectRatio)

        self.cameramode = self.camera.CaptureMode(2)
        self.cameraimgcap = QCameraImageCapture(self.camera)

        self.videoWidget = QVideoWidget()

        self.mediaPlayer.setVideoOutput(self.videoWidget)

        self.camera.setViewfinder(self.cameraviewfinder)

    def exitCall(self):
        sys.exit(app.exec_())

    def play(self, fileNameList):
        self.fileNameList = fileNameList
        self.play_next()

    def play_next(self):
        global play_times

        if play_times == len(self.fileNameList):
            self.timer_play.stop()
            return

        single_file = self.fileNameList[play_times]
        try:
            self.mediaPlayer.setMedia(
                QMediaContent(QUrl.fromLocalFile(single_file)))
        except Exception:
            print("配置视频播放出错")
            print(Exception)

        #播放视频
        self.mediaPlayer.play()

        # 开启倒计时,进行连续播放
        self.single_time = math.ceil(self.getDuration(single_file))

        self.timer_play = QtCore.QTimer()
        self.timer_play.timeout.connect(self.play_next)

        # 定时器以毫秒作为单位
        self.timer_play.start(self.single_time * 1000)

        play_times = play_times + 1

    def camera_start(self):
        # 开启摄像头
        # self.cameraviewfinder.resize(640, 480)
        self.camera.start()

    # 获取视频时长(单位为秒)
    def getDuration(self, fileName):
        total_times = 0

        if type(fileName) != list:
            clip = VideoFileClip(fileName)
            single_time = clip.duration
            clip.reader.close()
            clip.audio.reader.close_proc()
            return single_time

        for f in fileName:
            clip = VideoFileClip(f)
            times = clip.duration
            total_times = total_times + times
            clip.reader.close()
            clip.audio.reader.close_proc()
        return total_times

    def pause(self):
        self.mediaPlayer.pause()