客户端实现
更新时间: 2024/08/02 11:26:48
网易云信音视频通话 2.0 产品为您提供开源的的多人视频通话示例项目,您可以参考示例项目和本文档快速实现多人视频通话的主要流程步骤,体验 NERTC SDK 的一对一实时音视频通话的效果。
前提条件
请确保您已完成以下操作:
- 已创建应用并获取 App Key。
- 已开通音视频通话 2.0 服务。
- 集成 SDK。
- 在云信控制台中为指定应用开通调试模式。
注意事项
集成开发阶段,建议在控制台中将指定应用的鉴权方式设置为调试模式,此时无需传入 Token 即可加入房间。但是出于安全性考虑,应用正式上线前,请在控制台中将指定应用的鉴权方式改回安全模式。
API 时序图
实现多人视频通话
1 初始化 SDK
-
(可选)设置音视频参数和属性。
在初始化之前,您可以根据不同场景下的用户喜好与需求,设置音视频的基本属性。音频可设置采样率、码率和编码模式等,视频可设置分辨率、帧率、码率的档位,裁剪模式等参数,场景的推荐配置请参见音视频参数配置推荐。
-
初始化 SDK。
执行
createClient
方法创建 client 实例。// 设置音视频参数和属性 let quality = 'speech_low_quality' localStream.setAudioProfile(quality) //示例 //创建client实例 rtc.client = NERTC.createClient({ appkey: 'xxx', //您的 appkey debug: true, //是否开启调试日志 });
2 开始视频通话
-
加入房间。
完成初始化后,调用
client.join
方法加入房间。SDK发起加入房间请求后,服务器会进行响应,开发者可以通过 NERtcCallback 的onJoinChannel
回调监听加入房间的结果。您也可以通过信令实现通话中的邀请机制。
-
设置本地视图。
初始化本地流成功后,可以设置本地视图,预览本地图像。
-
调用
getDevices
方法获取麦克风和摄像头设备的deviceId
。具体步骤请参考音视频设备检测。 -
加入房间后,调用
createStream
方法创建本地音视频流,并设置deviceId
。 -
调用
init
和play
方法初始化并播放本地音视频流,以预览本地图像;可以再通过setLocalRenderMode
方法设置视频画面的渲染模式,比如视频宽、高和裁剪选项。
在加入房间前,默认预览分辨率为 640*480,您可以通过
setVideoProfile
接口的resolution
参数调整采集分辨率,但请在init
或open
之前调用。- 可以调用
publish
方法发布自己的多媒体流至流媒体,供其他用户订阅。
-
-
设置远端视图。
视频通话中,如果需要看到其他用户,需要手动为其设置远端用户视图。
示例代码如下:
// 加入房间
NERtcEx.getInstance().joinChannel(token,channelName,uid);
//初始化本地流并且发布
function initLocalStream() {
//创建本端stream实例,销毁前无需重复创建
rtc.localStream = NERTC.createStream({
uid: uid, // 本端的uid
audio: true, // 是否从麦克风采集音频
microphoneId: microphoneId, // 麦克风设备 deviceId,通过 getMicrophones() 获取
video: true, // 是否从摄像头采集视频
cameraId: cameraId // 摄像头设备 deviceId,通过 getCameras() 获取
})
//启动本地音视频流,销毁前无需重复初始化
rtc.localStream.init().then(()=>{
console.warn('音视频初始化完成,播放本地视频')
//用于播放视频的div元素
let div = document.getElementById('local-container')
//开始播放本地视频流
rtc.localStream.play(div)
//设置播放的视频容器大小
rtc.localStream.setLocalRenderMode({
width: 180,
height: 150,
cut: true // 是否裁剪
})
// 将本地音视频流发布至云信服务器,加入房间前不用执行此方法。
rtc.client.publish(rtc.localStream).then(()=>{
console.warn('本地 publish 成功')
})
})
}
// 监听远端用户进入频道
void onUserJoined(long uid);
//设置远端用户视频画布
public abstract int setupRemoteVideoCanvas(com.netease.lava.api.IVideoRender render, long uid);
// 监听远端用户视频流发布
void onUserVideoStart(long uid, int maxProfile);
// 阅此远端用户的视频流
public abstract int subscribeRemoteVideoStream(long uid,
NERtcRemoteVideoStreamType streamType,
boolean subscribe);
3 (可选)附加功能
-
通话中质量监测
NERTC SDK 支持将关键的音视频状况、网络状况、设备状态的相关指标实时回调给 APP 应用层,应用层可以将收到的数据进行展示或统计。多人视频通话 Demo 中支持实时查看当前上下行网络状态、通话质量等信息,具体请参见通话中质量监测。
您可以关注 network-quality 等回调,并在应用层向用户展示本地用户的上下行网络质量相关的统计数据。