Как читать аудио данные из объекта MediaStream в дополнении C ++

После пота крови и слез мне наконец-то удалось создать аддон Node C ++ и внедрить стандарт веб-платформы. MediaStream объект в один из его методов C ++ навсегда. Для совместимости между различными версиями V8 и Node.js я использую Нативные абстракции для Node.js (nan):

addon.cc

NAN_METHOD(SetStream)
{
Nan::HandleScope scope;
v8::Local<v8::Object> mediaStream = info[0]->ToObject();
}

addon.js

setStream(new MediaStream());

Для чего это стоит, это работает правильно (то есть не стирает процесс рендеринга сразу), и я могу проверить наличие MediaStream объект, например возвращая имя конструктора из метода C ++:

addon.cc

info.GetReturnValue().Set(mediaStream->GetConstructorName());

Когда вызывается из JavaScript через setStreamэто вернет строку MediaStream, поэтому объект определенно есть. Я также могу вернуть mediaStream сам объект, и все будет работать правильно, так что это действительно тот объект, который мне нужен.

Итак, как бы я прочитал аудио данные (то есть аудио образцы) из этого MediaStream объект в C ++? Как примечание, фактическое чтение данных (и обработка) будет сделано в отдельном std::thread,


Обновление Баунти

Я понимаю, что это было бы легче / возможно, если бы я сам собирал Electron и / или Chromium, но я бы предпочел не участвовать в этом адском обслуживании.

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

  1. Соответствующие заголовочные файлы, для которых я считаю моргать публике должно быть адекватным
  2. Файл библиотеки chromium / blink (?) Для разрешения внешних символов, аналогично файлу node.dylib

Кроме того, как я уже сказал, я считаю, что могу сам скомпилировать хром / моргание, и тогда у меня будет этот файл lib, но это будет адское обслуживание с Electron. Имея это в виду, я считаю, что этот вопрос в конечном итоге сводится к вопросу о связывании C ++. Есть ли другой способ сделать то, что я ищу?

редактировать

ScriptProcessorNode не подходит в моем случае, так как его производительность делает его практически непригодным для использования в производстве. Это потребует обработки аудиосэмплов в потоке пользовательского интерфейса / основного потока, что абсолютно безумно.

19

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …