基于python实现高速视频传输程序


Posted in Python onMay 05, 2019

今天要说的是一个高速视频流的采集和传输的问题,我不是研究这一块的,没有使用什么算法,仅仅是兴趣导致我很想搞懂这个问题.

    1,首先是视频数据[摄像头图像]的采集,通常可以使用vfw在vc或者vb下实现,这个库我用的不好,所以一直不怎么会用.现在我们用到的是python的videocapture库,这个库用起来很简单,如下:

from VideoCapture import Device
cam = Device()
cam.setResolution(320,240)  #设置显示分辨率
cam.saveSnapshot('demo.jpg') #抓取并保存图片

  这样,你就得到了一张图片.

    当然,要实现比较高速的采集,每次都要保存图片是不大可能的,这样弄下来每次采集一张图片已经接近1秒钟,这个速度我们是无法忍受的.

更好的解决方式是直接这样: im = cam.getImage(),返回的是一个Image对象,是一个内存块,对它操作就快速多了.

    2,如何传输图片?我不知道pplive这种视频是怎么传输的,我的想法很简单,每次传送一幅图片.

在本程序中,每次传送的RGB图像的大小为 160*120.这样,需要的数据量为:

       d = 160*120*3 = 56.25 kB

    我选择80000B.

    下面是发送端代码:

import socket
import Image
from VideoCapture import Device
cam = Device()
cam.setResolution(320,240)
clisocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while 1:
  im = cam.getImage()
  im = im.resize((160,120))
  da = im.tostring()
  clisocket.sendto(da, ("127.0.0.1", 1234))
s.close()

    3,如何实时显示图片?

    我使用了pygame作为实时图像显示界面,因为pygame是经过优化的高速图形库,不知道有没有使用directshow,我想应该用了吧..

    关于pygame请参考 www.pygame.org

    下面是接收端代码:   

import socket
import Image
import os,sys,pygame
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode((160,120))
pygame.display.set_caption("web cam")
pygame.display.flip()
svrsocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
svrsocket.bind(("127.0.0.1", 1234))
clock = pygame.time.Clock()  #计算帧速
while 1:
  data, address = svrsocket.recvfrom(80000)
  camshot = pygame.image.frombuffer(data, (160,120), "RGB")
  for event in pygame.event.get():
      if event.type == pygame.QUIT: sys.exit()
  screen.blit(camshot, (0,0))
  pygame.display.update() 
  print clock.get_fps()   #在终端打印帧速
  clock.tick()

    程序终于完成了,测试一下效果怎么样把,为了方便,我把客户端和服务端都设成了本机,端口为1234.

    运行程序,哇,简直不可思议,最高竟然达到230fps!(右边的终端)

总结

以上所述是小编给大家介绍的基于python实现高速视频传输程序,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python中map、any、all函数用法分析
Apr 21 Python
python实现爬虫下载美女图片
Jul 14 Python
详解Python的Django框架中inclusion_tag的使用
Jul 21 Python
Python简单实现子网掩码转换的方法
Apr 13 Python
pip安装Python库时遇到的问题及解决方法
Nov 23 Python
Tensorflow卷积神经网络实例
May 24 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
Aug 27 Python
python可视化实现KNN算法
Oct 16 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
May 27 Python
python上下文管理器异常问题解决方法
Feb 07 Python
Python页面加载的等待方式总结
Feb 28 Python
Python常遇到的错误和异常
Nov 02 Python
Python远程视频监控程序的实例代码
May 05 #Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
May 05 #Python
20行python代码实现人脸识别
May 05 #Python
使用python实现mqtt的发布和订阅
May 05 #Python
Python向excel中写入数据的方法
May 05 #Python
python使用pandas处理大数据节省内存技巧(推荐)
May 05 #Python
python使用MQTT给硬件传输图片的实现方法
May 05 #Python
You might like
中国的第一台收音机
2021/03/01 无线电
如何用php获取文件名后缀
2013/06/09 PHP
php+ajax实现无刷新动态加载数据技术
2015/04/28 PHP
PHP实现路由映射到指定控制器
2016/08/13 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
2016/12/21 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
2017/06/13 PHP
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
JavaScript 继承详解(二)
2009/07/13 Javascript
基于jquery实现的定时显示与隐藏div广告的实现代码
2013/08/22 Javascript
22点关于jquery性能优化的建议
2014/05/28 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
2014/08/15 Javascript
js使用心得分享
2015/01/13 Javascript
JavaScript使用encodeURI()和decodeURI()获取字符串值的方法
2015/08/04 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
JS动态生成年份和月份实例代码
2017/02/04 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
在Vue组件中使用 TypeScript的方法
2018/02/28 Javascript
vuex state及mapState的基础用法详解
2018/04/19 Javascript
JavaScript new对象的四个过程实例浅析
2018/07/31 Javascript
浅谈vue引用静态资源需要注意的事项
2018/09/28 Javascript
vant时间控件使用方法详解
2020/12/24 Javascript
跟老齐学Python之深入变量和引用对象
2014/09/24 Python
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
2018/08/16 Python
Python进程间通信 multiProcessing Queue队列实现详解
2019/09/23 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
高校生生产实习自我鉴定
2013/09/21 职场文书
大学新生欢迎词
2014/01/10 职场文书
上课迟到检讨书100字
2014/01/11 职场文书
中学教师师德师风演讲稿
2014/08/22 职场文书
考研导师推荐信范文
2015/03/27 职场文书
2019暑假学生安全口号
2019/06/27 职场文书
2019年家电促销广告语集锦
2019/10/21 职场文书
Python中zipfile压缩包模块的使用
2021/05/14 Python
教你做个可爱的css滑动导航条
2021/06/15 HTML / CSS
HTML怎么设置下划线?html文字加下划线方法
2021/12/06 HTML / CSS