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()
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()
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()