Разные проекты на Python Django./ Сервис для видео-трансляций.

Теги: python video

Сервис для видео-трансляций.

Задача.

Необходимо создать сервис, с помощью которого можно было бы внедрить в любой веб-сайт механизм трансляции видеопотока с веб-камеры одного пользователя на страницу другого. Минимальная конфигурация включает передачу одного потока peer-to-peer одному клиенту. Максимальная - включает возможность передачи одного потока многим клиентам. При этом возникает необходимость в дополнительных затратах на медиа-сервер.

Трансляция проводится по протоколу WebRTC.

Сервис необходимо создать наиболее независимым от той технологии, на которой пострен целевой веб-сайт.

Для этого его необходимо реализовывать в виде микросервиса со своим REST API.

Данный сервис может быть расположен на собственном сервере и домене и обслуживать неограниченное количество сайтов.

На целевой сайт будет внедрятся внешний js скрипт, который будет взаимодействовать с сервером по пролоколу HTTP и Web-сокетам.

При этом на сайте необходимо провести минимальные изменения на страницах, требующих видеотрансляцию:

  • включить js скрипт в html

  • добавить кнопки вызова камеры для транслирующего и для принимающего абонента

  • передать идентификаторы абонентов в элементы кнопок

Дальнейшие действия будут делегированы включаемому js скрипту и проводится независимо от логики работы сайта.

Сервис будет реализован с применением следующих технологий.

  • Python

  • Django channels

  • Django Rest Framework

  • WebRTC

Порядок работы видео соединения.

  1. Для того, чтобы начать трансляцию видеопотока пользователь кликает на кнопку “Начать трансляцию” на своей странице.

  2. После клика, на сервис отправляется идентификатор пользователя и он заносится в базу данных.

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

  4. После согласия на сервер отправляется уведомление о том, что у данного пользователя активирована веб-камера и далее создается постоянное веб-сокет соединение с сервисом. Попутно на странице профиля пользователя появляется кнопка для подключения и просмотра его потока другими.

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

  6. По сокет-соединению передается запрос транслирующему на согласие или отказ.

  7. После согласия происходит обмен сообщениями между двумя сторонами по протоколу WebRTC в результате которого создается peer-to-peer соединение между двумя браузерами и начинается трансляция видеопотока.

  8. При трансляции на сервер отсылаются периодические уведомления для учета времени трансляции.

Задать вопрос, прокомментировать.