基于python实现高速视频传输程序

  

今天要说的是一个高速视频流的采集和传输的问题,我不是研究这一块的,没有使用什么算法,仅仅是兴趣导致我很想搞懂这个问题。

  

,,,1,首先是视频数据(摄像头图像]的采集,通常可以使用vfw在vc或者vb下实现,这个库我用的不好,所以一直不怎么会用。现在我们用到的是python的videocapture库,这个库用起来很简单,如下:

        从VideoCapture进口设备   凸轮=设备()   cam.setResolution(320240) #设置显示分辨率   cam.saveSnapshot (demo.jpg) #抓取并保存图片      

,这样,你就得到了一张图片。

  

,,,当然,要实现比较高速的采集,每次都要保存图片是不大可能的,这样弄下来每次采集一张图片已经接近1秒钟,这个速度我们是无法忍受的。

  

更好的解决方式是直接这样:<代码> im=cam.getImage() 返回的是一个图像对象,是一个内存块,对它操作就快速多了。

  

,,,2、如何传输图片& # 63;我不知道网络电视这种视频是怎么传输的,我的想法很简单,每次传送一幅图片。

  

在本程序中,每次传送的RGB图像的大小为160 * 120。这样,需要的数据量为:

  

,,,,, <代码>,d=160 * 120 * 3=56.25 kB
  

  

,,,我选择80000 b .

  

,,,下面是发送端代码:

        进口套接字   导入图片   从VideoCapture进口设备   凸轮=设备()   cam.setResolution (320240)   clisocket=socket.socket(插座。AF_INET socket.SOCK_DGRAM)   而1:   我=cam.getImage ()   我=im.resize ((160120))   da=im.tostring ()   clisocket。sendto (da (127.0.0.1, 1234))   s.close ()      

,,

  

,,,我使用了pygame作为实时图像显示界面,因为pygame是经过优化的高速图形库,不知道有没有使用directshow的,我想应该用了吧. .

  

,,,关于pygame请参考www.pygame.org

  

,,,下面是接收端代码:,,,
  

        进口套接字   导入图片   pygame导入系统,系统   pygame。当地进口*   pygame.init ()   屏幕=pygame.display.set_mode ((160120))   pygame.display。set_caption(网络摄像头)   pygame.display.flip ()   svrsocket=socket.socket(插座。AF_INET socket.SOCK_DGRAM)   svrsocket.bind ((127.0.0.1, 1234))   时钟=pygame.time.Clock() #计算帧速   而1:   数据、地址=svrsocket.recvfrom (80000)   camshot=pygame.image.frombuffer(数据,(160120),“RGB”)   在pygame.event.get事件():   如果事件。==pygame类型。戒烟:sys.exit ()   屏幕上。位块传输(camshot (0, 0))   pygame.display.update ()   打印clock.get_fps() #在终端打印帧速   clock.tick ()      

,,,程序终于完成了,测试一下效果怎么样把,为了方便,我把客户端和服务端都设成了本机,端口为1234 .

  

,,,运行程序,哇,简直不可思议,最高竟然达到230 fps !(右边的终端)
  

  

  

以上所述是小编给大家介绍的基于python实现高速视频传输程序,希望对大家有所帮助,如果大家有任何疑问请给我留的言,小编会及时回复大家的。在此也非常感谢大家对网站的支持。
  如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

基于python实现高速视频传输程序