产品百科 | RTC Windows SDK 音视频设备测试说明

简介: RTC SDK 为您提供音视频设备测试的方法,您可以在音视频通话前检查当前设备上的摄像头,麦克风以及扬声器等音视频设备是否正常工作,以保证音视频通话质量。通过阅读本文,您可以了解音视频设备测试的方法。

摄像头测试

  1. 创建 SDK 实例后,应用层可以调用接口 getCameraList,获取当前设备上所有可用摄像头,返回设备列表中将同时返回设备 ID 及设备名称,应用层可选择通过设备名称或设备 ID 进行判断,并通过接口 setCurrentCamera 或 setCurrentCameraById 选中需要测试的设备。
AliRtcEngine *pEngine = AliRtcEngine::sharedInstance(listener, "");
AliRtcDeviceList cameraList;
pEngine->getCameraList(cameraList);
#if defined(USE_DEVIC_NAME)
// 可以通过遍历所有摄像头设备名,查找并设置需要测试的设备
std::string matchDeviceName = /*测试设备名*/;
for (size_t i = 0; i != cameraList.deviceNames.size(); ++i)
{
    AliRtc::String deviceName = cameraList.deviceNames.at(i);
    if(std::string(deviceName.c_str()) == matchDeviceName)
    {
        // 设置测试设备
        pEngine->setCurrentCamera(deviceName);
    }    
}
#else
// 可以通过遍历所有摄像头设备ID并查找需要测试的设备
std::string matchDeviceId = /*测试设备ID*/;
for (size_t i = 0; i != cameraList.deviceIds.size(); ++i)
{
    AliRtc::String deviceId = cameraList.deviceIds.at(i);
    if(std::string(deviceId.c_str()) == matchDeviceId)
    {
        // 设置测试设备
        pEngine->setCurrentCameraById(deviceId);
    }    
}
#endif
  1. 设置测试摄像头设备之后,通过 setLocalViewConfig 接口可以设置预览显示窗口,然后启动预览,即可通过预览画面是否正常显示,判断当前摄像头设备是否正常工作。
// 设置预览窗口
AliVideoCanvas canvas;
canvas.hWnd = /*预览显示窗口句柄*/;
pEngine->setLocalViewConfig(canvas, AliRtcVideoTrackCamera);
// 开启预览检查,确认显示是否正常
pEngine->startPreview();

麦克风测试

  1. 创建 SDK 实例后,应用层需要继承 AliMediaDeviceTestEventListener 接口,实现 OnAudioDeviceRecordLevel 回调,用于接收麦克风测试时返回的音量值。再通过 SDK 接口 createMediaDeviceTestInterface 创建设备测试实例,并在创建时传入回调监听实例。
// 继承实现设备测试事件回调
class DeviceTestEventListener : public AliMediaDeviceTestEventListener
{
public:
    virtual void OnAudioDeviceRecordLevel(int level)
    {
        // 处理麦克风测试音量回调
    }   
};
// 创建SDK实例及设备测试实例
AliRtcEngine *pEngine = AliRtcEngine::sharedInstance(listener, "");
DeviceTestEventListener* deviceTestListener = new DeviceTestEventListener();
AliMediaDeviceTestInterface *pTestInterface = pEngine->createMediaDeviceTestInterface(deviceTestListener);
  1. 开始测试前,通过接口 getAudioCaptures 获取当前设备上所有可用麦克风设备,返回设备列表中将同时返回设备 ID 及设备名称,应用层可选择通过设备名或设备 ID 判断并选择需要测试的设备。
AliRtcDeviceList audioCaptureList;
pEngine->getAudioCaptures(audioCaptureList);
#if defined(USE_DEVIC_NAME)
// 可以通过遍历所有麦克风设备名,查找需要测试的设备
std::string matchDeviceName = /*测试设备名*/;
for (size_t i = 0; i != audioCaptureList.deviceNames.size(); ++i)
{
    AliRtc::String deviceName = audioCaptureList.deviceNames.at(i);
    matchDeviceName = ...  
}
#else
// 可以通过遍历所有麦克风设备ID,查找需要测试的设备
std::string matchDeviceId = /*测试设备ID*/;
for (size_t i = 0; i != audioCaptureList.deviceIds.size(); ++i)
{
    AliRtc::String deviceId = audioCaptureList.deviceIds.at(i);
    matchDeviceId = ...  
}
#endif
  1. 选中测试设备后,调用麦克风测试接口启动测试,接口中需要指明测试设备名称或者设备 ID,以及音量回调频率(传入 0 为默认频率,每 20ms 回调一次音量)。测试开始后,提示您对麦克风设备说话,并将 OnAudioDeviceRecordLevel 回调中返回的采集音量值进行展示,判断当前麦克风设备是否正常工作。
// 启动麦克风设备测试
#if defined(USE_DEVIC_NAME)
pTestInterface->StartTestAudioRecord(matchDeviceName.c_str(), 0);
#else
pTestInterface->StartTestAudioRecordById(matchDeviceName.c_str(), 0); 
#endif
  1. 测试完成后,调用接口 StopTestAudioRecord 停止麦克风测试,并释放设备测试功能实例。
pTestInterface->StopTestAudioRecord();
pTestInterface->Release();
pTestInterface = nullptr;

扬声器测试

  1. 创建 SDK 引擎实例后,应用层需要继承 AliMediaDeviceTestEventListener 接口,实现 OnAudioDevicePlayoutLevel 回调,用于接收扬声器测试时返回的音量值,同时实现 OnAudioDevicePlayoutEnd 回调,用于接收播放文件结束事件。然后通过 SDK 接口 createMediaDeviceTestInterface 创建设备测试实例,并在创建时传入回调监听实例。
// 继承实现设备测试事件回调
class DeviceTestEventListener : public AliMediaDeviceTestEventListener
{
public:
    virtual void OnAudioDevicePlayoutLevel(int level)
    {
        // 处理扬声器测试音量回调
    }
    virtual void OnAudioDevicePlayoutEnd()
    {
        // 处理扬声器测试播放结束事件
    }
};
// 创建SDK实例及设备测试实例
AliRtcEngine *pEngine = AliRtcEngine::sharedInstance(listener, "");
DeviceTestEventListener* deviceTestListener = new DeviceTestEventListener();
AliMediaDeviceTestInterface *pTestInterface = pEngine->createMediaDeviceTestInterface(deviceTestListener);
  1. 开始测试前,通过接口 getAudioCaptures 获取当前设备上所有可用扬声器,返回设备列表中将同时返回设备 ID 及设备名称,应用层可选择通过设备名或设备 ID 判断并选中需要测试的设备。
AliRtcDeviceList audioRenderList;
pEngine->getAudioRenderers(audioRenderList);
#if defined(USE_DEVIC_NAME)
// 可以通过遍历所有麦克风设备名,查找需要测试的设备
std::string matchDeviceName = /*测试设备名*/;
for (size_t i = 0; i != audioRenderList.deviceNames.size(); ++i)
{
    AliRtc::String deviceName = audioRenderList.deviceNames.at(i);
    matchDeviceName = ...  
}
#else
// 也可以通过遍历所有麦克风设备ID,查找需要测试的设备
std::string matchDeviceId = /*测试设备ID*/;
for (size_t i = 0; i != audioRenderList.deviceIds.size(); ++i)
{
    AliRtc::String deviceId = audioRenderList.deviceIds.at(i);
    matchDeviceId = ...  
}
#endif
  1. 选中测试设备后,调用扬声器测试接口启动测试,接口中需要指明测试设备名称或设备 ID,音量回调频率(传入 0 为默认频率,每 20ms 回调一次音量),以及测试使用的音频文件路径。开始测试后,可以将 OnAudioDevicePlayoutLevel 回调中返回的采集音量值进行展示,同时关注扬声器中播放的测试音频,判断当前扬声器设备是否正常工作。
// 启动麦克风设备测试
#if defined(USE_DEVIC_NAME)
pTestInterface->StartTestAudioPlayout(matchDeviceName.c_str(), 0, wavPath.c_str());
#else
pTestInterface->StartTestAudioPlayoutById(matchDeviceId.c_str(), 0, wavPath.c_str());
#endif

  1. 说明 目前扬声器测试播放文件只支持 Wave 格式,传入路径需要为绝对路径,并保证可以被读取访问。
  2. 测试完成或接收到文件播放结束事件回调后,调用 StopTestAudioRecord 接口停止麦克风测试,并释放设备测试功能实例。
pTestInterface->StopTestAudioPlayout();
pTestInterface->Release();
pTestInterface = nullptr;


「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。

image.png

相关文章
|
9月前
|
存储 人工智能 弹性计算
2026年阿里云服务器租用价格表:一年、1个月、3年和1小时收费清单(完整版)
在云计算快速普及的2026年,阿里云作为国内领先的云计算服务提供商,凭借稳定的性能、灵活的配置和透明的定价,成为个人开发者、中小企业及大型企业上云的首选。阿里云服务器租用价格体系基于机型品类、配置规格、计费模式及部署地域构建,采用“基础套餐 + 组件叠加”的透明定价方式,无隐藏消费,核心涵盖轻量应用服务器、ECS云服务器、GPU高性能服务器三大品类,计费方式包括年付、月付、3年付及按量付费(按小时计费),费用从38元/年到数万元/年不等,适配个人开发、中小企业建站、AI计算等全场景需求。
5007 11
|
机器学习/深度学习 人工智能 算法
昇腾AI行业案例(一):基于AI图像处理的疲劳驾驶检测
在本实验中,您将学习如何使用利用CV(Computer Vision)领域的AI模型来构建一个端到端的疲劳驾驶检测系统,并使用开源数据集进行效果验证。为此,我们将使用昇腾的AI硬件以及CANN等软件产品。
1007 3
|
XML 机器学习/深度学习 数据格式
YOLOv8训练自己的数据集+常用传参说明
YOLOv8训练自己的数据集+常用传参说明
28062 3
|
敏捷开发 编解码 安全
测试面试题集锦(一)| 软件测试常见必考问题与流程篇(附答案)
本系列文章总结归纳了一些软件测试工程师常见的面试题,主要来源于个人面试遇到的、网络搜集(完善)、工作日常讨论等,分为以下十个部分,供大家参考。如有错误的地方,欢迎指正。有更多的面试题或面试中遇到的坑,也欢迎补充分享。希望大家都能找到满意的工作,共勉之!
测试面试题集锦(一)| 软件测试常见必考问题与流程篇(附答案)
|
弹性计算 运维 容灾
从人工到自动,泛微云上自动化部署实践
泛微借助阿里云的底层优势,将部分客户的服务迁移到云上,从硬件和网络上保证用户能够高效访问 OA 系统
从人工到自动,泛微云上自动化部署实践
|
算法 定位技术 vr&ar
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
7416 0
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
|
监控 NoSQL 算法
阿里本地生活EMonitor根因分析大揭秘
阿里集团针对故障处理提出了“**1/5/10**”的目标-- 1 分钟发现、5 分钟定位、10 分钟恢复,这对我们的定位能力提出了更高的要求。
4963 118
阿里本地生活EMonitor根因分析大揭秘
|
机器学习/深度学习 计算机视觉 异构计算
MobileNetV2详细原理(含torch源码)
MobileNetV2详细原理(含torch源码)—— cifar10
1930 0
MobileNetV2详细原理(含torch源码)
|
前端开发 Java
SpringBoot之三层架构的详细解析
SpringBoot之三层架构的详细解析
6431 0

热门文章

最新文章