После приостановки медиа-элемента HTML браузер продолжает загружать медиа.
MDN описывает, как можно остановить загрузку, удалив атрибут src
медиа-элемента и вызвав HTMLMediaElement.load()
: MDN - остановка загрузки мультимедиа .
В Safari этого недостаточно для остановки загрузки мультимедиа.На вкладке Сеть веб-инспектора видно, что передача продолжается.Это несмотря на то, что метод load()
поддерживается и соответствующие события отправляются при его вызове.(См. MDN .)
Используя следующий пример и отслеживая сеть, вы увидите, что поведение в Safari отличается от поведения в Chrome, например.
<audio
controls preload="none" type="audio/mpeg"
src="http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio1_mf_p"
/>
<script>
const mediaEl = document.querySelector('audio');
mediaEl.addEventListener('abort', (e) => {
console.log('abort', e.target);
});
mediaEl.addEventListener('emptied', (e) => {
console.log('emptied', e.target);
});
mediaEl.addEventListener('pause', (e) => {
e.target.removeAttribute('src');
e.target.load();
});
</script>
Удаление медиа-элемента из DOM также недостаточно для остановки загрузки.
mediaEl.addEventListener('pause', (e) => {
e.target.parentNode.removeChild(e.target);
});
Есть ли способ обойти эту проблему в Safari и остановить загрузку, инициированную медиа-элементом?
Мой вариант использования включает аудиопоток.Я не хочу, чтобы браузер продолжал буферизацию после того, как пользователь остановил воспроизведение.