Node.js + Python 实现 WebSocket视频流推送核心代码实现

1 Node.js概述

    根据百度百科的定义,Node.js是一个基于Chrome V8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型, 让JavaScript 成为一种不但可以运行在浏览器端,还可以运行在服务端的编程语言,它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。Node.js是单线程的,它通过事件循环(event loop)来实现并发操作,因此,编程时尽可能多使用非阻塞操作。

2 WebSocket

   根据百度百科的定义,WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。因此,目前对于Web端消息推送应用,很多都采用WebSocket,它能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。

3 视频流推送实现

  视频流可以通过OpenCV从摄像头进行获取,视频流可以抽取出每一个帧,一般来说,如果一个视频的fps为24,那么则意味着1秒中播放24帧,而每一帧就是一副图像,因此,我们可以从视频流中抽取出图像帧,并对图像进行处理,比如大小跳转,绘制边框等,然后可以将其通过base64转换成字符串,通过WebSocket发送到服务器,而服务器则通过WebSocket协议推送到浏览器,并基于img标签进行显示。
  本示例核心组件如下所示:
 (1)Node.js 构建的server.js 是 WebSocket Server端;
 (2)Python 构建的client.py 则获取视频流并推送base64编码后的图像到Server端;
 (3)Python Flask构建的web.py,返回index.html页面,接收WebSocket协议推送过来的图像,并显示。
 下面给出server.js 核心代码,具体如下所示:

在这里插入图片描述
其中的WebSocket协议需要通过 npm install ws 进行安装。而wss.on方法可以监听客户端的连接,并通过循环客户端列表来发送数据,即client.send(msg)。下面再给出Python 构建的client.py核心代码,具体如下所示:
在这里插入图片描述
在这里插入图片描述

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值