WebRTC и gstreamer на устройстве linux

У меня есть небольшой компьютер (что-то вроде Arduino или Raspberry pi) с установленными на нем Linux, камера и gstreamer. Мне нужно передать h264 видео с этого устройства в браузер с помощью технологии WebRTC. Кроме того, я использую NodeJS в качестве сервера сигнализации.

Простыми словами, мне нужно сделать клиент WebRTC с моего устройства. Каков наилучший способ сделать это? Могу ли я использовать API-интерфейс WebRTC Native API для этой цели? Как я могу установить его на моем маленьком устройстве? Или, может быть, мне просто нужно играть с моим gstreamer и установить для него некоторые плагины webrtc?

Ответ 1

Так как вам все равно придется использовать сервер сигнализации, я бы сказал, что вы должны использовать Janus-Gateway. Вы упоминаете CentOS для вашего сервера сигнализации, я не 100%, если он будет работать на CentOS, но я успешно его запускал в сборке Debian Jessie с помощью нескольких установок зависимостей.

Janus обрабатывает весь вызов, настроенный со шлюзом (сигнализация и все). Таким образом, возможно, потребуется выполнить некоторую переадресацию портов, чтобы обмен SDP мог произойти (о чем вам придется беспокоиться с любого сервера сигнализации).

  • Установите шлюз, есть несколько зависимостей, но все было просто установки

  • Взгляните на плагин janus_streaming. Он имеет пример gstreamer, который будет передаваться из конвейера gstreamer. Кроме того, демонстрационная страница streamingtest, чтобы увидеть, как работает Javascript API для этого плагина

  • Плагин прослушивает эти порты, указанные в файле конфигурации, и принимает трафик с любого IP-адреса. Итак, я ожидаю, что вы можете запустить конвейер gstreamer на другом компьютере в той же сети и отправить его в плагин.

ПРИМЕЧАНИЕ. Вам нужно будет изменить SDP, который JavaScipt отправит на шлюз, чтобы он включал H264 (возможно, избавиться от всех других кодеков, а просто для принудительного согласования). Вы можете сделать это, обратившись к sdp через объект jsep, переданный в случай успеха для функции createOffer в JavaScript-API janus (jsep.sdp).

Ответ 2

Еще одна возможность для вас - использовать Kurento Media Server (KMS), который был написан поверх GStreamer. Я вижу две возможности

  • Вы устанавливаете KMS в ящик Ubuntu 14.04 и мост с вашим устройством, чтобы устройство генерировало видеопоток и отправило его в поле KMS. Исходя из этого, вы можете перекодировать его на VP9 и легко распространять его как поток WebRTC с использованием клиентских API-интерфейсов kurento (которые могут использоваться из Node.js). Для приложения, выполняющего перекодировку, требуется RtpEndpoint (получение видеоформы с устройством в RTP/H.264), подключенное к WebRtcEndpoint (способное передавать видеопоток через WebRTC). Этот вариант довольно прост для реализации, поскольку он является стандартным способом использования KMS. Однако вам нужно будет генерировать поток RTP/H.264 на устройстве и соответствующий SDP для него (это можно сделать с помощью стандартных элементов GStreamer).
  • Вы пытаетесь напрямую установить KMS в свою коробку. Это может быть более сложным, поскольку требует компиляции KMS на конкретное устройство, что может потребовать некоторого времени на инвестиции. Кроме того, выполнение транскодирования в устройстве может быть слишком дорогостоящим, и вы можете голодать на его CPU.

Отказ от ответственности: я являюсь членом команды разработчиков Kurento.

Ответ 3

Вы упомянули, что вы использовали сервер сигнализации NodeJS. Недавно Ericsson выпустила элемент gstreamer с открытым исходным кодом WebRTC: http://www.openwebrtc.io/, и вместе с их выпуском они также опубликовали демо-версию WebRTC, используя node.js: http://demo.openwebrtc.io:38080/; код здесь: https://github.com/EricssonResearch/openwebrtc-examples/tree/master/server.

Ответ 4

Для WebRTC для малины Pi 2 вы можете рассмотреть UV4L. Он позволяет передавать потоковое аудио и видео с Rpi на любой браузер на ПК (HTML5).