Я использую два тега видео в HTML для загрузки текущего видео, а также следующего видео. Когда текущее видео начнет воспроизводиться, следующее видео будет скрыто и предварительно загружено.
Когда текущее видео заканчивается, оно исчезает, а следующее видео исчезает. Два тега видео будут работать даже странным образом при воспроизведении следующего видео при смене источника видео.
Проблема
Когда пользователь постоянно щелкает, чтобы изменить видео, консоль возвращает ошибку DOMException Uncaught (в обещании), где она указывает на код, где изменяется источник видео.
Ошибка может быть из-за непрерывного изменения источника видео, поскольку в этом источнике уже воспроизводится видео до его изменения.
С другой стороны, при каждом щелчке создается запрос обещания воспроизведения видео, который может быть прерван из-за непрерывного щелчка, поскольку запрос прерывается до его разрешения.
Я попытался очистить оба источника видео пустой строкой, но ошибка все еще генерируется.
// video source is getting changed which interrupts the promise and the error pointer
oppositeVideoElement.pause();
$(oppositeVideoElement).fadeOut(800, function () {
$(oppositeVideoElement).attr('src', nextVideoSource); // line where error points
});
// Play promise code which gets interrupted before resolve
function playPromiseForMobileVideo(videoElement, videoAboutToPlay) {
var playPromise = videoElement.play();
if (playPromise !== undefined) {
console.log(playPromise);
playPromise.then(
function () {
if (currentDevice == 'mobile' && mobileFirstTime) {
videoElement.pause();
mobileFirstTime = false;
}
}).catch(function (e) {
if(cameFromNetwork) {
videoElement.load();
videoElement.play();
cameFromNetwork = false;
return;
}
videoElement.pause();
$(videoElement).attr('src', videoAboutToPlay);
videoElement.load();
videoElement.play();
console.log('catch video Element', videoElement);
});
}
}
Ожидаемый результат: ошибка должна быть устранена, а зависшее обещание должно быть убито.
Фактический результат: генерируется ошибка, которая блокирует воспроизведение текущего видео.