В этой статье я обсуждал требования к технологии 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 МБ.
Теперь, разделив видео на более мелкие фрагменты аудио и видео, их легко отправить в браузеры, верно?
Теперь снова появляются более серьезные проблемы:
- Как разделить видео на более мелкие части?
- Как браузер узнает, какой номер фрагмента нужно выбрать, и как объединить фрагменты, чтобы сделать серию видеосцен в реальном времени?
Как разделить видео на более мелкие части?
Есть одна библиотека с открытым исходным кодом под названием Bento4, которая поможет вам в этом.
И никогда не забывайте о фрагментации вашего видео :)
Как браузер узнает, какой номер фрагмента нужно выбрать, и как объединить фрагменты, чтобы сделать серию видеосцен в реальном времени?
1. Запросы диапазона байтов
Браузер будет делать запросы байтового диапазона от имени медиа-элемента для буферизации содержимого.
Он отправит запрос с некоторыми конкретными заголовками, например Range: bytes = 0–100.
Затем сервер отправит вам такие заголовки ответа
- Content-Length: 1024
- Content-Range: 0–1023: 4096
Я написал небольшое ядро MSE (Media Source Engine), которое будет обрабатывать это:
Но у этой библиотеки также есть некоторые проблемы, потому что она работает с событиями, и постановка в очередь любого неправильного события с другой последовательностью приведет к сбою вашего видеоприложения, а вы этого не хотите.
- Эта библиотека не может работать в случае поиска различных отметок времени.
- Невозможно удалить наблюдаемые буферизованные фрагменты из источника мультимедиа, что займет больше памяти.
Это те немногие вещи, с которыми эта библиотека не справляется.
Писать все с нуля - кошмар, потому что я пытался, но ...
Существуют различные библиотеки с открытым исходным кодом, которые справляются со всем.
Shaka Player: этот проигрыватель поддерживает DASH и HLS - два конкурирующих формата для доставки видео через Интернет.
Почти все готово:
Библиотека Bento4 создает файл .mpd, содержащий информацию о разделенных фрагментах, которые будут проходить через проигрыватель Shaka. Плеер автоматически обнаружит информацию о видеофайле и последовательности их фрагментов.
Вы также должны поддерживать формат видео для мобильных, настольных и телевизионных устройств (1080p, 720p, 480p, 144p).
Резюме
- Преобразуйте все видеоформаты в mp4 (FFmpeg).
- Фрагментируйте видеофайл и разделите его на более мелкие части с помощью (Bento4).
- Bento4 предоставляет вам расширение MPD, файл устанавливает для него проигрыватель шака.
- Плеер Shaka теперь легко воспроизводит ваше видео.
Не забудьте посмотреть запросы сети, как все работает. Кроме того, используйте такие инструменты, как балансировщик нагрузки, уровень интернет-провайдера, кэширование, машинное обучение, чтобы спрогнозировать, какие следующие фрагменты будут извлечены ( Используется в Netflix)
Большое спасибо за чтение.
Дайте мне знать об этой статье в комментариях :)