基于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的闭包和装饰器
Feb 26 Python
python 常用的基础函数
Jul 10 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
Jan 14 Python
Python空间数据处理之GDAL读写遥感图像
Aug 01 Python
Python Tkinter模块 GUI 可视化实例
Nov 20 Python
python数据预处理方式 :数据降维
Feb 24 Python
Python 读取WAV音频文件 画频谱的实例
Mar 14 Python
Python装饰器的应用场景代码总结
Apr 10 Python
浅谈Python中的生成器和迭代器
Jun 19 Python
5款实用的python 工具推荐
Oct 13 Python
python中用ctypes模拟点击的实例讲解
Nov 26 Python
numpy array找出符合条件的数并赋值的示例代码
Jun 01 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
ajax+php打造进度条代码[readyState各状态说明]
2010/04/12 PHP
使用XDebug调试及单元测试覆盖率分析
2011/01/27 PHP
解析crontab php自动运行的方法
2013/06/24 PHP
PHP数据库操作之基于Mysqli的数据库操作类库
2014/04/19 PHP
codeigniter发送邮件并打印调试信息的方法
2015/03/21 PHP
php类的定义与继承用法实例
2015/07/07 PHP
THREE.JS入门教程(6)创建自己的全景图实现步骤
2013/01/25 Javascript
14个有用的Jquery技巧分享
2015/01/08 Javascript
浅谈js中StringBuffer类的实现方法及使用
2016/09/02 Javascript
js原生之焦点图转换加定时器实例
2016/12/12 Javascript
使用BootStrap实现标签切换原理解析
2017/03/14 Javascript
angular或者js怎么确定选中ul中的哪几个li
2017/08/16 Javascript
浅谈react-native热更新react-native-pushy集成遇到的问题
2017/09/30 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
Vue.js递归组件实现组织架构树和选人功能案例分析
2019/07/03 Javascript
js实现图片粘贴到网页
2019/12/06 Javascript
解决springboot yml配置 logging.level 报错问题
2020/02/21 Python
keras自动编码器实现系列之卷积自动编码器操作
2020/07/03 Python
Python 2.6.6升级到Python2.7.15的详细步骤
2020/12/14 Python
任意一块网页内容实现“活”的背景(目前火狐浏览器专有)
2014/05/07 HTML / CSS
英国、欧洲和全球租车服务:Avis英国
2016/08/29 全球购物
奥斯汀独木舟和皮划艇:Austin Canoe & Kayak
2018/05/22 全球购物
定义一结构体变量,用其表示点坐标,并输入两点坐标,求两点之间的距离
2015/08/17 面试题
同步和异步有何异同,在什么情况下分别使用他们
2013/04/09 面试题
js正则匹配markdown里的图片标签的实现
2021/03/24 Javascript
会计专业应届生求职信
2013/11/24 职场文书
求职信写作要突出重点
2014/01/01 职场文书
党员组织关系介绍信
2014/02/13 职场文书
《第一次抱母亲》教学反思
2014/04/16 职场文书
求职信怎么写
2014/05/23 职场文书
校园活动策划方案
2014/06/13 职场文书
四风问题党员个人整改措施
2014/10/27 职场文书
2015年上半年计生工作总结
2015/03/30 职场文书
Java Kafka 消费积压监控的示例代码
2021/07/01 Java/Android
Redis分布式锁Redlock的实现
2021/08/07 Redis
Go 语言中 20 个占位符的整理
2021/10/16 Golang