Есть данный код:
function getVideoFromServer() {
socket.on('video', video => {
let blob = new Blob([video.video], {
type: 'video/webm; codecs=\"vp8, opus\"'
});
let url = URL.createObjectURL(blob);
videoTag.src = url;
});
}
Первый раз URL создаётся и декодируется нормально, но второй раз выдаёт предупреждение: "Не удаётся декодировать медиаресурс"
Потому что при создании URL.createObjectURL выделяется сегмент памяти для созданного объекта, эту память для каждого такого объекта нужно высвобождать, делается это при помощи URL.revokeObjectURL.
Я бы сделал такую фабрику:
const createVideoFromServerGetter = () => {
let url;
return () => {
if (url) {
window.URL.revokeObjectURL(url);
}
socket.on('video', video => {
let blob = new Blob([video.video], {
type: 'video/webm; codecs=\"vp8, opus\"'
});
url = window.URL.createObjectURL(blob);
videoTag.src = url;
});
};
};
const getVideoFromServer = createVideoFromServerGetter();
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Существуют много способов глубокого копирования, подскажите, что на данный момент является наиболее производительным при копировании объектов...
Столкнулся с проблемой циклаНе могу понять как написать его правильно
Есть SVG карта созданная на RaphaelКак можно анимировать маршрут между двумя кликами на карте, как например здесь