一、使用相机
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下打开“立体声混音”即可。