Архитектура веб-приложения для добавления оверлеев к потоковому видео пользователей на Youtube?

Я пытаюсь создать веб-приложение, чтобы пользователи могли легко добавлять текст (в виде открытой подписи) и другие активы в мое приложение в виде наложений в режиме реального времени к своему видео в прямом эфире на YouTube.

Они будут использовать свою камеру для записи своего видео и выбирать в моем приложении, какой текст следует добавить к видео.

Затем видео будет отправлено на Youtube в прямом эфире через их API.

Вот мои вопросы:

Прежде всего, мне было интересно, можно ли смешивать видео + субтитры и отправлять их на URL-адрес rtmp Youtube со стороны клиента, поэтому это просто и легко.

Во-вторых, должен ли я кодировать вывод, отправляемый на Youtube? Можно ли это сделать и из браузера? Я вижу только несколько фреймворков node.js, и даже они не очень зрелые (или для этой цели нужны веб-кодеки?). Является ли веб-приложение плохим выбором для этой задачи?

Наконец, если мне нужен сервер для обработки видео, где должно происходить кодирование (с компьютера пользователя, на сервере или на обоих?)? Будет ли мой сервер, скорее всего, узким местом, учитывая инфраструктуру YouTube, поскольку видеофайлы огромны, а мой сервер ограничен?

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




Ответы (1)


Прежде всего, мне было интересно, можно ли смешивать видео + субтитры и отправлять их на URL-адрес rtmp Youtube со стороны клиента, поэтому это просто и легко.

Вы можете делать компоновку видео и микширование звука, а что нет, но браузеры не поддерживают RTMP. Чтобы получить данные на RTMP-сервер, вам нужно отправить их на сервер, где они проксируются на конечный URL-адрес.

Они будут использовать свою камеру для записи своего видео и выбирать в моем приложении, какой текст следует добавить к видео.

Да это вообще не проблема. Рисуйте все на холсте в каждом кадре.

Во-вторых, должен ли я кодировать вывод, отправляемый на Youtube?

Да, вы должны. Ознакомьтесь с API медиа-рекордера.

Наконец, если мне нужен сервер для обработки видео, где должно происходить кодирование (с компьютера пользователя, на сервере или на обоих?)?

Видео должно быть закодировано на стороне клиента, чтобы попасть на сервер в первую очередь. После этого сервер может просто переупаковать файл с помощью flv и отправить его вместе с файлом. Если браузер не поддерживает H.264 в своем API-интерфейсе Media Recorder, у вас будет промежуточный кодек, такой как VP8, и вам придется перекодировать на стороне сервера.

Несколько лет назад я написал туториал о том, как выполнить все эти шаги: https://github.com/fbsamples/Canvas-Streaming-Example Обратите внимание, что руководство находится в контексте Facebook, но это должно научить вас основным понятиям.

person Brad    schedule 29.05.2021
comment
Большое спасибо!! Могу я задать еще несколько вопросов? - person Eric Na; 30.05.2021
comment
1. Знаете ли вы, почему браузеры не поддерживают RTMP? Это относится и к HLS и DASH? (Очевидно, я не знаком с этим) - person Eric Na; 30.05.2021
comment
2. Вы сказали, что если клиент может выполнять рисование и кодирование, мой RTMP-сервер просто переупаковывает с помощью flv и отправляет его вместе с URL-адресом rtmp Youtube. Это дорогая операция? Передается много данных, поэтому я беспокоюсь, что стоимость сервера будет огромной, иначе мой сервер станет узким местом. - person Eric Na; 30.05.2021
comment
RTMP был протоколом для Flash-приложений и, по сути, мертвой технологией. Он по-прежнему широко используется для исходных потоков, потому что импульс. HLS и DASH — это просто группы файлов, отправляемых по HTTP, поэтому с протоколом все в порядке. Тут дело в упаковке. Мультиплексирование потоков в FLV очень легко влияет на ЦП вашего сервера, но внимание к пропускной способности все еще имеет место... Потоковое видео требует большой пропускной способности. Вы должны сделать математику, потому что это всего лишь один поток в/из... не должно быть проблемой. - person Brad; 30.05.2021
comment
Спасибо!! Что касается проблемы с пропускной способностью, мне действительно следует подумать об этом, поскольку данные пользователей, перенаправляемые с моего сервера на YouTube, будут огромными, если база пользователей вырастет. - person Eric Na; 30.05.2021
comment
У меня есть рабочая демонстрация того, что вы ищете, на record.a.video. Холст отправляется через сокет на сервер Node, который преобразуется в RTMP. Затем я загружаю видео на api.video (но YouTube тоже работает). Все, что вы рисуете на холсте, передается в потоковом режиме. - person Doug Sillars; 31.05.2021