通过设备管理API开发者可实现以下功能(各平台实现情况请参考各平台文档详情):
设备 | 功能 |
麦克风 | 检测麦克风状态 开关麦克风 获取麦克风音量 |
摄像头 | 检测摄像头状态 开关摄像头 切换摄像头 旋转摄像头画面
|
扬声器 | 检测扬声器状态 开关扬声器 获取扬声器音量 |
开发者可通过API实现设备列表的检测,并可对会议中使用的设备进行选择。 设备状态变更引起的参会者音视频状态的变更将通过事件回调进行通知。v3.3.1最新版增加了ChooseDev结果回调、旋转摄像头画面SetVideoCaptureRotation,具体可参考SDkDemo实现。
// 获得屏幕列表
SDKMonitorInfo[] GetMonitorList();
// 获取媒体设备列表
//可获取音视频设备列表,以及是否为默认音频设备
SDKMediaDevInfo[] GetDevList(SDKMediaDevType t);
// 选中一个设备
void ChooseDev(SDKMediaDevType t, SDKCameraOrdinal ordinal, string devId)
// 媒体设备信息
public class SDKMediaDevInfo
{
public string devId;
public string devName;
public string devBusLocation;
// 如果是PCI采集卡,当线缆插入式,这个字段为 true
public bool videoInputLocked; // the PCI video capture card has input locked
public _AudioDevInfo audioDevInfo;
public class _AudioDevInfo
{
public bool isDefault; //是否默认音频设备
}
}
/// <summary>
/// 旋转视频采集画面(顺时针)
/// </summary>
/// <param name="ordinal"></param>
/// <param name="rotation"></param>
void SetVideoCaptureRotation(SDKCameraOrdinal ordinal, SDKRotationType rotation);
前一章节实现了参会者布局功能,之后屏幕上就会渲染出我们想要的参会者画面,除了视频信息之外了我们还需要处理参会者的音视频状态,也就是媒体设备管理。因此,接下来我们了解一下设备管理的一些方法。当会议链接成功时,系统会自动申请相机、麦克风、扬声器资源,因此我们一般操作媒体设备都会在收到会议链接成功回调之后进行。如下列举了常用的操作方法:
//打开摄像头
void StartCamera(SDKCameraOrdinal ordinal, bool useDshow = false, bool rgbFormat = false, int skipFrameCnt = 0);
//关闭摄像头
void StopCamera(SDKCameraOrdinal ordinal, bool shutDown = false);
// 是否禁用视频流
// bMute:true - 禁用, false - 启用
void SetVideoMute(bool bMute);
// 摄像头本地镜像设置 flipping是否翻转
void SetLocalPreviewFlipping(SDKCameraOrdinal ordinal, bool flipping);
// 旋转视频采集画面(顺时针) rotation 旋转角度
void SetVideoCaptureRotation(SDKCameraOrdinal ordinal, SDKRotationType rotation);
// 使能麦克风检测
void EnableListenTest(SDKAudioEndPointOrdinal ordinal, bool bListen);
// 获取麦克风检测音量值
float GetCapturePeakMeter(SDKAudioEndPointOrdinal ordinal);
// 获取本地麦克风音量
int GetLocalMicVolume();
// 获取麦克风指示器音量
int GetMicEndPointVolume();
//设置麦克风指示器音量
void SetMicEndPointVolume(int value);
// 是否关闭麦克风
// bMute:true - 关闭, false - 打开
void SetMicMute(bool bMute);
// 开始播放音频(可用于扬声器检测)
// <param name="wavFile">音频文件</param> <param name="loopTimes">循环次数</param>
void StartPlayRing(string wavFile, int loopTimes);
// 停止播放音频
void StopPlayRing();
// 获取扬声器检测音量值
float GetRenderPeakMeter();
// 获取扬声器音量
int GetSpeakerVolume();
// 设置扬声器音量
void SetSpeakerVolume(int volume);
// 设置扬声器指示器音量
void SetSpeakerEndPointVolume(int value);
// 获取扬声器指示器音量
int GetSpeakerEndPointVolume();
// 是否关闭扬声器
// bMute:true - 关闭, false - 打开
void SetSpeakerMute(bool bMute);