功能
当创建房间并成功进入推流以后,便会看到摄像头返回的视频(主动触发),当有其他人进入时会自动将视频窗口加入(被动触发)。
创建房间时
创建房间加入并推流成功以后joinRoomFun(),主动触发previewLocalStream()本地流。
/**
* 预览本地流。
* @param {LocalStreamConfig} config 本地流配置。
* @returns {Promise<any>} 返回预览结果的Promise。
*/
previewLocalStream(config: LocalStreamConfig): Promise<APICommonResponse> {
return control.previewLocalStream(config);
}
其他人加入房间时
在用户登录时meettingLogin(),其中在登录成功以后会触发这个方法installEventHandlers()
//FHMeeting 所有监听rtc、im事件
function installEventHandlers() {
/.../
}
其中是各种事件event的监听,其中:
// 远端用户发布了视频
FHMeeting.on(VOP.EVENT.REMOTE_VIDEO_AVAILABLE, (res) => {
console.log('【---远端用户发布了视频---】', res)
const { userId, streamType, stream } = res
//递增远端流id显示
if (streamType === 'main') {
addView(res);
FHMeeting.startRemoteVideo({
userId,
streamType,
view: userId,
stream
})
} else {
FHMeeting.startRemoteVideo({
userId,
streamType,
view: 'share_div',
stream
})
}
})
这个事件中我们可以发现,当streamType为true时候触发addView(res);
//创建视频窗口盒子
function addView(data) {
const { userId, streamType } = data
let div = document.createElement("div");
let divattr = document.createAttribute("class");
divattr.value = "video-view";
let divattrId = document.createAttribute("id");
divattrId.value = userId;
div.setAttributeNode(divattr);
div.setAttributeNode(divattrId);
let video_grid = document.querySelector('#video_grid');
div.onclick = () => getVideoFrameRemo(data)
video_grid.appendChild(div);
}
哦吼,真相大白了,这里便是被动触发,并可以创建新的视频窗口的地方了。
小结
已经熟悉上一节的api流程以后,我们可以通过这个思路找到一些功能的具体实现调用的流程。在这里我初识了一个重要内容——事件(event),我们将在下一节着重与它相识。