deviceManager 对象
deviceManager
是 SDK 的内置对象,不需要实例化,用于采集本地的媒体对象和感知媒体设备的变化。
deviceInfo
MediaDeviceInfo> | undefined
类型 Array<当前 SDK 获取到的媒体设备列表,如果为 undefined
说明获取媒体列表的操作还在进行中。
当收到第一个
device-add
或者device-update
事件说明媒体设备获取完成
getLocalStream(config)
采集本地的媒体数据,以 Stream 的形式返回
RecordConfig
| undefined
config: RecordConfig
是采集的配置选项,完整配置见下, 带 ?
的是可选项:
RecordConfig {
audio?: {
enabled: boolean, // 是否开启音频采集
bitrate?: number, // 传输的码率,单位 kbps
/**
* 传入 deviceId 代表使用指定的 device 采集
* deviceId 可以从上文中的 deviceInfo 中获取
*/
deviceId?: string,
/**
* 如果这个选项打开,SDK 将不会从麦克风采集媒体源
* 而是使用传入的 在线音乐地址/本地文件/音频Buffer 作为媒体源
* 具体用法可以参考文档指南中的 [外部音频导入]
*/
source?: string | File | AudioBuffer,
/**
* 以下建议不要更改,浏览器会根据设备自动适配
*/
sampleRate?: number, // 采样率
sampleSize?: number, // 采样大小
channelCount?: number, // 声道数
autoGainControl?: boolean, // 是否打开自动增益
echoCancellation?: boolean, // 是否打开回声消除
noiseSuppression?: boolean, // 是否打开噪声抑制
},
video?: {
enabled: boolean, // 是否开启视频采集
bitrate?: number, // 传输的码率,单位 kbps
/**
* 传入 deviceId 代表使用指定的 device 采集
* deviceId 可以从上文中的 deviceInfo 中获取
*/
deviceId?: string,
frameRate?: number, // 帧率
height?: number | NumberRange, // 视频高度
width?: number | NumberRange, // 视频宽度
},
screen?: {
enabled: boolean, // 是否开启屏幕或者窗口采集
bitrate?: number, // 传输的码率,单位 kbps
width?: number | NumberRange, // 输出画面的宽度
height?: number | NumberRange, // 输出画面的高度
// 指定是窗口采集还是屏幕采集
// Chrome 72 之后,如果不开启强制插件采集,这个选项将会无效
source?: "window" | "screen",
forceChromePlugin?: boolean, // Chrome 下是否强制使用插件采集
},
}
width
和 height
除了支持传入 number
指定以外,还支持传入 NumberRange
,示例见下:
const tracks = await deviceManager.getLocalTracks({
video: {
enabled: true,
// width 希望能取到1280
// 如果不能就在 600-1500的范围内选择一个摄像头支持的值,还是不能就抛出错误
width: { min: 600, max: 1500, ideal: 1280 },
// height 希望能取到720,如果失败就抛出错误
height: { exact: 720 },
}
})
Stream>
返回 Promise<异步操作完成后,会返回和传入的配置相匹配的 Stream
对象。注意,一个 Stream
只能有至多一个视频画面和一个音频,所以screen 和 video 不能同时打开。
getLocalStream 可以重复调用,每次的返回都各自独立
事件列表
device-add 有新的媒体设备插入
参数
- deviceInfo: MediaDeviceInfo 表示新插入的设备信息
device-remove 有媒体设备拔出
参数
- deviceInfo: MediaDeviceInfo 表示拔出设备信息
device-update 媒体设备列表更新
参数
- deviceInfo: Array<MediaDeviceInfo> 当前的媒体设备列表
device-add
和 device-remove
都会触发此事件