在nodejs 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
在nodejs addon 环境下抓视频和音频数据包更多相关文章
JavaScript CSS Vue3 实现一个简单的Loading
配置和使用nvm免安装版本(nvm-noinstall.zip)
HarmonyOS:使用Node-API实现ArkTS与C/C++跨语言交互
【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (一):项目简介及安装依赖
【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (四):状态码的使用
【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (五):POST上传文件的设置
【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (六):token的设置
【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (七):MongoDB的设置
【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (三):Cors的设置及.env文件的设置
【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (二):项目文件夹架构及路由的设置
【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (八):API说明(暂时完结,后续考虑将在线版mongoDB变为本地版)
报error:0308010C:digital envelope routines::unsupported错--nodejs版本过高(nvm安装(更换)不同版本nodejs)
小结---安装nvm解决node版本不兼容的问题(node版本切换)