После пота крови и слез мне наконец-то удалось создать аддон 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 вещи, чтобы сделать это:
Кроме того, как я уже сказал, я считаю, что могу сам скомпилировать хром / моргание, и тогда у меня будет этот файл lib, но это будет адское обслуживание с Electron. Имея это в виду, я считаю, что этот вопрос в конечном итоге сводится к вопросу о связывании C ++. Есть ли другой способ сделать то, что я ищу?
ScriptProcessorNode не подходит в моем случае, так как его производительность делает его практически непригодным для использования в производстве. Это потребует обработки аудиосэмплов в потоке пользовательского интерфейса / основного потока, что абсолютно безумно.
Задача ещё не решена.
Других решений пока нет …