在nodejs addon 环境下抓视频和音频数据包

news2024/11/25 20:44:08

在node addon 环境下开发音视频,需要用到 gyp 。这个配置比较简单,很快可以配置好。比较坑的是,在vscode 开发环境下, 如果装了conda 或者 mini conda .   有可能会影响gpy程序的编译。谨慎起见,可以看看控制台是否有 (conda base)环境启动, 可以想办法先脱离 conda 环境。

 废话不说直接上代码:

const lib = require('./build/Release/Decode.node')
// utils
function sleep(t) {
    var start = new Date().getTime();
    while (true) {
        if (new Date().getTime() - start > t) {
            break;
        }
    }
}

function doSomething() {
    for (let i = 0; i < 10; i++) {
        sleep(500)
        console.log('current time in node,', new Date().getTime());
    }
}


//========================================================================================
//                          Example OF Grabbing VIDEO and AUDIO
//========================================================================================
//step 1: init the lib
lib.Open()

//step 2: set callbacks here, we support 'Video', 'Audio', 'Error' 3 msg types.
lib.On('Video', (frame)=>{
    console.log('#Video format=',frame.format);
    console.log('#Video width=',frame.width);
    console.log('#Video height=',frame.height);
    console.log('#Video size=',frame.size);
    // console.log(frame.data);
})
lib.On('Audio', (frame)=>{
    console.log('#Audio format=',frame.format);
    console.log('#Audio rate=',frame.rate);
    console.log('#Audio size=',frame.size);
    // console.log(frame.data);
})
lib.On('Error', (msg)=>{
    console.log('#5',msg);    
})
//step 3: set uri, and begin to grab video and audio frames
lib.SetUri('https://sf1-hscdn-tos.pstatp.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv');  // can change to your own rtmp 

//step 4: you can your own work 
doSomething();

//step 5: finish
lib.Close()

该代码的运行环境为ubuntu , 目前不支持windows系统, 如果需要windows版本, 可联系作者。

首先, 导入 node 扩展程序。

第一步,初始化lib .  调用 Open 函数。

第二步, 注册回调函数, 流媒体程序一般采用多线程解码,当底层解码完数据帧后,调用JS端的回调来处理。 这里暂时支持三种类型的回调,即“Video”, "Audio", 和"Error"。 当底层解码一个完整的数据帧时候,调用 Video , Audio 类型的回调。 当底层发生错误时候,调用JS端的Error 类型回调。

第三步,指定解码的URI,  支持 HTTP   RTSP  RTMP 等。

第四步, 你可以运行自己的工作, 因为底层自己开发了线程处理数据流的接受和解码。并不会阻塞JS端的运行。

最后, 可以关闭LIB的功能,释放资源。

完整代码我已经发布在github上。

GitHub - enigma19971/va-nodejs-addon: grab video and audio frames in nodejs addon envgrab video and audio frames in nodejs addon env. Contribute to enigma19971/va-nodejs-addon development by creating an account on GitHub.https://github.com/enigma19971/va-nodejs-addon.git

注意, 本项目基于gstreamer , 如果提示找不到各类  plugin .   请自行安装gstreamer. 

sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/608612.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

好物周刊#2:AI 写作助手

不要哀求&#xff0c;学会争取。若是如此&#xff0c;终有所获。 &#x1f388; 项目 vue-fabric-editor 基于 fabric.js 和 Vue 的图片编辑器&#xff0c;可自定义字体、素材、设计模板。 目前已支持以下功能&#xff1a; 导入 JSON 文件保存为 PNG、SVG、JSON 文件插入 S…

我与 INDCODE AI 创作助手的一次对话

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 我与INDCODE AI 创作助手的一次对话 &#x1f9ca;摘要&#x1f9ca;前言&#x1f9ca;对话内容&#x1f9ca;结束语 &#x1f9ca;摘要 本文介绍了 CSDN 嵌入式INSCODE AI 创作助手…

msvcr120.dll丢失怎样修复

MSVCR120.dll是Windows操作系统上一个非常重要的动态链接库文件&#xff0c;它包含了一些运行时库函数&#xff0c;被许多应用程序用来进行编译和运行。如果该文件丢失或损坏&#xff0c;很多应用程序就无法正常运行&#xff0c;这可能会带来一些麻烦。本篇文章将详细介绍MSVCR…

FAT32文件系统详解

FAT32文件系统详细分析 &#xff08;续FAT文件系统详解&#xff09; 文章目录 FAT32文件系统详细分析 &#xff08;续FAT文件系统详解&#xff09;1. 前言2. 格式化SD nand/SD卡3. FAT32文件系统分析3.1 保留区分析3.1.1 BPB(BIOS Parameter Block) 及BS区分析3.1.2 FSInfo 结构…

SpringCloud_微服务基础day1(走进微服务,认识springcloud,微服务(图书管理)项目搭建(一))

官方网站&#xff1a;柏码 - 让每一行代码都闪耀智慧的光芒&#xff01; (itbaima.net) p1:前言&#xff0c;走进微服务 注意&#xff1a;此阶段学习推荐的电脑配置&#xff0c;至少配备4核心CPU&#xff08;主频3.0Ghz以上&#xff09;16GB内存&#xff0c;否则卡到你怀疑人生…

【CH32V】CH32V307驱动4P_OLED

前言 手上正好有 CH32V307 的板子就耍耍&#xff0c;网上4P的OLED例程也不少 4P OLED 屏驱动例程。在加上一些 STM32 标准库的知识&#xff0c;改改引脚定义&#xff0c;就可以将 OLED 屏连接到板子上进行显示了。当然&#xff0c;我也将会分享我整理好的库文件代码和完整的工程…

【22】SCI易中期刊推荐——计算机 | 人工智能(中科院4区)

🍀🍀>>>【YOLO魔法搭配&论文投稿咨询】<<<🍀🍀 ✨✨>>>学习交流 | 温澜潮生 | 合作共赢 | 共同进步<<<✨✨ 📚📚>>>人工智能 | 计算机视觉 | 深度学习Tricks | 第一时间送达<<<📚📚 🚀🚀🚀…

【java 基础二 】- 面向对象、类、接口等

一、定义 Java面向对象编程(OOP)是一种编程范式&#xff0c;其旨在通过将程序逻辑封装在对象中来使代码更易于理解和维护。Java是一种面向对象的编程语言&#xff0c;它支持封装、继承和多态等概念。以下是Java面向对象编程的核心概念&#xff1a; 对象(Object)&#xff1a;对…

BM7 算法

描述 给一个长度为n链表&#xff0c;若其中包含环&#xff0c;请找出该链表的环的入口结点&#xff0c;否则&#xff0c;返回null。 数据范围&#xff1a; n≤10000n≤10000&#xff0c;1<结点值<100001<结点值<10000 要求&#xff1a;空间复杂度 O(1)O(1)&#x…

Linux进程间通信——管道,共享内存,消息队列,信号量

进程间通信 文章目录 进程间通信进程间通信的方式进程间通信的概念如何实现进程间通信管道什么是管道 进程间怎么通信 匿名管道pipe函数创建管道通信读写特征写慢读快写快读慢写端关闭&#xff0c;读端读完读端关闭&#xff0c;写端&#xff1f; 管道特征 命名管道命名管道特性…

近期学习论文总结 2

公众号&#xff1a;EDPJ 目录 0. 摘要 1. Artificial Fingerprinting for Generative Models: Rooting Deepfake Attribution in Training Data 1.1 核心思想 1.2 步骤 2. HyperDomainNet: Universal Domain Adaptation for Generative Adversarial Networks 2.1 核心思想…

使用Chat gpt提高Android开发效率

简介 在过去几周里&#xff0c;我进行了一项令人大开眼界的实验&#xff0c;将 Chat-GPT&#xff08;我使用的是 Bing Chat&#xff0c;它在后台使用了 GPT-4&#xff0c;并且可以免费使用&#xff09;融入到我的日常 Android 开发工作流程中&#xff0c;以探索它是否能够提高…

黑马Redis视频教程高级篇(安装OpenResty)

目录 一、安装 1.1、安装开发库 1.2、安装OpenResty仓库 1.3、安装OpenResty 1.4、安装opm工具 1.5、目录结构 1.6、配置nginx的环境变量 二、启动和运行 三、备注 一、安装 首先你的Linux虚拟机必须联网。 1.1、安装开发库 首先要安装OpenResty的依赖开发库&#…

Spring Bean生命周期之三级缓存循环依赖

文章目录 1 三级缓存1.1 引言1.2 三级缓存各个存放对象1.3 解决循环依赖条件1.3.1 解决循环依赖条件1.3.2 Sprin中Bean的顺序1.3.3 更改加载顺序1.3.3.1 构造方法依赖 (推荐)1.3.3.2 参数注入1.3.3.3 DependsOn(“xxx”)1.3.3.4 BeanDefinitionRegistryPostProcessor接口 1.3.4…

Pandas从入门到精通

一、什么是Pandas Pandas是基于NumPy的一种工具&#xff0c;该工具是为解决数据分析任务而创建的&#xff0c;Pandas提供了大量能使我们快速便捷的处理数据的功能 Pandas与出色的Jupyter 工具包和其他库相结合&#xff0c;Python中用于进行数据分析的环境在性能、生产率和协作…

javascript基础二十四:JavaScript中本地存储的方式有哪些?区别及应用场景?

一、方式 javaScript本地缓存的方法我们主要讲述以下四种&#xff1a; cookiesessionStoragelocalStorageindexedDB cookie Cookie&#xff0c;类型为「小型文本文件」&#xff0c;指某些网站为了辨别用户身份而储存在用户本地终端上的数据。是为了解决 HTTP无状态导致的问题…

IDEA插件Free Mybatis Tool

之前经常的操作是在 Mapper 接口中将接口名称复制一下&#xff0c;然后去查找对应的 XML 文件&#xff0c;打开后 CRTLF 查找对应的 xml 实现&#xff0c;整个过程效率很低下。搜了搜果然有前辈已经出了一款 IDEA 的插件解决了这个问题&#xff0c;把这个好用的跳转插件推荐给大…

leetcode 55.跳跃游戏

题目描述跳转至leetcode 给定一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://lee…

软件测试-黑盒测试方法

这里写自定义目录标题 测试用例的定义和特征设计测试用例的基本准则黑盒测试用例设计的几种方法&#xff08;一&#xff09;等价类划分法等价类的类型 如何划分等价类等价类划分步骤等价类的划分原则等价类划分法设计测试用例的步骤 &#xff08;二&#xff09;边界值分析法边界…

oVirt 4.4.10三节点超融合集群安装配置及集群扩容(一)

环境 oVrit版本: 4.4.10 oVirt image: https://mirrors.aliyun.com/ovirt/ovirt-4.4/iso/ovirt-node-ng-installer/4.4.10-2022030308/el8/ovirt-node-ng-installer-4.4.10-2022030308.el8.iso?spma2c6h.25603864.0.0.46c8a3e6ELIYzK oVirt engine appliance: https://mirror…