Можно ли отображать видео на сайте в низком разрешении без необходимости скачивания на диск?

Здравствуйте. <br/> <br/> У меня есть видео на хостинге с размерами 100 Мб в формате .mp4 и разрешением 1080p. Оно воспроизводится через тег video, и перед началом показа загружает 10–20% своего объема. <br/> <br/> Поскольку на смартфонах такое высокое разрешение не требуется, интересует, существует ли способ динамически изменять размер или разрешение видео во время воспроизведения без необходимости его сохранения на диск. <br/> <br/> Например, планирую показывать исходное видео в разрешении 1080p на десктопах, 720p на планшетах и 560p на смартфонах. 
  • 20 января 2025 г. 10:34
Ответы на вопрос 3
Да, вы можете динамически изменять разрешение видео на сайте, используя несколько подходов, чтобы избежать необходимости загрузки исходного видео в высоком разрешении на устройства с менее мощными ресурсами. Рассмотрим несколько вариантов:

### 1. Использование адаптивного потока (Adaptive Streaming)

Наиболее эффективный способ – это использование технологий адаптивного стриминга, таких как HLS (HTTP Live Streaming) или DASH (Dynamic Adaptive Streaming over HTTP). Эти технологии позволяют кодировать видео в разных разрешениях и битрейтах. В зависимости от скорости интернет-соединения и устройства, плеер автоматически выберет наиболее подходящий поток.

**Преимущества:**
- Автоматический выбор качества в зависимости от сети и устройства.
- Более эффективное использование пропускной способности.
  
**Недостатки:**
- Требуется дополнительная настройка и кодирование видео в нескольких разрешениях.
  
### 2. Использование `<source>` в теге `<video>`

Вы можете использовать тег `<video>` с несколькими источниками `<source>`, чтобы указать разные версии видео в разных разрешениях. Браузер будет загружать первый доступный источник.

```html
<video controls>
    <source src="video_1080p.mp4" type="video/mp4" media="(min-width: 1200px)">
    <source src="video_720p.mp4" type="video/mp4" media="(min-width: 768px)">
    <source src="video_560p.mp4" type="video/mp4" media="(max-width: 767px)">
    Ваш браузер не поддерживает video тег.
</video>
```

**Преимущества:**
- Простота реализации.
  
**Недостатки:**
- Пользователь все равно может загрузить видео с большим разрешением, если у него есть соответствующая настройка или устройство.

### 3. Использование JavaScript

Вы можете использовать JavaScript для определения устройства или разрешения экрана пользователя и динамически изменять источник видео.

```javascript
let videoElement = document.querySelector('video');
if (window.innerWidth < 768) {
    videoElement.src = 'video_560p.mp4';
} else if (window.innerWidth < 1200) {
    videoElement.src = 'video_720p.mp4';
} else {
    videoElement.src = 'video_1080p.mp4';
}
videoElement.load();
```

### Заключение

Для оптимального решения рекомендуем использование адаптивного стриминга, так как это позволит в автоматическом режиме управлять качеством видео в зависимости от условий сети и устройства. Если это слишком сложно реализовать, второй вариант с несколькими исходниками может быть хорошей альтернативой. But не забывайте, что второй метод не защищает от загрузки высокого разрешения для пользователей с быстрым интернетом.
Видео в любом случае должно быть кем то сконвертировано, перед отправкой клиенту, варианты: 
- Либо множество заранее подготовленных видео роликов с нужным качеством (ютуб так делает), потребуется сильно больше места на диске, но нагрузка на процессор будет сильно меньше + можно выбрать ночное время для обработки.
- Либо сервер, который будет конвертировать видео в реальном времени, но нагрузка на процессор будет сильно больше.
На хостинге есть видео. Размер видео 100 Мб.

Установите ffmpeg и просто базовым запросом перекодируйте в тот же размер что у вас есть. Удивитесь сокращению размера раза в два.

Видео запускается через тег video

Используйте библиотеки, типа videojs. они действительно имеют больше возможностей.

На смартфонах такое разрешение не нужно.

Настройки пользователя или конфиги пользователя в вашей системе.

К примеру, на десктопах показываем исходник = 1080, на планшетах = 720, на смартфонах = 560.

Изначально нужно закодировать. ffmpeg перегоняет очень быстро файлы в разные форматы на m1 макбуках (4x от изначального 1080 файла), думаю современные процессоры умеют так же.
В любом случае придется хранить все 3 версии, но тут нюанс -
576 - может весить 5-10мб
1080 - 20-30 мб
720 - около 15.

В итоге все 3 версии готовые - меньше вашего изначального файла. Продумайте им названия и внедрите в систему.
Похожие вопросы