在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