Подтвердить что ты не робот

Медиа-сервер NodeJS и RED 5 через RTMP

Это скорее концептуальный вопрос, чем прямой "как это сделать".

Как правило, возможно реализовать флеш-подобное решение для потоковой передачи звука (независимо от того, откуда мы получаем данные потока из, например, webRTC или другого) в HTML5 и nodeJS/binaryJS. Если да, как бы вы это сделали?

В stackoverflow был найден только один объект и его с 2010 года. NodeJS и HTML5 выросли и созрели с тех пор.

Что люди обычно делают: При использовании потоковой передачи мультимедиа (например, видео или аудио) на сервер, безусловно, ничего, что бьет Flash в текущий момент времени до полного прибытия getUserMedia ( ), который, честно говоря, может потратить некоторое время, пока 99% пользователей браузера не смогут использовать его вообще.

Общей практикой для передачи данных на сервер является использование клиентского приложения Flash или Flex, которое затем подключается к серверу с питанием от протокола RTMP, например RED5, FMS или Wowza. Например, клиентское приложение, отправляющее микрофонный ввод через RTMP, может выглядеть (упрощенная версия)

import flash.net.NetStream;

private var myMic:Microphone;
private var nc:NetConnection;
private var ns:NetStream

nc = new NetConnection();    
ns = new NetStream(nc);
nc.connect(rtmp://localhost/serverApp);
myMic = Microphone.getMicrophone();
ns.attachAudio(myMic);

Вместе с серверным приложением можно легко передавать данные на сервер.

Что я хотел бы сделать: У сервера приложений, работающего на nodeJS (возможно, реализуя socketIO и binaryJS), который захватывает входящий RTMP-поток. Что-то вроде

//require
var rtmp = require('node-rtmp'),
var fs = require('fs');

//rtmp server address
var rtmpServer = 'rtmp://localhost';

//create a binary server listening that receives stream data
var RTMPServer = rtmp.RTMPServer();
var server = RTMPServer ({port: 1935});

server.on('connection', function(client){
 //check if user is allowed to do so
 rtmp.newStream(client.stream);
});

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

В чем могут быть преимущества:. Вообще говоря, это кажется немного накладным, чтобы сделать такой подход, но для меня могут быть преимущества, и я также хотел бы, чтобы вы прокомментировали это.

  • простая проверка взаимодействия пользователя путем запуска, например. express и socketIO
  • гибридная реализация флэш-памяти (через RTMP) и getUserMedia() (через двоичные механизмы транспорта путем добавления бинарных JS и Mozilla AudioAPI)
  • если getUserMedia() полностью поддерживается, реализации Flash могут быть легко удалены.
  • больше контроля над выполнением rtmp и взаимодействия с пользователем вообще
  • упрощенная реализация в инфраструктуре сервера.

UPDATE: Я говорил с г-ном Малконтенти-Уилсоном, который отвечает за только node -rtmp package, который был написан, но прекращен 8 месяцев назад поскольку он был плохо написан, и он попал в блокпост. Кто-нибудь, кто использовал это или смог проверить код?

ОБНОВЛЕНИЕ 2: Г-н Malcontenti-Wilson просто пришлю мне письмо, чтобы привлечь внимание к node -mtrude (вид нечетного имени), который делает вроде того, чего мы, вероятно, захотим. Кто-нибудь работает с таким пакетом?

4b9b3361

Ответ 1

Да, это возможно, но у вас есть несколько проблем.

1) Red5 ужасно недооценен и ошибочен.

2) rtmpe/rtmps

3) производительность/масштабируемость

4) 1 - 3 - это вещи, которые вы можете преодолеть, но не слишком хорошо знакомы с распространением средств массовой информации и всеми связанными с ними проблемами. Когда вы закончите, вы станете одним из 800 человек, которые действительно это понимают. Вам придется идти по длинному пути решения неожиданных проблем.

Ответ 2

В настоящее время существует платформа, называемая vertx, где возможно создание полигонов. Таким образом, красная банка может быть включена на вашей серверной стороне с существующим кодом и может запускать потоковый сервер rtmp. На стороне клиента вы можете иметь что-то вроде video.js или JW-плеера, чтобы воспроизвести поток обратно и получить политику возврата флеш-памяти. Публикация на стороне клиента, я не уверен, что есть какая-либо реализация RTMP на основе javascript или нет.

Ответ 3

WCS - это гибридная реализация для Flash, WebRTC, SIP, Websockets и Wowza-совместимых протоколов: RTSP, RTMP.

Схема преобразования потока: введите описание изображения здесь