基于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写冒泡排序代码
Apr 12 Python
详解Python在七牛云平台的应用(一)
Dec 05 Python
Python实现破解12306图片验证码的方法分析
Dec 29 Python
python3利用Dlib19.7实现人脸68个特征点标定
Feb 26 Python
快速解决PyCharm无法引用matplotlib的问题
May 24 Python
python utc datetime转换为时间戳的方法
Jan 15 Python
python如何将多个PDF进行合并
Aug 13 Python
python 实现将Numpy数组保存为图像
Jan 09 Python
python 递归调用返回None的问题及解决方法
Mar 16 Python
Python 利用flask搭建一个共享服务器的步骤
Dec 05 Python
如何在C++中调用Python
May 21 Python
详解MindSpore自定义模型损失函数
Jun 30 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
php学习之变量的使用
2011/05/29 PHP
php面向对象中static静态属性与方法的内存位置分析
2015/02/08 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
2015/12/17 PHP
让人印象深刻的10个jQuery手风琴效果应用
2012/05/08 Javascript
基于jquery自定义的漂亮单选按钮RadioButton
2013/11/19 Javascript
js识别不同浏览器基于userAgent做判断
2014/07/29 Javascript
js中回调函数的学习笔记
2014/07/31 Javascript
Easyui Datagrid自定义按钮列(最后面的操作列)
2017/07/13 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
2018/08/18 Javascript
基于vue和react的spa进行按需加载的实现方法
2018/09/29 Javascript
微信小程序传值以及获取值方法的详解
2019/04/29 Javascript
微信小程序button标签open-type属性原理解析
2020/01/21 Javascript
bootstrap-closable-tab可实现关闭的tab标签页插件
2020/08/09 Javascript
[04:36]DOTA2国际邀请赛 ti3精彩集锦
2013/08/19 DOTA
python提取页面内url列表的方法
2015/05/25 Python
Django实现自定义404,500页面教程
2017/03/26 Python
python用pickle模块实现“增删改查”的简易功能
2017/06/07 Python
解析Python的缩进规则的使用
2019/01/16 Python
python自定义函数实现一个数的三次方计算方法
2019/01/20 Python
Python基础之函数的定义与使用示例
2019/03/23 Python
django 使用 PIL 压缩图片的例子
2019/08/16 Python
基于Tensorflow高阶读写教程
2020/02/10 Python
学python需要去培训机构吗
2020/07/01 Python
python程序如何进行保存
2020/07/03 Python
python里反向传播算法详解
2020/11/22 Python
Python学习之time模块的基本使用
2021/01/17 Python
html5中 media(播放器)的api使用指南
2014/12/26 HTML / CSS
安全生产检查通报
2014/01/29 职场文书
春节联欢会策划方案
2014/05/16 职场文书
绿色环保家庭事迹材料
2014/08/31 职场文书
公安局副政委班子个人对照检查材料
2014/10/04 职场文书
同意落户证明
2015/06/19 职场文书
幼儿园迎新生欢迎词
2015/09/30 职场文书
外出考察学习心得体会
2016/01/18 职场文书
一文搞懂python异常处理、模块与包
2021/06/26 Python
使用redis生成唯一编号及原理示例详解
2021/09/15 Redis