树莓派Linux使用OpenCV进行摄像头视频流直播 Linux WiFI图传 Node Addon C++、C++、OpenCV、H264、WebSocket

24 篇文章 1 订阅
6 篇文章 0 订阅

树莓派Linux使用OpenCV进行摄像头视频流直播

开源地址 https://github.com/gaowanlu/openlive

先看效果

在这里插入图片描述

原理

因为C++使用网络传输不太方便、完全可以使用Node.js的功能,并使用node-addon-api使得JavaScript程序调用C++模块,C++开启两个线程一个是OpenCV读取摄像头帧数据、另一个为进行H264视频裸流编码,node服务端进行Loop不断得将从C++获得的H264裸流帧数据,利用SocketIO emit给所有WebSocket已经连接的用户

怎样部署

暂时只支持Linux平台,在虚拟机环境下与实际效果帧率示有偏差的哦(建议用实体主机进行测试),虚拟机一般太卡了,如果使用WSL2的话可以下载一个MJPEG Streamer进行jpeg推流,在项目中更改opencv相机打开参数从0改为http地址

请见github的readme的文档,如有问题可以提出issue,欢迎有兴趣的伙伴进行改进贡献提交PR

openlive (network image transmission)

The OpenCV camera video stream used is pushed to the browser solution based on Base64 encoding in H264 format and transmitted using websocket. Use POSIX multithreading and C/C++plugins with Node API.

Can be used on Linux development boards such as Raspberry Pi and Linux system personal computers

scheme


/**************************************************************************/
*     C++ module             <---->  Node SocketIO <---->  Browser(Player) *
* capture thread         <----------                       /|\              *
*    Take Frame(Loop)      start()                          |               *
*   |                                                       |               *
*   | Image(get_mat())                                      |               *
*   |                                                       |               *
*  \|/                                                      |               *
* encode_thread(Loop)                                       |               *
*   |-Convert to YUV color                      (H264Stream)|               *
*   | space                                                 |               *
*   |                                                       |               *
*   |-H264 encoder encodi-                                  |               *
*   | ng                                                    |               *
*   |                                                       |               *
*   |-Add H264 stream                                       |               *
*   | data to buffer                                        |               *
*   | queue                                                 |               *
*      |                              (Loop)                |               *
*      |------------------------->   io.emit()  ------------|               *
*           getFrame(Blocking)                                              *
*                                                                           *
/**************************************************************************/

environmental preparation

libx264(https://www.videolan.org/developers/x264.html)
opencv(https://github.com/opencv/opencv)

sudo apt install libx264-dev
sudo apt install -g node-gyp
sudo apt install libopencv-dev pkg-config
npm install

compile to run

node-gyp configure
npm run build
node index

Browser Access http://IP:8887

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高万禄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值