基于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如何定义带参数的装饰器
Mar 20 Python
Python使用ConfigParser模块操作配置文件的方法
Jun 29 Python
Python读写文件基础知识点
Jun 10 Python
解决python有时候import不了当前的包问题
Aug 28 Python
Python实现平行坐标图的绘制(plotly)方式
Nov 22 Python
Pytorch提取模型特征向量保存至csv的例子
Jan 03 Python
python 将dicom图片转换成jpg图片的实例
Jan 13 Python
Python实现点云投影到平面显示
Jan 18 Python
python实现批量修改文件名
Mar 23 Python
500行python代码实现飞机大战
Apr 24 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
Sep 23 Python
python爬虫框架feapde的使用简介
Apr 20 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
文件上传类
2006/10/09 PHP
30个php操作redis常用方法代码例子
2014/07/05 PHP
php+mysqli实现批量替换数据库表前缀的方法
2014/12/29 PHP
PHP统一页面编码避免乱码问题
2015/04/09 PHP
php调用云片网接口发送短信的实现方法
2017/10/25 PHP
JQuery的ajax基础上的超强GridView展示
2009/09/18 Javascript
css如何让浮动元素水平居中
2015/08/07 Javascript
基于jQuery1.9版本如何判断浏览器版本类型
2016/01/12 Javascript
关于网页中的无缝滚动的js代码
2016/06/09 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
jQuery中.attr()和.data()的区别分析
2017/09/03 jQuery
浅谈在koa2中实现页面渲染的全局数据
2017/10/09 Javascript
iconfont的三种使用方式详解
2018/08/05 Javascript
详解NodeJS Https HSM双向认证实现
2019/03/12 NodeJs
vue中keep-alive组件的入门使用教程
2019/06/06 Javascript
vue-router 2.0 跳转之router.push()用法说明
2020/08/12 Javascript
vue 实现click同时传入事件对象和自定义参数
2021/01/29 Vue.js
javascript实现数字时钟效果
2021/02/06 Javascript
Tornado服务器中绑定域名、虚拟主机的方法
2014/08/22 Python
详解字典树Trie结构及其Python代码实现
2016/06/03 Python
PyQt5每天必学之QSplitter实现窗口分隔
2018/04/19 Python
python遍历文件夹找出文件夹后缀为py的文件方法
2018/10/21 Python
python实现一个点绕另一个点旋转后的坐标
2019/12/04 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
2020/02/16 Python
python numpy生成等差数列、等比数列的实例
2020/02/25 Python
美国从事品牌鞋类零售的连锁店:Famous Footwear
2016/08/25 全球购物
荷兰包包购物网站:The Little Green Bag
2018/03/17 全球购物
锐步英国官网:Reebok英国
2019/11/29 全球购物
飞利浦西班牙官方网站:Philips西班牙
2020/02/17 全球购物
大学生蛋糕店创业计划书
2014/01/13 职场文书
区长工作作风个人整改措施
2014/10/01 职场文书
2014年行政工作总结
2014/11/19 职场文书
学术研讨会欢迎词
2015/01/26 职场文书
车间质检员岗位职责
2015/04/08 职场文书
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS
sql字段解析器的实现示例
2021/06/23 SQL Server