在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

在nodejs addon 环境下抓视频和音频数据包相关推荐

  1. matlab腔内光子寿命,mcFORnp matlab环境下,利用蒙特卡洛模拟光子包在生物组织内的光路传输 271万源代码下载- www.pudn.com...

    文件名称: mcFORnp下载  收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 215 KB 上传时间: 2014-12-29 下载次数: 8 提 供 者: 徐某 ...

  2. 关于fi dd ler 手机抓包 网卡地址地址_利用无线路由器如何抓取手机网络数据包【详细介绍】...

    当用户运用手机访问网络时,手机在不断接受与发送数据包,而这些数据包中包含了大量的用户信息,包括各种账号信息.聊天信息.发送接收文件.邮件.浏览的网页等.虽然很多信息是加密传输的,但还是会有大量信息是明 ...

  3. Fiddler 详尽教程与抓取移动端数据包

    转载自:http://blog.csdn.net/qq_21445563/article/details/51017605 阅读目录 1. Fiddler 抓包简介 1). 字段说明 2). Stat ...

  4. burpsuite抓取手机app数据包(通过笔记本开热点方式)

    burpsuite抓取手机app数据包(通过笔记本开热点方式) 1,点击笔记本右下方网络图标,出现移动热点,右键转到设置 进去之后设置热点名称密码,手机连接热点,笔记本查看连接设备的网段,这儿可以看到 ...

  5. ROS下安装和运行SVO数据包和实时测验的过程记录

    安装与运行的所有文档: https://github.com/uzh-rpg/rpg_svo/wiki  或者 http://blog.sina.com.cn/s/blog_7b83134b0102w ...

  6. Wireshark抓取疯狂聊天数据包

    Wireshark抓取疯狂聊天数据包 一.准备工作 二.开始聊天 三.wireshark进行抓包 (一)抓取数字信息数据包 (二)抓取中文数据包 (三)抓取英文数据包 四.总结 五.参考资料 一.准备 ...

  7. 使用Fiddler抓取手机APP数据包--360WIFI

    使用Fiddler抓取手机APP流量--360WIFI 操作步骤: 1.打开Fiddler,Tools-Fiddler Options-Connections,勾选Allow remote compu ...

  8. wireshark抓取聊天网络数据包

    wireshark抓取聊天网络数据包 一.实验任务 二.实验步骤 三.总结 总结 一.实验任务 据包.在两台及两台以上的电脑(已知IPv4地址)上运行 "疯狂聊天室"程序,通过wi ...

  9. Wireshark网络抓包之抓取聊天网络数据包

    一.Wireshark 1. Wireshark简介 Wireshark(前称Ethereal)是一个网络封包分析软件.网络封包分析软件的功能是截取网络封包,并尽可能显示出最为详细的网络封包资料.Wi ...

最新文章

  1. window.open和window.showModalDialog用法
  2. widows下nignx的使用
  3. 高效幂运算(JAVA)--拆分解法、二进制解法
  4. 面试中如何做一个好的自我介绍?
  5. 实现自动带密码登陆远程机执行shell命令(linux)
  6. Golang实践录:使用gin框架实现转发功能:管理后端服务
  7. Ui学习笔记---EasyUI的EasyLoader组件源码分析
  8. 【JOURNAL】Salles de SV Toulouse
  9. afnetworking 和 asihttprequest 强制修改http连接的host地址
  10. Ubuntu上,如何成功的安装pygrib
  11. python 中文字符串 编码转换_Python合集之Python字符串编码转换
  12. 人工智能开源项目之SeetaFace6
  13. 工作那些事(二十八)项目管理模式:项目型、职能型、矩阵型
  14. 忘记网站后台密码 PHP+mysql+md5 破解
  15. endl 和 cout
  16. 【转】计算机分类经典书籍推荐
  17. WHUT·PTA·实验一 (个人整理+理解版 )
  18. 1110、区块反转 PAT乙级
  19. SpringCloud Oauth2认证 基础版本
  20. charAt、charCodeAt、fromCharCode作用

热门文章

  1. vscode 打开工程磁盘利用率100%系统卡顿无法工作
  2. 什么是 Power BI 服务?
  3. C语言——用户自己建立数据类型
  4. 使用excel宏完成数据筛选并且保持为图片
  5. Python每日一练(24)-requests 模块获取免费的代理并检测代理 IP 是否有效
  6. JAVA做一个五星评论打分字体,css简单实现五角星评分、点赞收藏、展现评分(半颗星、1/3颗星)...
  7. Linux下pdf去除白边(使用PDFCrop)
  8. 如何访问IE历史记录(续)
  9. 儿童用什么样的台灯比较好?专业眼科医生推荐给孩子买这些台灯
  10. SVN文件绿色图标显示方法