Приложение для записи видео с вебкамеры на Amazon Web Services

Discussion in 'Общие вопросы' started by Mike, Mar 29, 2019.

  1. Mike

    Mike New Member

    Здравствуйте!
    У нашей команды стоит задача разработать приложение для проведения онлайн интервью. Соискатель заходит по ссылке, ему задают вопросы, а ответы записываются на вебкамеру, после чего видео сохраняется на AWS.

    Amazon Kinesis Video Streams умеет принимать видео через метод putMedia: https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_dataplane_PutMedia.html
    Также у них есть официальные продьюсеры на Java и C++. Родного продьюсера на JavaScript нет.
    https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/producer-sdk-cpp-gstreamer.html
    https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/producer-sdk-cpp-gstreamer-docker.html
    Эти продьюсеры [насколько я понял] могут получать видео из 1) статического файла 2) непосредственно с устройства вебкамеры 3) по rtsp://
    Нам подходит только вариант 3 (сохранять видео файл на сервере нельзя, доступа к USB нет).

    Видео из браузера можно передать двумя способами
    1) getUserMedia / mediaRecorder / XMLHttpRequest (поток нарезается на отрезки по 1 сек и отправляется методом POST)
    2) WebRTC

    Собственно вопрос, как организовать этот процесс.
    Вариант 1 - потребуется написать прокси на python, который будет получать поток через XHR POST и проксировать его на AWS. Вариант мне не очень нравится, так как использовать XHR для передачи видео кажется неправильным.
    Вариант 2 потребует какого-то решения на сервере, для которого потенциально может потребоваться ваш Web Call Server. То есть нужен некий сервер, который устанавливает webrtc соединение, принимает видеопоток и делает его доступным через rtsp:// (совместимость с продьюсером) и настроить сам продьюсер, чтобы он публиковал видео на AWS.

    У меня сложилось предварительное ощущение, что Web Call Server может решить эту задачу. Подскажите, стоит ли копать в этом направлении, и если да то как это решение будет выглядеть.

    Спасибо!

    PS: Напрашивается еще вариант отправлять WebRTC поток напрямую на AWS. Видел ваш сервер на https://aws.amazon.com/marketplace/pp/B01D1L5EAK , но не понимаю, подходит ли это решение.
    Last edited: Mar 29, 2019
  2. Max

    Max Administrator Staff Member

    Добрый день
    Если Amazon Kinesis Video Streams умеет принимать видеопоток по RTSP через продьюсер, можно оешить эту задачу следующим образом: опубликовать поток по WebRTC из браузера на Web Call Server (подробности есть в документации) и настроить продьюсер, чтобы он забирал видео с WCS по RTSP (в документации есть пример, как забрать видео по RTSP при помощи плеера). При необходимости, параметры RTSP-потока можно настроить при помощи файла SDP (в документации приведены настройки по умолчанию).
  3. Mike

    Mike New Member

    Спасибо, буду изучать!
    Очевидный недостаток такого метода в том, что весь видео трафик будет идти через мой сервер. Возможно ли публиковать видео напрямую в амазон? У вас есть приложение в их маркетплейсе. Не поможет ли оно в решении этой задачи?
    Last edited: Mar 29, 2019
  4. Max

    Max Administrator Staff Member

    Наш инстанс на Амазоне поможет в том плане, что его можно разместить в одном регионе с сервером, принимающим поток, тогда вносимые задержки и потери в качестве будут минимизированы.
    Трафик в этом случае действительно пойдет через сервер, но, если публиковать H264+opus и отдавать по RTSP H264+AAC, то будет транскодироваться только звук, и вычислительная нагрузка на сервер будет небольшой. Если получится отдавать H264+opus, то и транскодинга можно избежать.
    Что касается публикации напрямую, у AWS Kinesis есть свое JavaScript API, возможно, оно позволяет решить эту задачу.

Share This Page