音视频采集
视频配置
设备枚举
SDK 可以枚举系统内所有可采集的摄像头设备,包括物理和虚拟摄像头,以及其所支持的采集参数,如尺寸、帧率、图像格式,制定设备进行预览或者发布时,需给其配置其支持的采集参数,否则设备将会打开失败。
以下为封装视频采集设备属性的结构体 CameraDeviceInfo
/**
* 摄像头采集属性
*/
struct CameraCapability
{
int width;
int height;
int max_fps;
VideoCaptureType video_type; // 图像采集格式
};
typedef std::vector<CameraCapability> CameraCapabilityVec;
/**
* 摄像头基本信息及其支持的采集属性列表
*/
struct CameraDeviceInfo
{
std::string device_id;
std::string device_name;
CameraCapabilityVec capability_vec;
};
以上可首先通过 QNVideoInterface::GetCameraCount()
获取系统中设备数量,然后再逐一通过 QNVideoInterface::GetCameraInfo(unsigned int device_index_)
方法 获取设备属性;
参数配置
PreviewCamera 和 CreateVideoTrack 时进行配置
音频配置
设备枚举
SDK 可以枚举系统内所有的音频设备,即包括麦克风和扬声器。
以下为封装音频设备信息的结构体 AudioDeviceInfo
struct AudioDeviceInfo
{
enum AudioDeviceType
{
adt_invalid = -1,
adt_record, // 录制设备
adt_playout, // 播放设备
};
int device_index = 0; // 设备序号,仅表示在 SDK 中记录的序号,0 不代表其为默认设备
bool is_default = false; // 是否为系统默认设备
AudioDeviceType device_type = adt_invalid; // 设备类型,录制 or 播放
char device_name[QNRTC_MAX_DEVICE_LENGHT] = { 0 }; // 设备名称
char device_id[QNRTC_MAX_DEVICE_LENGHT] = { 0 }; // 设备 Id
};
以上可通过 QNAudioInterface::GetAudioDeviceCount
获取指定类型的设备数量,然后再通过 QNAudioInterface::GetAudioDeviceInfo
方法逐一获取设备信息,如:
// 枚举音频采集设备列表
for (int i(0); i < _rtc_audio_interface->GetAudioDeviceCount(AudioDeviceInfo::adt_record); ++i) {
AudioDeviceInfo audio_info;
if (_rtc_audio_interface->GetAudioDeviceInfo(AudioDeviceInfo::adt_record, i, audio_info) == 0) {
...
);
}
}
// 枚举音频播放设备列表
for (int i(0); i < _rtc_audio_interface->GetAudioDeviceCount(AudioDeviceInfo::adt_record); ++i) {
AudioDeviceInfo audio_info;
if (_rtc_audio_interface->GetAudioDeviceInfo(AudioDeviceInfo::adt_playout, i, audio_info) == 0) {
...
}
}
参数配置
SDK 目前支持指定特定的音频输入、输出设备进行连麦(否则使用系统默认设备,但非默认通信设备); SDK 暂不支持对音频的具体格式进行配置(包括但不局限于:采样率、声道、位宽),目前 SDK 内默认的音频格式根据设备支持情况一般为 48kHz,stero, 16bits 格式;
- 相关控制接口为:
struct AudioDeviceSetting
{
enum WindowsDeviceType
{
wdt_DefaultCommunicationDevice = -1,
wdt_DefaultDevice = -2
};
unsigned int device_index;
WindowsDeviceType device_type = wdt_DefaultDevice;
};
// 指定音频输入设备进行连麦
virtual int SetRecordingDevice(AudioDeviceSetting recording_device_setting_) = 0;
// 指定音频输出设备进行连麦
virtual int SetPlayoutDevice(AudioDeviceSetting playout_device_setting_) = 0;
注:通话过程中指定设备无效,需在通话开始前配置音频采集、播放设备。