首页 > 解决方案 > C ++媒体流的N-API连续回调

问题描述

我正在尝试为 C++ 媒体播放器创建节点接口。在解码帧后,有一个事件允许我访问帧数据,我正试图将其汇集到节点中。但我似乎无法弄清楚如何让这种功能与节点 api中可用的功能一起使用。目前,我的方法是找出一种推送机制,将数据从 c++ 获取到 javascript,我只需要在 javascript 中初始化回调,因为它看起来更优雅。如果失败,我可以在 js 中创建一个轮询循环来检查是否有新的帧数据,但它似乎效率较低。

我已经尝试使用napi_create_async_work,通过在执行参数函数中创建一个 lambda 函数,这将允许我为每个帧回调调用napi_make_callback,但随后出现以下错误:

Fatal error in HandleScope::HandleScope
Entering the V8 API without proper locking in place

我可能会错误地处理这个问题,这是我第一次使用 n-api。

欢迎任何帮助,谢谢!

标签: c++node.js

解决方案


该问题主要与您无法在事件循环的主线程之外访问 V8 (JavaScript) 内存有关。如果你正在创建一个异步线程,默认情况下你也会创建一个新的内存堆栈。

幸运的是,正在进行修复,它应该允许使用 napi_create_threadsafe_function进行线程安全访问(此处的示例)

在那之前,只有 一个头文件的 C++ 包,它与C++ N-API 包装器很好地集成在一起


推荐阅读