媒体捕获器 QMediaCaptureSession
媒体捕获器 QMediaCaptureSession 是音频数据和视频数据的集散地它接收从QAudioInput 和 QCamera 传递过来的音频和视频
- 然后将音频转发给 QAudioOutput 播放音频
- 将视频转发给 QVideoWidegt 或 QGraphicsVideoltem 播放视频
- 将音频和视频转发给 QMdiaRecorder 录制音频和视频,转发给 QImageCapture 实现拍照功能。
用QMediaCaptureSession 创建实例对象的方法如下所示。
from PySide6.QtMultimedia import QMediaCaptureSession
QMediaCaptureSession(parent: Union[PySide6.QtCore.QObject,NoneType]= None)-> None
媒体捕获器QMediaCaptureSession 的常用方法
媒体捕获器QMediaCaptureSession 的常用方法如表所示
- 用setAudioInput(input;QAudioInput)方法和 setCamera(camera:QCamera)方法分别设晋音频输入和视频输入;
- 用setAudioOutput(output;QAudioOutput)方法和 setVideoOutput(output:QObject)方法分别设置音频输出设备和视频输出控件以便播放音频和视频;
- 用setRecorder(recorder: QMediaRecorder)方法设置媒体记录器,以便录制音频和视频;
- 用setImageCapture(imageCapture:QImageCapture)方法设置图像捕获器以便实现拍照功能。
QMediaCaptureSession的方法及参数类型 | 返回值的类型 | 说明 |
---|---|---|
setAudioInput(input: QAudioInput) | None | 设置音频输入 |
audioInput() | QAudioInput | 获取音频输人 |
setAudioOutput(output: QAudioOutput) | None | 设置音频输出 |
audioOutput() | QAudioOutput | 获取音频输出 |
setCamera(camera:QCamera) | None | 设置视频接口 |
camera() | QCamera | 获取视频接口 |
setImageCapture(imageCapture:QImageCapture) | None | 设置图像捕获器 |
imageCapture() | QImageCapture | 获取图像捕获器 |
setRecorder(recorder:QMediaRecorder) | None | 设置媒体记录器 |
recorder() | QMediaRecorder | 获取媒体记录器 |
setVideoOutput(output: QObject) | None | 设置视频输出 |
videoOutput() | QObject | 获取视频输出 |
setVideoSink(sink:QVideoSink) | None | 设置视频接收器 |
videoSink() | QVideoSink | 获取视频接收器 |
媒体捕获器QMediaCaptureSessio 的信号
媒体捕获器 QMediaCaptureSession 的信号如表所示
QMediaCaptureSession 的信号 | 说 明 |
---|---|
audioInputChanged() | 当音频输人发生改变时发送信号 |
audioOutputChanged() | 当音频输出发生改变时发送信号 |
cameraChanged() | 当视频输人发生改变时发送信号 |
videoOutputChanged() | 当视频输出发生改变时发送信号 |
imageCaptureChanged() | 当图像捕获器发生改变时发送信号 |
recorderChanged() | 当记录器发生改变时发送信号 |
媒体捕获器 QMediaCaptureSession 的应用实例
下面的程序用摄像头实时捕捉画面,并呈现捕捉到的画面
# -*- coding: UTF-8 -*-
# File date: Hi_2023/2/28 23:03
# File_name: demo.py
import sys
from PySide6.QtWidgets import QApplication,QWidget,QPushButton,QVBoxLayout,QHBoxLayout
from PySide6.QtMultimedia import QMediaDevices,QCamera,QMediaCaptureSession
from PySide6.QtMultimediaWidgets import QVideoWidget
class MyWindow(QWidget):
def __init__(self,parent=None):
super().__init__(parent)
self.resize(800,600)
self.setupUi()
def setupUi(self):
self.videoWidget = QVideoWidget()# 显示视频的控件
self.btn_start = QPushButton("启动摄像头")# 打开摄像头按钮
self.btn_stop = QPushButton("停止摄像头")# 停止摄像头按钮
h = QHBoxLayout()# 按钮水平布局
h.addWidget(self.btn_start)
h.addWidget(self.btn_stop)
v = QVBoxLayout(self)
v.addWidget(self.videoWidget)
v.addLayout(h)
self.mediaDevice = QMediaDevices(self)# 媒体设备
self.cameraDevice = self.mediaDevice.defaultVideoInput()# 获取默认的视频输人设备
self.camera = QCamera(self.cameraDevice)# 根据视频输人设备定义视频接口
self.mediaCaptureSession = QMediaCaptureSession(self)# 媒体捕获器
self.mediaCaptureSession.setCamera(self.camera)# 设置媒体捕获器的视频接口
self.mediaCaptureSession.setVideoOutput(self.videoWidget)# 设置捕获器的视频输出控件
self.btn_start.clicked.connect(self.camera.start)# 信号与槽连接
self.btn_stop.clicked.connect(self.camera.stop)# 信号与槽连接
if __name__ =='__main__':
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec())