基于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实现通过微信搜索功能查看谁把你删除了
Jan 27 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
Apr 13 Python
python学生管理系统代码实现
Apr 05 Python
python 获取当天每个准点时间戳的实例
May 22 Python
Python Django 命名空间模式的实现
Aug 09 Python
python 爬取马蜂窝景点翻页文字评论的实现
Jan 20 Python
解决python3插入mysql时内容带有引号的问题
Mar 02 Python
Python发送邮件封装实现过程详解
May 09 Python
Tensorflow tf.tile()的用法实例分析
May 22 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
Jun 03 Python
一文读懂python Scrapy爬虫框架
Feb 24 Python
Pygame游戏开发之太空射击实战敌人精灵篇
Aug 05 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中实现Javascript的escape()函数代码
2010/08/08 PHP
php中利用str_pad函数生成数字递增形式的产品编号
2013/09/30 PHP
PHP不用递归实现无限分级的例子分享
2014/04/18 PHP
PHP数据库操作之基于Mysqli的数据库操作类库
2014/04/19 PHP
laravel框架查询数据集转为数组的两种方法
2019/10/10 PHP
用htc组件制作windows选项卡
2007/01/13 Javascript
浅谈javascript中return语句
2015/07/15 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
2015/12/25 Javascript
获取阴历(农历)和当前日期的js代码
2016/02/15 Javascript
用nodeJS搭建本地文件服务器的几种方法小结
2017/03/16 NodeJs
深入解析js轮播插件核心代码的实现过程
2017/04/14 Javascript
React复制到剪贴板的示例代码
2017/08/22 Javascript
Vue.js上传图片到阿里云OSS存储的方法示例
2018/12/13 Javascript
Vuerouter的beforeEach与afterEach钩子函数的区别
2018/12/26 Javascript
vue组件开发props验证的实现
2019/02/12 Javascript
vue如何实现自定义底部菜单栏
2019/07/01 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
python获取本机mac地址和ip地址的方法
2015/04/29 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
2018/03/31 Python
python安装模块如何通过setup.py安装(超简单)
2018/05/05 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
2019/11/06 Python
django 实现简单的插入视频
2020/04/07 Python
提高python代码运行效率的一些建议
2020/09/29 Python
修复iPhone的safari浏览器上submit按钮圆角bug
2012/12/24 HTML / CSS
Origins悦木之源英国官网:雅诗兰黛集团高端植物护肤品牌
2017/11/06 全球购物
巴西箱包、背包、钱包和旅行配件购物网站:Inovathi
2019/12/14 全球购物
C/C++有关内存的思考题
2015/12/04 面试题
创建索引时需要注意的事项
2013/05/13 面试题
用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别
2012/11/04 面试题
业务经理的岗位职责
2013/11/16 职场文书
中学生团员自我评价分享
2013/12/07 职场文书
行政办公室岗位职责
2014/03/18 职场文书
新学期开学演讲稿
2014/05/24 职场文书
助人为乐模范事迹材料
2014/06/02 职场文书
违反交通法规检讨书
2014/09/10 职场文书
Mysql如何查看是否使用到索引
2022/12/24 MySQL