用于 c++ 媒体流的 N-API 连续回调

N-API Continuous callbacks for c++ media stream

本文关键字:N-API 连续 回调 c++ 媒体 用于      更新时间:2023-10-16

我正在尝试为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。

欢迎任何帮助,谢谢!

这个问题主要与你不能在事件循环的主线程之外访问V8(JavaScript(内存有关。如果要创建异步线程,则默认情况下还会创建新的内存堆栈。

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

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

Napi-addon-api 是更新的。这些是使用 Napi::ThreadSafeFunction 的好方法。 文档和示例。