Ответ оказался очень простым при динамической публикации видео
1) Получив URL-адрес из Firestore видео, установите для элемента src video новый URL
const video = document.getElementById("video");
// Get the download URL and switch vids
storageRef.child(vid).getDownloadURL().then(function (url) {
video.src = url;
// console.log("downloaded and updated")
// console.log("video")
}).catch(function (error) { <stuff>}
2) Поместите прослушиватель событий в элемент видео, чтобы затем можно было запустить функцию публикации после загрузки нового видео.
video.addEventListener('loadeddata', function() {
//Create Stream object and change it if in mozilla
const stream = video.mozCaptureStream ? video.mozCaptureStream() : video.captureStream();
//console.log(stream)
let publisher;
//publisher function is called when stream has tracks added to it
const publish = () => {
const videoTracks = stream.getVideoTracks();
const audioTracks = stream.getAudioTracks();
if (!publisher && videoTracks.length > 0 && audioTracks.length > 0) {
stream.removeEventListener('addtrack', publish);
publisher = OT.initPublisher('publisher', {
videoSource: videoTracks[0],
audioSource: audioTracks[0],
fitMode: 'contain',
width: 320,
height: 240
}, (err) => {
if (err) {
video.pause();
alert(err.message);
} else {
video.play();
}
});
publisher.on('destroyed', () => {
video.pause();
});
}
};
stream.addEventListener('addtrack', publish);
publish();
}, false);
Boom, вы официально публикуете API-интерфейс видеочата OpenTok с помощьювидео динамически загружается из Firebase.
Ps ОЧЕНЬ ВАЖНО При попытке перехватить поток URL-адреса из Google Firestore у вас возникают проблемы с CORS.Чтобы справиться с этой проблемой, я сначала следовал руководству Google Firebase о том, как установить правило CORS для конкретного сегмента, из которого я рисовал, а затем я установил значение перекрестного определения моего видео в HTML.
Конфигурация CORS из Документация google Чтобы загружать данные непосредственно в браузере, необходимо настроить хранилище облачного хранилища для перекрестного доступа (CORS).Это можно сделать с помощью инструмента командной строки gsutil, который вы можете установить отсюда .
Если вы не хотите каких-либо доменных ограничений (самый распространенный сценарий), скопируйте этоJSON в файл с именем cors.json:
[
{
"origin": ["*"],
"method": ["GET"],
"maxAgeSeconds": 3600
}
]
Запустите gsutil cors set cors.json gs://your-cloud-storage-bucket
для развертывания этих ограничений.
Затем в теге video в файле HTML я добавил свойство crossorigin
<video id="video"
src="video/BigBuckBunny_320x180.mp4"
crossorigin="Anonymous"
width="320" height="240"
controls
autoplay
loop
muted
>
</video>
Второй БУМ!теперь вы справились с ограничениями CORS для своей учетной записи Firebase и можете динамически публиковать видео через видеочат с помощью OpenTok и Google Firestore