
Qt模块中类的介绍Qt 中摄像头的使用是在Qt Multimedia模块中。Qt Multimedia是一个重要模块它提供了一组丰富的QML类型和C类来处理多媒体内容。它还提供了访问相机和无线电功能所需的API。随附的Qt音频引擎提供了用于3D位置音频播放和内容管理的类型。Qt中的多媒体支持由模块提供。Qt多媒体模块提供了丰富的功能集能够轻松利用平台的多媒体功能例如媒体播放以及相机和无线电设备的使用。window平台实现适用于Windows的Qt多媒体功能在两个插件中实现;一个使用Microsoft DirectShowAPI另一个使WMFWindows Media Foundation框架。DirectShow API在Windows 98中引入并从Windows XP开始逐渐弃用。Media Foundation 框架是在Windows Vista 中引入的作为 DirectShow 和其他多媒体 API 的替代品。因此Qt 中的 WMF 插件仅支持 Windows Vista 和更高版本的操作系统。环境变量可用于控制插件的优先级。例如将其设置为“windowsmediafoundation”或“directshow”将导致相应的插件成为首选插件。QT_MULTIMEDIA_PREFERRED_PLUGINSWindow 平台限制Qt中的WMF插件目前不提供相机后端。相反对相机功能的有限支持由 DirectShow插件提供。支持显示取景器和捕获静止图像等基本功能但是未实现大多数相机控制。目前不支持视频录制。此外DirectShow 插件不支持任何低级视频功能例如监视正在使用或相关类播放或录制的视频帧。类简介音频QAbstractAudioDeviceInfo音频后端的基类QAudioDeviceInfo用于查询音频设备及其功能的界面QAudio包含音频类使用的枚举QAudioRecorderQAudioRecorder类用于录制音频QAudioEncoderSettingsQAudioEncoderSettings类提供一组音频编码器设置。QAudioProbe允许您监控正在播放或录制的音频QAudioBuffer表示具有特定格式和采样率的音频样本的集合QAudioBuffer::StereoFrame立体声音频帧的简单包装器QAudioDecoder允许解码音频QAudioFormat存储音频流参数信息QAudioInput用于从音频输入设备接收音频数据的接口QAudioOutput用于将音频数据发送到音频输出设备的接口QAudioSystemPlugin音频插件的抽象基础QSound播放.wav声音文件的方法QSoundEffect播放低延迟音效的方式视频QAbstractPlanarVideoBuffer平面视频数据的抽象QAbstractVideoBuffer视频数据的抽象QAbstractVideoFilter表示应用于 VideoOutput 类型接收的视频帧的筛选器QAbstractVideoSurface视频演示图面的基类QVideoFilterRunnable表示拥有所有图形和计算资源的筛选器的实现并执行实际的筛选或计算QVideoFrame表示一帧视频数据QVideoProbe允许您监控正在播放或录制的视频帧QVideoSurfaceFormat指定视频演示图面的流格式相机QCameraInfo有关相机设备的一般信息QCamera系统摄像头设备接口QCamera::FrameRateRange帧速率范围表示帧速率范围包括最小和最大速率QCameraExposure曝光相关相机设置界面QCameraFocus用于对焦和变焦相关相机设置的界面QCameraFocusZone有关用于相机自动对焦的区域的信息QCameraViewfinderSettings取景器设置集QCameraImageProcessing图像处理相关相机设置接口QCameraImageCapture用于录制媒体内容QCameraViewfinderQCameraViewfinder类提供了一个相机取景器小部件。QImageEncoderSettings图像编码器设置集多媒体QMediaBindableInterface扩展媒体对象功能的对象的基类QMediaContent访问与媒体内容相关的资源QMediaObject多媒体对象的通用基础QMediaPlayer允许播放媒体源QMediaPlaylist要播放的媒体内容列表QMediaRecorder用于录制媒体内容QMediaTimeInterval表示具有整数精度的时间间隔QMediaTimeRange表示一组零个或多个不相交的时间间隔在qt中多媒体主要包括摄像头的调用视频测存储window下不支持、视频的播放拍照、麦克风的调用、音频的存储、音频的播放。摄像头的使用相机QT中摄像头的使用主要分为三个方面显示画面、抓取图片和视频录制。这三个方面对应着摄像模块的三种模式。模式如下ConstantValueDescriptionQCamera::CaptureViewfinder0相机仅配置为显示取景器。QCamera::CaptureStillImage0x01相机已配置为静态帧捕获QCamera::CaptureVideo0x02相机已配置为用于视频捕获。这三种模式都是基于QCamera对象的。在QCamera之前的操作都是一样的例如获取设备中的摄像头等。QT中摄像头的取景器模式个人理解取景器模式就是单纯的将摄像机额画面显示到界面中。这个实现很简单只需要两个步骤。1、获取系统中的摄像头设备这里使用QCameraInfo中的函数availableCameras函数此函数返回的是一个设备列表。2、使用QCamera打开摄像头并将其添加到要显示的窗口即可这里需要注意显示摄像头的窗口为QCameraViewfinder窗口可以将QWidget提升为QCameraViewfinder。代码如下QListQCameraInfo camerainfos QCameraInfo::availableCameras();//获取系统中摄像头 foreach (QCameraInfo info, camerainfos) { //通过遍历摄像头列表将器添加到下拉控件中 ui-comboBox-addItem(info.deviceName()); } ..... camera new QCamera(ui-comboBox-currentText().toUtf8());//选在摄像头设备并构造QCamera对象。 camera-setViewfinder(ui-widget); //设置摄像头的显示窗体 camera-start();//启动摄像到这里界面就可以看到摄像头中的画面了 ..... camera-stop();//停止摄像摄像头画面将会暂停但是在取景器模式中我们可以有两个设置可以进行画面的调整一个是设置显示窗口可以设置显示界面的亮度、对比度、是否全屏显示、色调、饱和度等都可以通过QCameraViewfinder的函数进行调整。另一个是设置QCamera取景器的配置包括设置最大帧率、设置最小帧率、设置像素长宽比、设置像素格式等。QCamera还可以设置曝光和聚焦通过QCameraExposure和QCameraFocus。摄像头的使用首先是肯定是显示画面但是除了显示画面我们可能还需要保存视频和从视频中获取图片。QT中在视频中抓取图片的步骤抓取图片的时候需要使用都QCameraImageCapture类1、创建QCameraImageCapture对象传入的参数为QCamera。2、设置相机模式为拍照模式 m_camera-setCaptureMode(QCamera::CaptureStillImage);3、QCameraImageCapture对象调用capture函数进行图片的保存传入参数为保存路径。代码如下QString path QFileDialog::getSaveFileName(nullptr, 保存图片, nullptr, *.jpg); if(m_imageCapture nullptr){ m_imageCapture new QCameraImageCapture(m_camera); } //设置为拍照模式 m_camera-setCaptureMode(QCamera::CaptureStillImage); //对相机锁定(异步操作) m_camera-searchAndLock(); //拍照并且把照片保存到这个路径中 m_imageCapture-capture(path); //解锁 m_camera-unlock(); //需要注意的是QCamera已经初始化配置过摄像头了在拍照模式的时候保存的图片可以设置相关参数出去QCamera设置的参数图片的参数通过QCameraImageCapture类的setEncodingSettings函数设置参数包括图像质量、分辨率、编码器、编码等。QT在window中不能进行摄像头视频的保存因此这里不多说简单的说一下保存摄像视频需要使用到的类。音频的使用对于音频我们在使用的过程中一般是录制音频、播放音频。针对这两个需求介绍Qt中音频的使用。Qt中音频的录制步骤1、获取系统中的音频设备。2、创建QAudioRecorder对象指定使用的音频设备通过QAudioRecorder的setAudioInput函数设置。3、设置音频的保存位置通过QAudioRecorder对象的setOutputLocation函数设置。4、设置保存的音频格式通过QAudioRecorder对象的setAudioSettings函数设置设置参数为QAudioEncoderSettings。5、设置保存音频的容器格式通过QAudioRecorder对象的setContainerFormat。6、以上参数设置完成之后就可以QAudioRecorder对象调用record开始录制了如果不设置相关才是会使用系统默认的参数。7、AudioRecorder对象调用stop()结束录制。8、AudioRecorder对象调用pause()暂停录制。代码如下QListQAudioDeviceInfo audioDevices QAudioDeviceInfo::availableDevices(QAudio::AudioInput);//获取音频的输入设备 foreach (QAudioDeviceInfo device, audioDevices) { ui-comboBox_sound-addItem(device.deviceName()); } ...... m_audioRecorder new QAudioRecorder(this); QString datatime QDateTime::currentDateTime().toString(yyyy-MM-dd-hh-mm-ss); m_audioName QString(%2/audio/%3).arg(savePath).arg(datatime); m_audioRecorder-setOutputLocation(QUrl::fromLocalFile(m_audioName)); m_audioRecorder-setAudioInput(audioDeviceName); QAudioEncoderSettings set; set.setCodec(audio/wav); // 这些是QAudioRecorder是设置见名思意 set.setQuality(QMultimedia::EncodingQuality::HighQuality); set.setEncodingMode(QMultimedia::ConstantQualityEncoding); m_audioRecorder-setContainerFormat(audio/wav); // 设置容器格式 m_audioRecorder-setAudioSettings(set); m_audioRecorder-record();//开始录制 ...... m_audioRecorder-pause();//暂停录制 ...... m_audioRecorder-stop();//结束录制以上可以完成最基本的音频录制但是如果想使用更高端的录制例如在录制的时候显示音频的想干信息。要想实现以上描述需要使用Qt提供的QAudioProbe类来监控音频数据。实现步骤如下1、创建QAudioProbe对象。2、QAudioProbe对象通过调用setSource函数设置监控对象传入参数为AudioRecorder对象。这里QAudioProbe对象监控的就是AudioRecorder对象对象输入的音频。3、实现QAudioProbe::audioBufferProbed信号槽函数这个信号是当在媒体服务中处理音频缓冲器时发出该。信号会传递一个QAudioBuffer 格式的音频数据。4、实现槽函数接收QAudioBuffer 类型的数据之后通过对接收到数据的计算实现频谱或者其他的显示。代码如下m_audioRecordProbe new QAudioProbe(this); m_audioRecorder new QAudioRecorder(this); //显示 m_audioRecordProbe-setSource(m_audioRecorder); // 指定声源 connect(m_audioProbe, QAudioProbe::audioBufferProbed, this,[](const QAudioBuffer buffer){ emit audioProcessBuff(buffer); });Qt中音频的播放步骤1、创建一个QMediaPlayer对象。2、创建QMediaPlaylist对象。3、通过QMediaPlaylist对象的setPlaybackMode函数创建列表的循环模式。ConstantValueDescriptionQMediaPlaylist::CurrentItemOnce0当前项目只播放一次。QMediaPlaylist::CurrentItemInLoop1当前项目在循环中重复播放QMediaPlaylist::Sequential2播放从当前开始在每个连续项目中移动直到到达最后一个项目然后停止。当前正在播放上一个项目时下一个项目为空项目。QMediaPlaylist::Loop3播放在最后一个项目播放完毕后的第一个项目处重新开始。QMediaPlaylist::Random4按随机顺序播放项目4、 QMediaPlayer对象通过函数setPlaylist设置播放列表参数为QMediaPlaylist对象。5、向播放列表中添加需要播放的音频通过QMediaPlaylist对象addMedia函数添加音频列表。6、在音频列表中选择需要播放的音频使用QMediaPlaylist对象的setCurrentIndex函数参数为音频标号。7、QMediaPlayer对象调用play函数播放音频。8、QMediaPlayer对象调用pause函数暂停播放音频。9、QMediaPlayer对象调用stop函数停止播放音频。代码如下m_mediaPlayer new QMediaPlayer(this); m_mediaPlaylist new QMediaPlaylist(this); m_mediaPlaylist-setPlaybackMode(QMediaPlaylist::CurrentItemInLoop); m_mediaPlayer-setPlaylist(m_mediaPlaylist); ...... m_mediaPlaylist-addMedia(QUrl::fromLocalFile(filePath)); ...... m_mediaPlaylist-setCurrentIndex(index); ...... m_mediaPlayer-play(); ...... m_mediaPlayer-pause(); ...... m_mediaPlayer-stop();QMediaPlayer除了播放、暂停、停止播放外还有其他设置例如设置声音大小快进、快退等。都可以通过QMediaPlayer对象的函数进行设置。也可以通过QAudioProbe对象对播放的音频进行监听实现播放音频声波的可视化。方法和录制一样。通过QSound类播放音频暂不介绍视频的播放Qt多媒体也支持视频的播放视频的播放相对来说比较简单。步骤如下1、创建一个QMediaPlayer对象。2、设置显示UI窗口。3、设置需要播放的视频路径。4、QMediaPlayer对象调用play函数播放音频。5、QMediaPlayer对象调用pause函数暂停播放音频。6、QMediaPlayer对象调用stop函数停止播放音频。代码如下m_mediapPlay new QMediaPlayer(this); m_mediapPlay-setNotifyInterval(1000); m_mediapPlay-setVideoOutput(ui-mainwidget); ...... m_mediapPlay-setMedia(QUrl::fromLocalFile(m_filePath)); m_mediapPlay-play(); m_mediapPlay-pause();音频和视频播放都使用的是QMediaPlayer对象只不过是视频多设置了一个视频输出窗口。通过QMediaPlayer类的一些信号和槽可以获取到当前播放影视频的大小播放位置播放装态等可以根据这些信息更好的实现播放功能。