本地用户流
获取本地媒体资源
您可以使用以下方法从本地摄像头、麦克风设备捕获默认音频 track、视频 track 资源。调用以下获取资源的 API,SDK 内部会把浏览器原生 API 获取的 mediaStream 对象转换为 RCLocalTrack 实例对象,用于后续集成。
同时捕获音视频流
使用初始化时获取的 RCRTCClient 实例的 createMicrophoneAndCameraTracks 方法可同时捕获音视频流。
接口
rtcClient.createMicrophoneAndCameraTracks(tag: string = 'RongCloudRTC', options?: { audio?: IMicphoneAudioProfile, video?: ICameraVideoProfile })
参数说明
| 参数 | 类型 | 必 填 | 说明 |
|---|---|---|---|
| tag | string | 否 | 资源标识,默认为 RongCloudRTC |
| options.audio | IMicphoneAudioProfile | 否 | 音频配置参数 |
| options.video | ICameraVideoProfile | 否 | 视频参数配置 |
示例代码
/**
* @description tracks 是一个数组,当 `code !== RCRTCCode.SUCCESS` 时,tracks 长度为 0
* @param tag 资源标识,不传时默认为 RongCloudRTC,代表浏览器摄像头、麦克风资源,
* 也可传入其他包含 A-Z、a-z、0-9、+、=、- 的字符串
* @param options 音视频配置项,可参考上述 1、2 中的介绍
*/
const { code, tracks } = await rtcClient.createMicrophoneAndCameraTracks(tag: string = 'RongCloudRTC', options?: { audio?: IMicphoneAudioProfile, video?: ICameraVideoProfile })
if (code === RCRTCCode.SUCCESS) {
// tracks 包含一个 RCMicphoneAudioTrack 实例和一个 RCCameraVideoTrack 实例
const [ audioTrack, videoTrack ] = tracks
}
捕获音频流
使用初始化时获取的 RCRTCClient 实例的 createMicrophoneAudioTrack 由麦克风捕获音频流:
rtcClient.createMicrophoneAudioTrack(tag: string = 'RongCloudRTC', options?: IMicphoneAudioProfile)
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| tag | string | 否 | 资源标识,默认为 RongCloudRTC |
| options | IMicphoneAudioProfile | 否 | 音频配置参数 |
示例代码
/**
* @description 仅当 `code === RCRTCCode.SUCCESS` 时 audioTrack 有值,
* audioTrack 为 RCMicphoneAudioTrack 类型实例
* @param tag 资源标识,不传时默认为 RongCloudRTC,代表浏览器麦克风资源,
* 也可传入其他包含 A-Z、a-z、0-9、+、=、- 的字符串
* @param IMicphoneAudioProfile 音频配置项,可选参数
* @param IMicphoneAudioProfile.micphoneId 指定麦克风设备 ID
* @param IMicphoneAudioProfile.sampleRate 指定音频采样率
*/
const { code, track: audioTrack } = await rtcClient.createMicrophoneAudioTrack(tag: string = 'RongCloudRTC', options?: IMicphoneAudioProfile)
捕获视频流
使用初始化时获取的 RCRTCClient 实例的 createCameraVideoTrack 方法由摄像头捕获视频流。如需设置视频帧率、分辨率,可参考「视频管理」下的文档。
接口
rtcClient.createCameraVideoTrack(tag: string = 'RongCloudRTC', options?: ICameraVideoProfile)
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| tag | string | 否 | 资源标识,默认为 RongCloudRTC |
| options | ICameraVideoProfile | 否 | 视频参数配置 |
示例代码
/**
* @description 仅当 `code === RCRTCCode.SUCCESS` 时 videoTrack 有值
* videoTrack 为 RCCameraVideoTrack 类型实例
* @param tag 资源标识,不传时默认为 RongCloudRTC,代表浏览器摄像头资源,
* 也可传入其他包含 A-Z、a-z、0-9、+、=、- 的字符串
* @param ICameraVideoProfile 视频配置项,可选参数
* @param ICameraVideoProfile.cameraId 指定摄像头设备 ID
* @param ICameraVideoProfile.frameRate 指定视频帧率,默认为 RCFrameRate.FPS_15
* @param ICameraVideoProfile.resolution 指定视频分辨率,默认为 RCResolution.W640_H480
*/
const { code, track: videoTrack } = await rtcClient.createCameraVideoTrack(tag: string = 'RongCloudRTC', options?: ICameraVideoProfile)
播放本地音视频资源
本地预览时,请使用 RCTrack 下的 play 方法在本端播放采集的数据。
不要在本端播放本端采集的音频流,否则可能会引起回声问题。
接口
Track.play(element, options)
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| element | HTMLElement | 否 | 用于承载媒体流的元素标签,音频流可传空 |
| options | { volume?: number; audioDeviceId?: string } | 否 | 配置参数,volume:播放音频资源的音量,audioDeviceId:指定播放音频的音频设备 ID |
示例代码
// 通过 videoTrack.play 方法将 <video> 标签传递给 videoTrack 实例
videoTrack.play(videoNode)
// 尽量不要在本端播放本端采集的音频流,因为可能会引起回声问题
audioTrack.play()
发布资源
在会议模式下,使用 RCRTCClient 实例的方法 joinRTCRoom 加入 RTC 会议房间。加入房间成功后,会返回 RCRTCRoom 房间实例、房间内其他用户 ID,以及房间内已发布的资源。
使用 RCRTCRoom 房间实例的 publish 方法发布一个或多个音视频轨道 RCLocalTrack 数据。
接口
room.publish(tracks)
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| tracks | RCLocalTrack[] 或者 IPublishAttrs[] | 是 | 音视频资源 |
示例代码
const { code } = await room.publish([audioTrack, videoTrack])
// 若资源发布失败
if (code !== RCRTCCode.SUCCESS) {
console.log('资源发布失败:', code)
}
publish 方法的输入参数 tracks 接收 RCLocalTrack 或者 IPublishAttrs 数组。如果需要同时发布视频大小流,请使用 IPublishAttrs 数组,并在其中设置需要发布小流的视频轨道。
示例代码
const { code } = await room.publish([
{
track: videoTrack,
pubTiny: true // pubTiny 用于指定同时发布视频数据的同时,额外发布一个小流数据
}
])
取消发布
使用 RCRTCRoom 房间实例的 unpublish 方法取消发布资源。
接口
room.unpublish(tracks)
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| tracks | RCLocalTrack[] | 是 | 要取消发布的资源 |
示例代码
const { code } = await room.unpublish([audioTrack, videoTrack])
if (code !== RCRTCCode.SUCCESS) {
console.log('取消发布失败:', code)
}
// 取消发布后,业务层若不再需要播放资源,可调 destroy 方法销毁资源
// audioTrack.destroy()
// videoTrack.destroy()
已发布的本地流切换设备
使用 RCRTCRoom 房间实例的 changeMediaDevice 方法切换设备。
接口定义
/**
* 切换已发布视频或音频的媒体设备
* @param oldTrack 已经发布的视频轨道或音频轨道
* @param newTrack 从新设备获取的视频轨道或音频轨道
* @returns code 切换结果,RCRTCCode.SUCCESS 表示切换成功
* @since 5.30.0
*/
changeMediaDevice(oldTrack: RCCameraVideoTrack | RCMicphoneAudioTrack, newTrack: RCCameraVideoTrack | RCMicphoneAudioTrack): Promise<{code: RCRTCCode}>
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
oldTrack | RCCameraVideoTrack 或 RCMicphoneAudioTrack | 是 | 已发布的视频轨道或音频轨道 |
newTrack | RCCameraVideoTrack 或 RCMicphoneAudioTrack | 是 | 从新设备获取的视频轨道或音频轨道 |
返回值
返回一个 Promise<{code: RCRTCCode}>,其中 code 为 RCRTCCode.SUCCESS 时表示切换成功。
示例代码
const { code } = await room.changeMediaDevice(oldTrack, newTrack);
if (code === RCRTCCode.SUCCESS) {
console.log('设备切换成功');
} else {
console.log('设备切换失败:', code);
}