首页 > 编程语言 >在nodejs addon 环境下抓视频和音频数据包

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

时间:2023-06-04 19:58:38浏览次数:67  
标签:console log lib nodejs frame Video 数据包 gstreamer1.0 addon

在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上。

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

 

标签:console,log,lib,nodejs,frame,Video,数据包,gstreamer1.0,addon
From: https://www.cnblogs.com/enigma19971/p/17456181.html

相关文章

  • nodejs调试工具
    Node应用调试工具debugger文档 http://nodejs.org/api/debugger.html内置的调试工具,支持基本的断点功能NodeInspector主页 https://github.com/node-inspector/node-inspector通过BlinkDeveloperTools提供的网页版JS调试工具来调试Node程序.NodeEclipse主页 http:......
  • 读<Wireshark数据包分析实战-第3版>之协议 ICMP,STP,DHCP
    ICMPICMP(InternetControlMessageProtocol,互联网控制报文协议)是一个网络层协议,用于在IP主机和路由器之间传递控制消息。它主要负责提供关于网络通信问题的反馈,如无法到达的目标主机、不可达的网络等。ICMP位于TCP/IP协议栈中的第三层,即网络层。ICMP有许多类型的消息,常见的......
  • TCP协议-传输数据包分片
    1.影响发送方数据包分片主要有:MTU值限制、握手时协商MSS值、拥塞控制(或者流量控制)算法设置的发送窗口大小MTU(Maximum Transmission Unit),即最大传输单元,是数据链路层的一个概念。它指的是在网络通信中,能够传输的最大数据包的大小。由于不同的数据链路层设备和协议,其最大传输......
  • 读<Wireshark数据包分析实战-第3版>之255.255.255.255
    255.255.255.255是一个特殊的IPv4地址,被称为受限广播地址(LimitedBroadcastAddress)。当一个设备发送一个数据包到255.255.255.255,网络中所有连接在同一局域网(LAN)的设备都会收到并处理该数据包。受限广播地址主要用于以下场景:在没有分配IP地址之前,设备使用它来寻找DHCP......
  • nodejs vuejs java python 入门到高级视频
    多抽出一分钟学习,让你的生命更加精彩!高性能高可用Yii2.0电商平台仿京东商城高级组件MySQLLVSDocker+Kubernetes(k8s)微服务容器化实战实战Docker到Kubernetes技术系列视频教程@黑马JAVAEE19期⑭jQuery实战经典【No0066】尚学堂架构师视频06、微服务架构00、SpringBoot微服务架......
  • nodejs守护进程 PM2
    概述PM2是用于Node.js应用程序的生产环境进程管理器,内置负载均衡器。它允许你将应用程序持续运行,无需停机重新加载,并简化常见的系统管理任务。官方网站Github特性进程管理:PM2可以启动、停止和重启Node.js应用程序进程,确保应用程序一直处于运行状态。它还提供了容错机制,......
  • nodejs使用eggjs创建项目,接入influxdb完成单表增删改查
    转载请注明出处:1.Eggjs特性:Eggjs是Node.js服务端应用开发框架,它提供了一套约定,使开发者能够快速搭建、开发和部署应用。以下是Egg.js的一些特性和作用:框架内置了基于约定的目录结构、约定的扩展机制和一些常用的插件,可以帮助开发者快速搭建应用。Egg.js遵循MVC......
  • 从小白到大佬!入门Linux系统收发网络数据包的秘密!
    Linux服务器收到网络数据包,需求经过哪些处置,一步步将数据传给应用进程的呢?应用进程发送数据包时,Linux又是如何操作将数据包发送进来的呢?今天我们就来聊聊这个话题。在准备好接纳网络数据包之前,Linux需求做很多准备工作,例如:网络子系统的初始化、协议栈的注册、网卡驱动的初始化、......
  • nodejs koa框架下载和导入excel
    ac.jsconstservice=require("../service/model.service");consturlencode=require("urlencode");consthelper=require("../../utils/helper");module.exports={/***@description:下载导入度量模板*@param{type}*@retur......
  • Burp Suite添加https证书——让其可以嗅探https的数据包,本质上就是将BP自己做为https
    如何给软件BurpSuite添加https证书?BurpSuite是一款强大的安全测试工具,可以用来设置代理,抓取http数据包,如果添加了https证书,就可以抓取https数据包。这边经验就告诉你,如何给软件BurpSuite添加https证书。工具/原料 联网的电脑一台BurpSuite软件firefox浏览器,并安装proxyswitch......