在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上。
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 环境下抓视频和音频数据包相关推荐
- matlab腔内光子寿命,mcFORnp matlab环境下,利用蒙特卡洛模拟光子包在生物组织内的光路传输 271万源代码下载- www.pudn.com...
文件名称: mcFORnp下载 收藏√ [ 5 4 3 2 1 ] 开发工具: matlab 文件大小: 215 KB 上传时间: 2014-12-29 下载次数: 8 提 供 者: 徐某 ...
- 关于fi dd ler 手机抓包 网卡地址地址_利用无线路由器如何抓取手机网络数据包【详细介绍】...
当用户运用手机访问网络时,手机在不断接受与发送数据包,而这些数据包中包含了大量的用户信息,包括各种账号信息.聊天信息.发送接收文件.邮件.浏览的网页等.虽然很多信息是加密传输的,但还是会有大量信息是明 ...
- Fiddler 详尽教程与抓取移动端数据包
转载自:http://blog.csdn.net/qq_21445563/article/details/51017605 阅读目录 1. Fiddler 抓包简介 1). 字段说明 2). Stat ...
- burpsuite抓取手机app数据包(通过笔记本开热点方式)
burpsuite抓取手机app数据包(通过笔记本开热点方式) 1,点击笔记本右下方网络图标,出现移动热点,右键转到设置 进去之后设置热点名称密码,手机连接热点,笔记本查看连接设备的网段,这儿可以看到 ...
- ROS下安装和运行SVO数据包和实时测验的过程记录
安装与运行的所有文档: https://github.com/uzh-rpg/rpg_svo/wiki 或者 http://blog.sina.com.cn/s/blog_7b83134b0102w ...
- Wireshark抓取疯狂聊天数据包
Wireshark抓取疯狂聊天数据包 一.准备工作 二.开始聊天 三.wireshark进行抓包 (一)抓取数字信息数据包 (二)抓取中文数据包 (三)抓取英文数据包 四.总结 五.参考资料 一.准备 ...
- 使用Fiddler抓取手机APP数据包--360WIFI
使用Fiddler抓取手机APP流量--360WIFI 操作步骤: 1.打开Fiddler,Tools-Fiddler Options-Connections,勾选Allow remote compu ...
- wireshark抓取聊天网络数据包
wireshark抓取聊天网络数据包 一.实验任务 二.实验步骤 三.总结 总结 一.实验任务 据包.在两台及两台以上的电脑(已知IPv4地址)上运行 "疯狂聊天室"程序,通过wi ...
- Wireshark网络抓包之抓取聊天网络数据包
一.Wireshark 1. Wireshark简介 Wireshark(前称Ethereal)是一个网络封包分析软件.网络封包分析软件的功能是截取网络封包,并尽可能显示出最为详细的网络封包资料.Wi ...
最新文章
- window.open和window.showModalDialog用法
- widows下nignx的使用
- 高效幂运算(JAVA)--拆分解法、二进制解法
- 面试中如何做一个好的自我介绍?
- 实现自动带密码登陆远程机执行shell命令(linux)
- Golang实践录:使用gin框架实现转发功能:管理后端服务
- Ui学习笔记---EasyUI的EasyLoader组件源码分析
- 【JOURNAL】Salles de SV Toulouse
- afnetworking 和 asihttprequest 强制修改http连接的host地址
- Ubuntu上,如何成功的安装pygrib
- python 中文字符串 编码转换_Python合集之Python字符串编码转换
- 人工智能开源项目之SeetaFace6
- 工作那些事(二十八)项目管理模式:项目型、职能型、矩阵型
- 忘记网站后台密码 PHP+mysql+md5 破解
- endl 和 cout
- 【转】计算机分类经典书籍推荐
- WHUT·PTA·实验一 (个人整理+理解版 )
- 1110、区块反转 PAT乙级
- SpringCloud Oauth2认证 基础版本
- charAt、charCodeAt、fromCharCode作用
热门文章
- vscode 打开工程磁盘利用率100%系统卡顿无法工作
- 什么是 Power BI 服务?
- C语言——用户自己建立数据类型
- 使用excel宏完成数据筛选并且保持为图片
- Python每日一练(24)-requests 模块获取免费的代理并检测代理 IP 是否有效
- JAVA做一个五星评论打分字体,css简单实现五角星评分、点赞收藏、展现评分(半颗星、1/3颗星)...
- Linux下pdf去除白边(使用PDFCrop)
- 如何访问IE历史记录(续)
- 儿童用什么样的台灯比较好?专业眼科医生推荐给孩子买这些台灯
- SVN文件绿色图标显示方法