Для кращого стрімінгу відео в I2P (тобто відтворення файлу, який вже був завантажений на сайт, без завантаження користувачем) мені допомогло наступне: Високоякісне стиснення; Зменшення кількості тунелів до 2 (двох) без резервних тунелів; Можливо, велика кількість транзитного трафіку на маршрутизаторі також допомагає.
Щоб відновити відтворення під час буферизації, мені потенційно допомогли такі методи: очікування; увімкнення та вимкнення паузи та повноекранного режиму; перемотування відео назад. Сервіс стиснення
https://hdconvert.com/en/compress_video_online.html .
Як запропонував ChatGPT (тобто це не я придумав код), щоб не було повного відвалу відтворення, можна використовувати такий код. Однак відновлення може бути тривалим
<script>
function attachRetry(video) {
let retryCount = 0;
const MAX_RETRIES = 5;
let started = false;
function tryPlay() {
video.play().catch(() => {});
}
function recover() {
if (retryCount >= MAX_RETRIES) return;
retryCount++;
const time = video.currentTime;
// НЕ використовуємо load() одразу
// тільки пробуємо відновити відтворення
setTimeout(() => {
if (video.readyState >= 2) {
video.currentTime = time;
tryPlay();
}
}, 500);
}
// фіксуємо момент, коли відео реально почало життя
video.addEventListener("timeupdate", () => {
if (!started && video.currentTime >= 0.1) {
started = true;
}
});
// НЕ реагуємо на buffering до 6 секунд
video.addEventListener("waiting", () => {
if (!started) return;
if (video.currentTime < 6) return;
// тільки легка перевірка, без reload
setTimeout(() => {
if (video.readyState < 2) {
recover();
}
}, 2000);
});
// реальна помилка → відновлення
video.addEventListener("error", () => {
if (video.currentTime < 6) return;
recover();
});
video.addEventListener("stalled", () => {
if (video.currentTime < 6) return;
recover();
});
}
attachRetry(document.getElementById("video1"));
attachRetry(document.getElementById("video2"));
</script>
http://7knrms2wnpgr2pwp4nkctfvy5vzmudqaihdm2qjrxvxstczowr5q.b32.i2p/cat-video-7655.htmlНе знаю, що буде при спробі одночасного відтворення відео не одним користувачем