Javascript 如何从';MediaStream&x27;C++;插件 汗水和眼泪之后,我终于成功地建立了一个节点C++ +的Adon,并把一个Web平台标准“代码> MistaReaMe//Cord>Objes”作为一个C++方法。为了兼容不同的V8和Node.js版本,我使用了:
addon.ccJavascript 如何从';MediaStream&x27;C++;插件 汗水和眼泪之后,我终于成功地建立了一个节点C++ +的Adon,并把一个Web平台标准“代码> MistaReaMe//Cord>Objes”作为一个C++方法。为了兼容不同的V8和Node.js版本,我使用了:,javascript,c++,electron,v8,blink,Javascript,C++,Electron,V8,Blink,addon.cc NAN_METHOD(SetStream) { Nan::HandleScope scope; v8::Local<v8::Object> mediaStream = info[0]->ToObject(); } info.GetReturnValue().Set(mediaStream->GetConstructorName()); 对于它的价值,它是正确的(即它不会抹去渲染器进程在视线中),并且我可以验证“代码>媒体纵横> 对象的
NAN_METHOD(SetStream)
{
Nan::HandleScope scope;
v8::Local<v8::Object> mediaStream = info[0]->ToObject();
}
info.GetReturnValue().Set(mediaStream->GetConstructorName());
对于它的价值,它是正确的(即它不会抹去渲染器进程在视线中),并且我可以验证“代码>媒体纵横> <代码>对象的存在,例如通过从C++方法返回它的构造函数名称:
addon.ccNAN_METHOD(SetStream)
{
Nan::HandleScope scope;
v8::Local<v8::Object> mediaStream = info[0]->ToObject();
}
info.GetReturnValue().Set(mediaStream->GetConstructorName());
当通过setStream
从JavaScript调用时,将返回字符串MediaStream
,因此对象肯定在那里。我还可以返回mediaStream
对象本身,一切都将正常工作,因此它确实是我需要的对象
< > >强> >我如何从C++中的“代码”> MistaReaMe//Cord>对象读取音频数据(即音频样本)?作为一个旁侧,实际数据读取(和处理)将在单独的<代码> STD::线程< /代码>中执行。
赏金更新 我知道,如果我自己编译Electron和/或Chromium,这会比较容易/可能,但我不想卷入维护的地狱 我想知道如果不这样做是否可能,就我的研究而言,我确信我需要两件事来完成这件事:
如果有人想继续写一个基于AudioWorklet的答案,我很乐意接受,但请注意:这是一个非常先进的领域,是一个非常深的兔子洞,甚至在一个非常简单、通用的穿越原型出现之前,就有无数的障碍要通过(尤其是因为目前在电子中,Atomics同步,缓冲的跨线程音频处理是需要的,因为尽管将本地C++的ADON变成一个音频渲染器线程,更不用说多个线程同时,可能同样具有挑战性)。.MediaStream头是Blink的一部分,我不清楚如何从nan插件中检索它 因此,让我们来看看您拥有什么,即。我相信v8::Object公开了您需要的所有功能,它具有:
- GetPropertyNames()
- 获取(上下文、索引)
- 设置(上下文、键、值)
- Has(上下文、键)
v8::MaybeLocal<v8::Value> get_audio_tracks = mediaStream->Get("getAudioTracks");
// Maybe needs to be v8::Object or array?
if (!get_audio_tracks.IsEmpty()) {
v8::Local<v8::Value> audio_tracks = get_audio_tracks.ToLocalChecked()();
}
v8::MaybeLocal get_audio_tracks=mediaStream->get(“getAudioTracks”);
//可能需要是v8::对象还是数组?
如果(!get_audio_tracks.IsEmpty()){
v8::Local audio_tracks=获取_audio_tracks.ToLocalChecked();
}
我不明白你的问题。但你可以检查这两个:…@nullqube我一直在检查WebRTC的这个任务,但它似乎是流原始的,未压缩的音频。如果可能的话,我可以简单地启动一个新的电子窗口进程,在那里流音频,在那个单独的窗口进程中进行基于ScriptProcessorNode的处理s、 但总是有大量有损压缩硬编码到WebRTC,以及非常高的延迟。这有帮助吗?您是否尝试在JavaScript端使用WebWorker
将您的工作转移到“后台线程”中如果你能知道你的电子或铬版本的眨眼引擎版本,那么你可以在媒体流中添加一个音频路径C++的源。我目前还没有测试过,但是几个月后我会。并发布更详细的答案:)