C ++ 애드온의 'MediaStream'개체에서 오디오 데이터를 읽는 방법
피와 눈물을 흘린 후 마침내 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을 직접 컴파일하는 경우 이것이 좀 더 쉽고 / 가능하다는 것을 이해하지만, 유지 관리 지옥에 참여하지 않는 것이 좋습니다.
그렇게하지 않아도 가능할지 궁금해서 연구가 진행되는 한이 작업을 수행하려면 두 가지가 필요하다고 확신합니다.
- 블링크 공개 가 적절 하다고 생각하는 관련 헤더 파일
- node.dylib 파일과 유사하게 외부 기호를 해석하기위한 크롬 / 깜박임 라이브러리 파일 (?)
또한 내가 말했듯이 크롬 / 블링크를 직접 컴파일 할 수 있다고 믿고 나면이 lib 파일을 갖게 될 것이지만 Electron에서는 유지 관리가 지옥이 될 것입니다. 이를 염두에두고이 질문은 궁극적으로 C ++ 연결 질문으로 귀결된다고 생각합니다. 내가 찾고있는 것을 할 수있는 다른 접근 방법이 있습니까?
편집하다
ScriptProcessorNode는 성능으로 인해 프로덕션에서 거의 사용할 수 없기 때문에 제 경우에는 옵션이 아닙니다. 이를 위해서는 ui / main 스레드에서 오디오 샘플을 처리해야하는데, 이는 정말 미친 짓입니다.
MediaStream 헤더는 Blink의 렌더러 모듈 의 일부이며 nan 플러그인에서이를 검색 할 수있는 방법이 명확하지 않습니다.
그래서, 대신 당신은 무엇에서의 살펴 보자 않는 이, 즉 V8 :: 개체 . v8 :: Object가 필요한 모든 기능을 제공한다고 생각합니다.
- GetPropertyNames ()
- Get (컨텍스트, 인덱스)
- 설정 (컨텍스트, 키, 값)
- Has (컨텍스트, 키)
엄격하게 정의 된 인터페이스가 정말로 필요 하지 않다면 문제를 완전히 피하고 이미 가지고있는 동적 유형을 사용하는 것은 어떻습니까?
구체적으로 오디오 데이터를 가져 오려면 v8 :: Object에서 getAudioTracks () 를 호출해야합니다. 아마도 다음과 같이 보일 것입니다.
참고 : 컨텍스트가 필요하지 않다고 생각합니다. v8 은 비어있는 것에 만족하는 것 같습니다 : v8 / src / api / api.cc
다음과 같이 보일 것입니다. 그리고 v8 안팎에서 몇 가지 유형의 마사지를 받아야합니다.
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()();
}
'developer tip' 카테고리의 다른 글
UIImage 둥근 모서리 (0) | 2020.11.22 |
---|---|
지금까지 발견하고 수정 한 가장 어려운 버그는 무엇입니까? (0) | 2020.11.22 |
XCode 스토리 보드 병합 (0) | 2020.11.22 |
Safari 7 응용 프로그램 캐시가 작동하지 않습니다. (0) | 2020.11.22 |
Google App Engine을 사용할 때 유효하지 않거나 누락 된 SSL 인증서 (0) | 2020.11.22 |