Итак, я работал над проектом, который использует веб-SDK от Агоры. Я в основном хочу беспрепятственно переключаться между демонстрацией экрана и трансляцией видео, аудио используется в обоих случаях.
Вот что я закодировал:
const localPlay = {
screen: {
playing: false,
initialised: false
},
video: {
playing: false,
initialised: false
}
};
// Initialise two clients and two streams, with the following stream specs
const screenStreamSpec = {
streamID: uid,
audio: false,
video: false,
screen: true,
};
const videoStreamSpec = {
streamID: uid,
audio: true,
video: true,
screen: false,
};
// ...
document.getElementById("Screen-share").addEventListener("click", function() {
if(!localPlay.screen.initialised) {
return
} else {
if(!localPlay.screen.playing && !localPlay.video.playing) {
screenStream.play("Screen");
rtc.client.screenClient.publish(screenStream);
localPlay.screen.playing = true;
return;
}
if(localPlay.screen.playing) {
return;
}
videoStream.stop();
localPlay.screen.playing = false;
screenStream.play("Screen");
localPlay.video.playing = true;
let newTrack = videoStream.getVideoTrack();
screenStream.replaceTrack(newTrack);
}
});
document.getElementById("Video-share").addEventListener("click", function() {
if(!localPlay.video.initialised) {
return
} else {
if(!localPlay.video.playing && !localPlay.screen.playing) {
videoStream.play("Screen");
rtc.client.videoClient.publish(videoStream);
localPlay.video.playing = true;
return;
}
if(localPlay.video.playing) {
return;
}
screenStream.stop();
localPlay.video.playing = false;
videoStream.play("Screen");
localPlay.screen.playing = true;
let newTrack = screenStream.getVideoTrack();
videoStream.replaceTrack(newTrack);
}
});
Код соответствует это (решение 3).
Ошибка в том, что при первой попытке сделать то и другое они работают. Но, скажем, если я начал с совместного использования экрана и переключился на видеотрансляцию, камера выключится, совместное использование экрана отключится, а экран, который я показывал, поворачивается и отображается в div Screen
. Если я попытаюсь переключиться еще раз, div станет полностью черным.
Где я ошибся?