Это скорее концептуальный вопрос, чем прямой "как это сделать".
Как правило, возможно реализовать флеш-подобное решение для потоковой передачи звука (независимо от того, откуда мы получаем данные потока из, например, 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 (вид нечетного имени), который делает вроде того, чего мы, вероятно, захотим. Кто-нибудь работает с таким пакетом?