基于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 14 Python
Python实现字符串格式化输出的方法详解
Sep 20 Python
python使用KNN算法手写体识别
Feb 01 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
Feb 08 Python
python 解压pkl文件的方法
Oct 25 Python
python实现在函数图像上添加文字和标注的方法
Jul 08 Python
python采集百度搜索结果带有特定URL的链接代码实例
Aug 30 Python
python3 求约数的实例
Dec 05 Python
Python callable内置函数原理解析
Mar 05 Python
解决python打开https出现certificate verify failed的问题
Sep 03 Python
Python-split()函数实例用法讲解
Dec 18 Python
Django+Django-Celery+Celery的整合实战
Jan 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
用PHP实现维护文件代码
2007/06/14 PHP
php文档更新介绍
2011/07/22 PHP
一个PHP二维数组排序的函数分享
2014/01/17 PHP
php对数组排序代码分享
2014/02/24 PHP
php随机抽奖实例分析
2015/03/04 PHP
php对象和数组相互转换的方法
2015/05/12 PHP
Yii2框架数据验证操作实例详解
2018/05/02 PHP
laravel orm 关联条件查询代码
2019/10/21 PHP
几行代码轻松搞定jquery实现flash8类似的连接效果
2007/05/03 Javascript
JS解析XML的实现代码
2009/11/12 Javascript
jquery实现简单易懂的图片展示小例子
2013/11/21 Javascript
js函数调用的方式
2014/05/06 Javascript
基于javascript实现判断移动终端浏览器版本信息
2014/12/09 Javascript
浅析JavaScript中break、continue和return的区别
2016/11/30 Javascript
js实现打地鼠小游戏
2017/02/13 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
2017/04/27 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
2017/05/09 Javascript
JS实现的RC4加密算法示例
2018/08/16 Javascript
JavaScript 继承 封装 多态实现及原理详解
2019/07/29 Javascript
详解微信小程序动画Animation执行过程
2020/09/23 Javascript
nuxt 页面路由配置,主页轮播组件开发操作
2020/11/05 Javascript
轻松掌握python设计模式之策略模式
2016/11/18 Python
Django应用程序中如何发送电子邮件详解
2017/02/04 Python
详解 Python 与文件对象共事的实例
2017/09/11 Python
Python设计模式之装饰模式实例详解
2019/01/21 Python
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
2019/09/18 Python
Django2 连接MySQL及model测试实例分析
2019/12/10 Python
欧洲高端品牌直销店:Fashionesta
2016/08/31 全球购物
巴基斯坦电子产品购物网站:Home Shopping
2017/09/14 全球购物
联想阿根廷官方网站:Lenovo Argentina
2019/10/14 全球购物
彩妆大赛策划方案
2014/05/13 职场文书
代理词怎么写
2015/05/25 职场文书
Python机器学习之逻辑回归
2021/05/11 Python
Java实战之课程信息管理系统的实现
2022/04/01 Java/Android
tree shaking对打包体积优化及作用
2022/07/07 Java/Android