【开源】select,IOCP模型实践 -- KC直播

背景

利用笔记本的摄像头,采集环境信息,搭建高性能的视频监控模块。

设计方案

首先,server使用opencv3技术捕获摄像头采集环境数据。server采用select非阻塞网络模型为client提供网络服务。
当client连接至server时,server将client加入socket描述符集。server检查客户端状态是否为可写,如果可写,则将图像数据发送至客户端。
客户端接收到图像数据后进行组包,组包成功,则显示图像。持续接收图像帧并显示,构成视频序列。

1. 视频数据采集

采用 opencv3采集图片帧数据

    cv::Mat image;
    cv::VideoCapture capture(0);
    if (capture.isOpened()) {
        capture.read(image);
    }

2. 网络模型

采用select非阻塞模型。server非阻塞的位client提供网络服务。

3. 拆包与组包

server

opencv3 采集的是【长 * 宽】 = 480 * 640 的图片帧,将其拆分为 32 个包,则每一个包大小为 480 * 640 / 32 * 3 bytes.
对第32个包进行差异化处理,定义区别于前31个的标识符。

client

client接收到图像数据后,进行组包。
如果接收到第32个包,并且此次接收到32个完整的包,则进行组包,否则接收失败。

4. 多线程

server和client均使用多线程处理数据收发。

演示

client
server

改进思路

  1. server端采用完成端口网络模型(IOCP);
  2. 采用高帧率的摄像头代替笔记本内置camare;
  3. 图像数据压缩传输;
  4. 采用传图像差值的方式,减小图像的数据传输率。(ps:较小的时间间隔内,连续两帧图像的差异很小,因此,只需传输差值再还原图像即可。传差值的方式有两个明显的缺点。一: 光照因素对图像像素的影响极大,几乎 80% 以上的像素值都有变化。二: 不适用于流媒体视频传输。比如爱奇艺的视频,两帧图像可能并没有关联性,或者关联性很小);
  5. 数据压缩传输,比如 MPEG1,MPEG2,MPEG4等。另外,将数据打包为zip,tar等压缩格式传输,也能提高网络传输的性能;
  6. 视频编码技术。

HomeMonitor

git clone https://github.com/Guguant/HomeMonitor
(全文完)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值