设备管理功能提供了对音视频设备的完整管理能力,包括设备列表获取、设备选择、设备检测等功能。支持摄像头、麦克风、扬声器、显示器等多种设备类型的管理。
在开始使用设备之前,首先获取可用的设备列表:
// 获取摄像头设备列表
const XYArray<XYMediaDevInfo>& videoDevices = NemoSdkAdaptor::getInstance()->getDevList(XYMediaDevType_Video);
// 获取麦克风设备列表
const XYArray<XYMediaDevInfo>& audioInputDevices = NemoSdkAdaptor::getInstance()->getDevList(XYMediaDevType_AudioInput);
// 获取扬声器设备列表
const XYArray<XYMediaDevInfo>& audioOutputDevices = NemoSdkAdaptor::getInstance()->getDevList(XYMediaDevType_AudioOutput);
// 获取显示器列表
const XYArray<XYMonitorInfo>& monitors = NemoSdkAdaptor::getInstance()->getMonitorList();
根据用户选择或应用需求选择合适的设备:
// 选择摄像头设备
NemoSdkAdaptor::getInstance()->chooseDev(XYMediaDevType_Video, "camera_device_id");
// 选择麦克风设备
NemoSdkAdaptor::getInstance()->chooseDev(XYMediaDevType_AudioInput, "mic_device_id");
// 选择扬声器设备
NemoSdkAdaptor::getInstance()->chooseDev(XYMediaDevType_AudioOutput, "speaker_device_id");
在会议开始前进行设备检测,确保设备正常工作:
// 开始麦克风检测
NemoSdkAdaptor::getInstance()->enableMicTest(true);
// 开始扬声器检测
NemoSdkAdaptor::getInstance()->startPlayWavFile("test_audio.wav");
// 停止扬声器检测
NemoSdkAdaptor::getInstance()->stopPlayWavfile();
API: getDevList
接口定义:
virtual const XYArray<XYMediaDevInfo>& getDevList(XYMediaDevType t) = 0;
参数:
t
: XYMediaDevType - 媒体设备类型返回值: XYArray<XYMediaDevInfo> - 对应类型的设备列表
示例:
// 获取摄像头设备列表
const XYArray<XYMediaDevInfo>& videoDevices = NemoSdkAdaptor::getInstance()->getDevList(XYMediaDevType_Video);
// 获取麦克风设备列表
const XYArray<XYMediaDevInfo>& audioInputDevices = NemoSdkAdaptor::getInstance()->getDevList(XYMediaDevType_AudioInput);
// 获取扬声器设备列表
const XYArray<XYMediaDevInfo>& audioOutputDevices = NemoSdkAdaptor::getInstance()->getDevList(XYMediaDevType_AudioOutput);
API: getMonitorList
接口定义:
virtual const XYArray<XYMonitorInfo>& getMonitorList() = 0;
返回值: XYArray<XYMonitorInfo> - 显示器信息列表
示例:
const XYArray<XYMonitorInfo>& monitors = NemoSdkAdaptor::getInstance()->getMonitorList();
API: getAudioPCMFormat
接口定义:
virtual const XYAudioPCMFormat& getAudioPCMFormat() = 0;
返回值: XYAudioPCMFormat - 音频格式信息
示例:
const XYAudioPCMFormat& pcmFormat = NemoSdkAdaptor::getInstance()->getAudioPCMFormat();
API: chooseDev
接口定义:
virtual void chooseDev(XYMediaDevType t, const char* devId, const char* type, bool isInConf = false) = 0;
参数:
t
: XYMediaDevType - 媒体设备类型devId
: const char* - 设备IDtype
: const char* - 类型,默认传空字符串isInConf
: bool - 是否在会议中,默认false(如果type为空字符串isInConf才生效,适配linux)示例:
// 选择摄像头
NemoSdkAdaptor::getInstance()->chooseDev(XYMediaDevType_Video, "camera_001", "", false);
// 选择麦克风
NemoSdkAdaptor::getInstance()->chooseDev(XYMediaDevType_AudioInput, "mic_001", "", false);
// 选择扬声器
NemoSdkAdaptor::getInstance()->chooseDev(XYMediaDevType_AudioOutput, "speaker_001", "", false);
API: enableMicTest
接口定义:
virtual void enableMicTest(bool enable) = 0;
参数:
enable
: bool - 是否启用麦克风检测示例:
// 开始麦克风检测
NemoSdkAdaptor::getInstance()->enableMicTest(true);
// 停止麦克风检测
NemoSdkAdaptor::getInstance()->enableMicTest(false);
API: startPlayWavFile
接口定义:
virtual void startPlayWavFile(const char* wavfile, int loopTimes) = 0;
参数:
wavfile
: const char* - 测试文件地址loopTimes
: int - 循环次数示例:
// 开始播放测试音频,循环3次
NemoSdkAdaptor::getInstance()->startPlayWavFile("test_audio.wav", 3);
API: stopPlayWavfile
接口定义:
virtual void stopPlayWavfile() = 0;
示例:
// 停止播放测试音频
NemoSdkAdaptor::getInstance()->stopPlayWavfile();
class DeviceManager {
private:
QList<QString> _videoDevices;
QList<QString> _audioInputDevices;
QList<QString> _audioOutputDevices;
QList<QString> _monitors;
QString _currentVideoDevice;
QString _currentAudioInputDevice;
QString _currentAudioOutputDevice;
public:
void initializeDevices() {
// 获取所有设备列表
getVideoDevices();
getAudioInputDevices();
getAudioOutputDevices();
getMonitors();
}
void getVideoDevices() {
NemoSdkAdaptor::getInstance()->getDevList(XYMediaDevType_Video);
}
void getAudioInputDevices() {
NemoSdkAdaptor::getInstance()->getDevList(XYMediaDevType_AudioInput);
}
void getAudioOutputDevices() {
NemoSdkAdaptor::getInstance()->getDevList(XYMediaDevType_AudioOutput);
}
void getMonitors() {
NemoSdkAdaptor::getInstance()->getMonitorList();
}
void selectVideoDevice(const QString& deviceId) {
NemoSdkAdaptor::getInstance()->chooseDev(XYMediaDevType_Video, deviceId.toStdString());
_currentVideoDevice = deviceId;
}
void selectAudioInputDevice(const QString& deviceId) {
NemoSdkAdaptor::getInstance()->chooseDev(XYMediaDevType_AudioInput, deviceId.toStdString());
_currentAudioInputDevice = deviceId;
}
void selectAudioOutputDevice(const QString& deviceId) {
NemoSdkAdaptor::getInstance()->chooseDev(XYMediaDevType_AudioOutput, deviceId.toStdString());
_currentAudioOutputDevice = deviceId;
}
void startMicTest() {
NemoSdkAdaptor::getInstance()->enableMicTest(true);
}
void stopMicTest() {
NemoSdkAdaptor::getInstance()->enableMicTest(false);
}
void startSpeakerTest(const QString& audioFile) {
NemoSdkAdaptor::getInstance()->startPlayWavFile(audioFile.toStdString());
}
void stopSpeakerTest() {
NemoSdkAdaptor::getInstance()->stopPlayWavfile();
}
void getAudioPCMFormats() {
NemoSdkAdaptor::getInstance()->getAudioPCMFormat();
}
// 设备变化回调
void onDeviceChanged(XYMediaDevType type, const XYString& deviceId) {
QString deviceIdStr(deviceId.str());
switch (type) {
case XYMediaDevType_Video:
qDebug() << "Video device changed:" << deviceIdStr;
_currentVideoDevice = deviceIdStr;
break;
case XYMediaDevType_AudioInput:
qDebug() << "Audio input device changed:" << deviceIdStr;
_currentAudioInputDevice = deviceIdStr;
break;
case XYMediaDevType_AudioOutput:
qDebug() << "Audio output device changed:" << deviceIdStr;
_currentAudioOutputDevice = deviceIdStr;
break;
}
emit deviceChanged(type, deviceIdStr);
}
// 设备配置结果回调
void onDeviceConfigResult(const XYString& code, XYMediaDevType type, const XYString& deviceId) {
QString errCode(code.str());
QString deviceIdStr(deviceId.str());
if (errCode == SDKError_NoError) {
qDebug() << "Device config successful:" << type << deviceIdStr;
emit deviceConfigSuccess(type, deviceIdStr);
} else {
qDebug() << "Device config failed:" << errCode << type << deviceIdStr;
emit deviceConfigFailed(type, deviceIdStr, errCode);
}
}
// 媒体设备错误回调
void onMediaDeviceError(XYMediaDevType type, const XYString& deviceId, const XYString& error) {
QString deviceIdStr(deviceId.str());
QString errorStr(error.str());
qDebug() << "Media device error:" << type << deviceIdStr << errorStr;
emit mediaDeviceError(type, deviceIdStr, errorStr);
}
// 扩展设备变化回调
void onExDevicesChanged(const XYString& deviceId) {
QString deviceIdStr(deviceId.str());
qDebug() << "External device changed:" << deviceIdStr;
emit externalDeviceChanged(deviceIdStr);
}
// Getter方法
QList<QString> getVideoDevices() const { return _videoDevices; }
QList<QString> getAudioInputDevices() const { return _audioInputDevices; }
QList<QString> getAudioOutputDevices() const { return _audioOutputDevices; }
QList<QString> getMonitors() const { return _monitors; }
QString getCurrentVideoDevice() const { return _currentVideoDevice; }
QString getCurrentAudioInputDevice() const { return _currentAudioInputDevice; }
QString getCurrentAudioOutputDevice() const { return _currentAudioOutputDevice; }
};
设备类型 | 说明 |
| 视频设备(摄像头) |
| 音频输入设备(麦克风) |
| 音频输出设备(扬声器) |
方法 | 描述 | 链接 |
获取媒体设备列表 | ||
获取显示器列表 | ||
获取音频PCM列表 |
方法 | 描述 | 链接 |
开始播放测试文件用于扬声器检测 | ||
结束播放测试文件用于扬声器检测 | ||
使能麦克风检测 |
回调 | 描述 | 链接 |
设备变化回调 | ||
媒体设备错误回调 | ||
设备配置结果回调 |
枚举 | 描述 | 链接 |
媒体设备类型枚举 |