第十四章 相机和音频录制——Qt

一、使用相机

1.相机QCamera

使用QCameraInfo来查询系统当前可用的相机设备,一般使用其静态函数defaultCamera()来获取默认的相机设备信息,或者使用静态函数availableCameras()来获取所有可用相机列表。
使用orientation()可以获取相机的旋转角度。
QCamera类为系统相机设备提供了相应的接口,可以使用start()和stop()来开启和关闭相机。
相机拥有8种不同的状态:( 每当状态改变时都会发射statusChanged()信号 )

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————
常量						|描述
————————————————————————————|—————————————————————————————————————————————————————————————————————————————————————
QCamera::ActiveStatus		|相机已经启动,并可以产生数据
————————————————————————————|—————————————————————————————————————————————————————————————————————————————————————
QCamera::StartingStatus		|相机正在启动,现在还无法进行图像捕获
————————————————————————————|—————————————————————————————————————————————————————————————————————————————————————
QCamera::StoppingStatus		|相机正在停止
————————————————————————————|—————————————————————————————————————————————————————————————————————————————————————
QCamera::StandbyStatus		|相机处于省电待机状态。当相机处于加载完毕状态且一段时间内没有活动时,就会进入待机状态
————————————————————————————|—————————————————————————————————————————————————————————————————————————————————————
QCamera::LoadedStatus		|相机加载完成,可以进行设置
————————————————————————————|—————————————————————————————————————————————————————————————————————————————————————
QCamera::LoadingStatus		|相机正在加载
————————————————————————————|—————————————————————————————————————————————————————————————————————————————————————
QCamera::UnloadingStatus	|相加正在被卸载
————————————————————————————|—————————————————————————————————————————————————————————————————————————————————————
QCamera::UnloadedStatus		|相机的初始状态,没有被加载
————————————————————————————|—————————————————————————————————————————————————————————————————————————————————————
QCamera::UnavailableStatus	|相加或者相机后端不可用
		——————————————————————————————————————————————————————————————————————————————————————————————————————————————————

其他说明:
相机还支持曝光锁定、白平衡锁定和对焦锁定,由QCamera::LockType枚举类型定义,三者对应的值分别是QCamera::LockExposure、QCamera::LockWhiteBalance和QCamera::LockFocus,默认值是QCamera::NoLock即不进行锁定。
setViewfinder()来设置取景器部件,相机的取景器有两种选择:

  • 在普通部件中使用时可以使用QCameraViewfinder类,它继承自QVideoWidget。
  • 在图形视图框架中使用时,可以使用QGraphhicsVideoItem类。

setCaptureMode()设置相机的捕获模式,通过QCamera::CaptureModes枚举类型定义了三种捕获模式:

  • 默认的是QCamera::CaptureViewfinder模式,捕获的图像只显示在取景器上;
  • QCamera::CaptureStillImage模式会进行静态帧捕获,也就是进行拍照;
  • QCamera::CaptureVideo模式进行视频捕获,也就是录像。
2.使用相机进行拍照

QCameraImageCapture是一个图像录制类,与QCamera配合可以进行拍照。
使用capture()可以捕获图片并保存到文件,这个操作一般是异步的:

  • 如果没有指定文件路径,那么会使用系统上的默认位置和图片命名方式来保存图片;
  • 如果没有使用完整的绝对路径,那么会将图片保存到默认目录。
3.使用相机进行视频录制

QMediaRecorder类用来记录媒体内容,可以和QCamera一起使用进行视频录制。
录制设置过程:

  • 通过isAvailable()先判断录制功能是否可用,如果可用,可以使用QCamera对象来创建QMediaRecorder对象,
  • 然后使用setOutputLocation()来设置文件保存路径,
  • 最后调用record()进行录制,可以使用pause()、stop()暂停和停止录制,

还可以使用setAudioSettings()、setVideoSettings()设置音频和视频编码设置。

例如:
recorder = new QMediaRecorder(camera);
QAudioEncoderSettings audioSettings;
audioSettings.setCodec("audio/amr");
audioSettings.setQuality(QMultimedia::HighQuality);
recorder->setAudioSettings(audioSettings);
recorder->setOutputLocation(QUrl::fromLocalFile(fileName));
recorder->record();
4.对相机进行设置( 了解,windows系统对此大都不支持 )

通过各自的isAvailable()函数来判断是否支持下面的设置:
①曝光设置
通过QCamera::exposure()可以返回相机的曝光控制对象,即QCameraExposure类对象,QCameraExposure类提供了与报关相关的相机设置接口。
函数说明略。
②对焦设置
通过QCamera::focus()可以返回相机的对焦控制对象,即QCameraFocus类对象,QCameraFocus类提供了与对焦和变焦相关的相机设置接口。
函数说明略。
③图像处理
通过QCamera::imageProcessing()可以返回相机图像处理控制对象,即QCameraImageProcessing类对象,QCameraImageProcessing类提供了与图像处理相关的相机设置接口。
函数说明略。

二、录制音频

QAudioRecorder类用来录制音频,它继承自QMediaRecorder。

1.录制麦克风

首先可以使用QAudioRecorder类的audioInputs()来获取所有可用的音频输入设备名称,然后使用setAudioInput()设置需要使用的设备,通过setEncodingSettings()进行音频编码设置,还需要使用setOutputLocation()设置录制的音频文件的保存路径,最后调用record()进行录制。
另外,如果要自定义音频设置,则可以使用setAudioSettings()来设置一个QAudioEncoderSettings类对象。
QAudioEncoderSettings类音频编码设置:

——————————————————————————————————————————————————————————————————————————————————————————————————
参数		|描述										|相关函数 
————————————|———————————————————————————————————————————|—————————————————————————————————————————
比特率		|压缩后音频流的每秒比特数					    | bitRate()、setBitRate()
————————————|———————————————————————————————————————————|—————————————————————————————————————————
声道数		|音频声道数量								|channelCount()、setChannelCount()
————————————|———————————————————————————————————————————|—————————————————————————————————————————
编码器		|编码器,例如,audio/pcm					    |	codec()、setCodec()
————————————|———————————————————————————————————————————|—————————————————————————————————————————
编码方式	    |由QMultimedia::EncodingMode枚举类型指定,	|encodingMode()、setEncodingMode()
			|如QMultimedia::ConstantQualityEncoding     |
			|  调整比特率来保证质量;                    |
			|QMultimedia::ConstantBitRateEncoding       |
			|  调整质量来保证比特率                      |
			|QMultimedia::AverageBitRateEncoding        |
			|  保证较平均的比特率设置                    |
			|QMultimedia::TwoPassEncoding               |
			|  先判断媒体特征,在需要的部分分配           |
			|  更多比特                                 |
————————————|———————————————————————————————————————————|—————————————————————————————————————————
编码选项	    | 系统和使用的编码器会指定一些编码选项		|encodingOptions()、setEncodingOption()
————————————|———————————————————————————————————————————|—————————————————————————————————————————
编码质量	    |  由QMultimedia::EncodingQuality枚举类型	|quality()、setQuality()
			|  指定,如QMultimedia::VeryLowQuality      |
			|		  QMultimedia::LowQuality           |
			|		  QMultimedia::NormalQuality        |
			|		  QMultimedia::HighQuality          |
			|		  QMultimedia::VeryHighQuality      |
————————————|———————————————————————————————————————————|—————————————————————————————————————————
采样率		|每秒音频数据的样本个数,单位为赫兹(Hz)		|sampleRate()、setSampleRate()
——————————————————————————————————————————————————————————————————————————————————————————————————
2.录制系统声音

在录制麦克风的基础上,然后在windows下打开“立体声混音”即可。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值