В этой статье я обсуждал требования к технологии Netflix, YouTube или платформы потокового видео и аудио и основные функции (не требования AWS, Azure или других облачных провайдеров) о том, как вы можете создать приложение Netflix, которое будет работать на полную мощность. и эффективен с меньшими ресурсами.

ДАВАЙТЕ СДЕЛАТЬ NETFLIX

ВВЕДЕНИЕ В СТРИМОВЫЕ СМИ

Чтобы создать Netflix, вам понадобится видео! Конечно, вам понадобится видео : P

Но это видео не будет. mp4, только пользователи могут загружать любой видеоформат, это может быть тип. mov ( , используемый Apple ), .mkv и т. д. см. список доступных расширений видео, это может быть что угодно. Итак, вы должны заботиться о каждом формате расширения видео, загружаемом пользователями?

Нет, вам не нужно беспокоиться о разных форматах расширений видео, вам нужно просто преобразовать их все в один формат, который называется самым предпочтительным форматом .mp4 и поддерживается почти всеми современными браузерами.

Как вы конвертируете в формат .mp4? Теперь перекодирование вступает в игру!

ПЕРЕДАЧА

Как это сделать?

FFMPEG: это открытая библиотека с открытым исходным кодом, обрабатывающая видео, аудио и другие мультимедийные файлы и потоки.



Эта библиотека поможет вам достичь всего, просто просмотрите документацию.

Я создал js-код узла обработки видео. Он включает в себя функцию преобразования разных форматов в один формат, для получения небольшого предварительного просмотра видео в формате GIF, эскизов и т. Д.

Вы можете написать этот код FFmpeg на таком языке, как Golang, для гораздо большей производительности.

Но проблема в том, как вы будете обрабатывать все видео, загруженные минимум 100 пользователями одновременно?

Поскольку обработка видео - это задача, требующая много времени и ресурсов, она может занять от 5 до 40 минут или, может быть, больше, мы не знаем.

И выполнение для разных пользователей с использованием сигнальной машины невозможно, это приведет к сбою вашего сервера. Итак, как это сделать?

Поместите этот код обработки в AWS Lambda, он поможет вам добиться параллельной обработки без очереди. Это простое и эффективное решение.

Сообщите мне свои решения!

Что дальше?

Кодеки - это способ представления или кодирования мультимедийных данных. Некоторые кодеки работают с потерями, как MP3, некоторые - без потерь, как FLAC.

Теперь у вас есть видеофайл mp4, который, похоже, легко показать клиентам, не так ли?

Просто используйте HTML-элемент видео и установите исходный URL-адрес видеофайла.



Выглядит просто, правда? Но это не так: P

Это будет работать для пользователей 1,2,3… 20, после чего ваш сервер станет медленным и горячим, а через некоторое время он выйдет из строя из-за нагрузки на сервер.

Вы должны думать о пропускной способности и задержке.

В этом случае HTML-элемент видео пытается получить файлы сразу, размер которых может составлять 10 МБ, 100 МБ, 1000 МБ. Я думаю, вы правильно поняли проблему?

Проблемы: буферизация, проблемы с памятью браузера, задержка при получении файла и т. д.

Как решить эти большие проблемы с видеофайлами? Как эффективно отправить их в браузер или клиент?

Сообщите мне свои решения!

Сделайте его маленьким

1000 МБ видеофайла в 2 (видео и аудио) * 1000 * 1 МБ = 2000 файлов 1 МБ.

Теперь, разделив видео на более мелкие фрагменты аудио и видео, их легко отправить в браузеры, верно?

Теперь снова появляются более серьезные проблемы:

  1. Как разделить видео на более мелкие части?
  2. Как браузер узнает, какой номер фрагмента нужно выбрать, и как объединить фрагменты, чтобы сделать серию видеосцен в реальном времени?

Как разделить видео на более мелкие части?

Есть одна библиотека с открытым исходным кодом под названием Bento4, которая поможет вам в этом.



И никогда не забывайте о фрагментации вашего видео :)



Как браузер узнает, какой номер фрагмента нужно выбрать, и как объединить фрагменты, чтобы сделать серию видеосцен в реальном времени?

1. Запросы диапазона байтов

Браузер будет делать запросы байтового диапазона от имени медиа-элемента для буферизации содержимого.

Он отправит запрос с некоторыми конкретными заголовками, например Range: bytes = 0–100.

Затем сервер отправит вам такие заголовки ответа

  • Content-Length: 1024
  • Content-Range: 0–1023: 4096

Я написал небольшое ядро ​​MSE (Media Source Engine), которое будет обрабатывать это:

Но у этой библиотеки также есть некоторые проблемы, потому что она работает с событиями, и постановка в очередь любого неправильного события с другой последовательностью приведет к сбою вашего видеоприложения, а вы этого не хотите.

  1. Эта библиотека не может работать в случае поиска различных отметок времени.
  2. Невозможно удалить наблюдаемые буферизованные фрагменты из источника мультимедиа, что займет больше памяти.

Это те немногие вещи, с которыми эта библиотека не справляется.

Писать все с нуля - кошмар, потому что я пытался, но ...

Существуют различные библиотеки с открытым исходным кодом, которые справляются со всем.

Shaka Player: этот проигрыватель поддерживает DASH и HLS - два конкурирующих формата для доставки видео через Интернет.







Почти все готово:

Библиотека Bento4 создает файл .mpd, содержащий информацию о разделенных фрагментах, которые будут проходить через проигрыватель Shaka. Плеер автоматически обнаружит информацию о видеофайле и последовательности их фрагментов.

Вы также должны поддерживать формат видео для мобильных, настольных и телевизионных устройств (1080p, 720p, 480p, 144p).

Резюме

  1. Преобразуйте все видеоформаты в mp4 (FFmpeg).
  2. Фрагментируйте видеофайл и разделите его на более мелкие части с помощью (Bento4).
  3. Bento4 предоставляет вам расширение MPD, файл устанавливает для него проигрыватель шака.
  4. Плеер Shaka теперь легко воспроизводит ваше видео.

Не забудьте посмотреть запросы сети, как все работает. Кроме того, используйте такие инструменты, как балансировщик нагрузки, уровень интернет-провайдера, кэширование, машинное обучение, чтобы спрогнозировать, какие следующие фрагменты будут извлечены ( Используется в Netflix)

Большое спасибо за чтение.

Дайте мне знать об этой статье в комментариях :)