deviceManager
deviceManager
是 SDK 的内置对象,不需要实例化,用于采集本地的媒体对象和感知媒体设备的变化。
deviceInfo
MediaDeviceInfo> | undefined
类型 Array<当前 SDK 获取到的媒体设备列表,如果为 undefined
说明获取媒体列表的操作还在进行中。
当收到第一个
device-add
或者device-update
事件说明媒体设备获取完成
getLocalTracks(config)
采集本地的媒体数据,以 Track 的形式返回
RecordConfig
| undefined
config: RecordConfig
是采集的配置选项,完整配置见下, 带 ?
的是可选项:
RecordConfig {
audio?: {
enabled: boolean, // 是否开启音频采集
bitrate?: number, // 传输的码率,单位 kbps
tag?: string, // 采集返回的 Track 中的 tag 信息
/**
* 传入 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
tag?: string, // 采集返回的 Track 中的 tag 信息
/**
* 传入 deviceId 代表使用指定的 device 采集
* deviceId 可以从上文中的 deviceInfo 中获取
*/
deviceId?: string,
frameRate?: number, // 帧率
height?: number | NumberRange, // 视频高度
width?: number | NumberRange, // 视频宽度
/**
* 选择摄像头
* 可选值:"user" | "environment" | "left" | "right"
*/
facingMode?: ConstrainDOMString,
optimizationMode?: OptimizationMode, // 传输优化模式
},
screen?: {
enabled: boolean, // 是否开启屏幕或者窗口采集
bitrate?: number, // 传输的码率,单位 kbps
tag?: string, // 采集返回的 Track 中的 tag 信息
width?: number | NumberRange, // 输出画面的宽度
height?: number | NumberRange,// 输出画面的高度
// 指定是窗口采集还是屏幕采集
// Chrome 72 之后,如果不开启强制插件采集,这个选项将会无效
source?: "window" | "screen",
audio?: boolean, // 是否使用系统声音
forceChromePlugin?: boolean, // Chrome 下是否强制使用插件采集
optimizationMode?: OptimizationMode, // 传输优化模式
},
}
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 },
}
})
另外要说明的是 facingMode 选择摄像头属性。对手机而言,常见的用法是 environment
表示后置摄像头,user
表示前置摄像头。具体含义详见这里。该属性也支持 ConstrainDOMString
的格式,详细用法见这里。
其中,OptimizationMode 表示传输优化模式:
- "motion": 流畅优先,遭遇网络波动时,发送端会降低码率来确保接收端的视频画面不会出现中断和卡顿。
- "detail": 清晰优先,遭遇网络波动时,可能会采取适当降低帧率等方法,确保清晰的视频画面。
- 如果不设置,表示浏览器根据自身算法确定模式。
Track>>
返回 Promise<Array<异步操作完成后,会返回和传入的配置相匹配的 Track
对象,如果采集配置同时开启了 audio
、video
和 screen
, 会返回 3 个 Track
对象,如果只开启了其中 2 个,就返回 2 个 Track
对象。
返回后的 Track
顺序是不固定的,需要通过 Track
的 tag
来区分。
getLocalTracks 可以重复调用,每次的返回都各自独立
事件列表
device-add
有新的媒体设备插入
参数
- deviceInfo: MediaDeviceInfo 表示新插入的设备信息
device-remove
有媒体设备拔出
参数
- deviceInfo: MediaDeviceInfo 表示拔出设备信息
device-update
媒体设备列表更新
参数
- deviceInfo: Array<MediaDeviceInfo> 当前的媒体设备列表
device-add
和 device-remove
都会触发此事件