python实现不同电脑之间视频传输功能

1. imageZMQ库实现

imageZMQ库链接:https://github.com/jeffbass/imagezmq
该库原本是用于树莓派上的视频传输,其包含很多示例,有兴趣可以去看看。

上图中间的笔记本为发送端,其余两个屏幕显示的是接收端视频。本文视频传输实现的前提是确保发送端和接收端接在同一个局域网下。

发送端

import socket
import time
import cv2
import imagezmq
import traceback
import simplejpeg

# capture=cv2.VideoCapture(0) # 获取摄像头视频
capture=cv2.VideoCapture(r"D:\project\dataset\video\测试.mp4")
# 192.168.100.104 为发送端主机ip地址
sender = imagezmq.ImageSender(connect_to='tcp://192.168.100.104:5555', REQ_REP=False)
rpi_name = socket.gethostname() # 获取主机名
time.sleep(2.0)
jpeg_quality = 95   #调整图片压缩质量,95%
while(True):
    try:
        ref, frame=capture.read(0)
        time.sleep(1/60)
        image = cv2.resize(frame,(1280,720))
        curtime = time.time()
        msg = rpi_name+'*'+str(curtime)
        # 通过simplejpeg函数将图片编码为jpeg格式,提高传输效率
        jpg_buffer = simplejpeg.encode_jpeg(image, quality=jpeg_quality,
                                            colorspace='BGR')
        sender.send_jpg(msg, jpg_buffer)
        cv2.imshow(rpi_name, image)
        cv2.waitKey(1)
    except:
        print(traceback.print_exc())
        break

接收端(可以多台设备同时接收)

import cv2
import imagezmq
import traceback
import time
import simplejpeg

# 接收发送端数据,输入发送端的ip地址
image_hub = imagezmq.ImageHub(open_port='tcp://192.168.100.104:5555',REQ_REP=False)
frame_count = 1
time1 = 0
while True:
    try:
        time1 = time.time() if frame_count == 1 else time1
        name, image = image_hub.recv_jpg()
        # 解码
        image = simplejpeg.decode_jpeg(image, colorspace='BGR')
        cv2.imshow(name.split('*')[0], image)
        cv2.waitKey(1)
        time2 = time.time()
        print(image.shape[:2], int(frame_count/(time2-time1)))
        frame_count += 1
    except:
        print(traceback.format_exc())
        break

2. TCP协议实现


发送端

import socket
import cv2

import sys
import numpy as np
address = ('192.168.100.104', 5005)  # 服务端地址和端口
ser = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ser.bind(address)
ser.listen(5)
# 阻塞式
print('waiting。。。')
conn, addr = ser.accept()
print('建立连接...')
print('连接对象:', addr)
cap = cv2.VideoCapture(r"D:\project\dataset\video\测试.mp4")
# cap = cv2.VideoCapture(0)
frames_num=cap.get(7)
print('视频总帧数:',frames_num)
print('发送目标...')
count = 0
while cap.isOpened():
    try:
        data = conn.recv(1024)
        data = data.decode()
        if not data:
            break
        ret, frame = cap.read()
        frame = cv2.resize(frame,(1280,720))
        cv2.imshow('send', frame)
        cv2.waitKey(1)
        count += 1
        # 数据打包有很多方式,也可以用json打包
        img_encode = cv2.imencode('.jpg', frame)[1]

        data_encode = np.array(img_encode)
        str_encode = data_encode.tostring()

        conn.sendall(str_encode)
    except KeyboardInterrupt:
        print('KeyboardInterrupt')
        sys.exit(0)

接收端

import socket
import sys
import cv2
import numpy as np
import time
address = ('192.168.100.104', 5005)  # 服务端地址和端口
cli = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
    cli.connect(address)  # 尝试连接服务端
except Exception:
    print('[!] Server not found or not open')
    sys.exit()

frame_count = 1
while True:
    time1 = time.time() if frame_count == 1 else time1
    trigger = 'ok'
    cli.sendall(trigger.encode())
    data = cli.recv(1024*1024*20)
    image = np.frombuffer(data, np.uint8)
    image = cv2.imdecode(image,cv2.IMREAD_COLOR)
    cv2.imshow('video',image)
    cv2.waitKey(1)
    end_time = time.time()
    time2 = time.time()
    print(image.shape[:2], int(frame_count / (time2 - time1)))
    frame_count += 1
cli.close()

到此这篇关于python实现不同电脑之间视频传输的文章就介绍到这了,更多相关python视频传输内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

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

    今天要说的是一个高速视频流的采集和传输的问题,我不是研究这一块的,没有使用什么算法,仅仅是兴趣导致我很想搞懂这个问题. 1,首先是视频数据[摄像头图像]的采集,通常可以使用vfw在vc或者vb下实现,这个库我用的不好,所以一直不怎么会用.现在我们用到的是python的videocapture库,这个库用起来很简单,如下: from VideoCapture import Device cam = Device() cam.setResolution(320,240) #设置显示分辨率 cam.s

  • 使用Python的Flask框架实现视频的流媒体传输

    Flask 是一个 Python 实现的 Web 开发微框架.这篇文章是一个讲述如何用它实现传送视频数据流的详细教程. 我敢肯定,现在你已经知道我在O'Reilly Media上发布了有关Flask的一本书和一些视频资料.在这些上面,Flask框架介绍的覆盖面是相当完整的,出于某种原因,也有一小部分的功能没有太多的提到,因此我认为在这里写一篇介绍它们的文章是一个好主意. 这篇文章是专门介绍流媒体的,这个有趣的功能让Flask应用拥有这样一种能力,以分割成小数据块的方式,高效地为大型请求提供数据,

  • Python使用UDP实现720p视频传输的操作

    1. 项目背景 视频传输: 在一台电脑上播放视频(捕捉摄像头画面),同局域网内另一台电脑上实时播放,尽量不卡顿. 先放最后的照片,和用gif展示一下视频效果. 传输视频可以采取图片或者流的形式,本文采取传输图片的形式,在1s之内显示多张图片从而形成连续的视频画面. 经费有限,所有实验均基于笔记本电脑. 使用的视频源是本机摄像头,以及进击的巨人720p资源. 2. 解决方案 1. 使用Python的Socket,使用opencv捕捉摄像头/视频的画面. 2. 原始的图片很大(720p的大小是192

  • python 使用socket传输图片视频等文件的实现方式

    在开发一些需要网络通信的应用中,经常会用到各种网络协议进行通信,博主在开发实验室的机器人的时候就遇到了需要把机器人上采集到的图片传回服务器进行处理识别,在python下的实现方式如下(只贴出了关键代码) 服务器端 LOCAL_IP = '192.168.100.22' #本机在局域网中的地址,或者写127.0.0.1 PORT = 2567 #指定一个端口 def server(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

  • videocapture库制作python视频高速传输程序

    1,首先是视频数据[摄像头图像]的采集,通常可以使用vfw在vc或者vb下实现,这个库我用的不好,所以一直不怎么会用.现在我们用到的是python的videocapture库,这个库用起来很简单,如下: 复制代码 代码如下: from VideoCapture import Devicecam = Device()cam.setResolution(320,240)   #设置显示分辨率cam.saveSnapshot('demo.jpg') #抓取并保存图片 这样,你就得到了一张图片.当然,要

  • Python树莓派学习笔记之UDP传输视频帧操作详解

    本文实例讲述了Python树莓派学习笔记之UDP传输视频帧操作.分享给大家供大家参考,具体如下: 因为我在自己笔记本电脑上没能成功安装OpenCV-Contrib模块,因此不能使用人脸识别等高级功能,不过已经在树莓派上安装成功了,所以我想实现把树莓派上采集的视频帧传输到PC的功能,这样可以省去给树莓派配显示屏的麻烦,而且以后可能可以用在远程监控上. 1 UDP还是TCP 首先考虑用哪种传输方式,平常TCP用的非常多,但是像视频帧这种数据用TCP不是太合适,因为视频数据的传输最先要考虑的是速度而不

  • python实现不同电脑之间视频传输功能

    1. imageZMQ库实现 imageZMQ库链接:https://github.com/jeffbass/imagezmq 该库原本是用于树莓派上的视频传输,其包含很多示例,有兴趣可以去看看. 上图中间的笔记本为发送端,其余两个屏幕显示的是接收端视频.本文视频传输实现的前提是确保发送端和接收端接在同一个局域网下. 发送端 import socket import time import cv2 import imagezmq import traceback import simplejpe

  • QT实现视频传输功能

    本文实例为大家分享了QT实现视频传输功能的具体代码,供大家参考,具体内容如下 前言 我们经常会进行视频的传输,这篇文章我们将讲解QT下的视频传输. 客户端 udp客户端,我们主要获取某个视频的文件,采用opencv读取后,分帧传输.我们将图片解码成base-64格式 参考代码 #include "ImageClient.h" #include<QDebug> #include<QBuffer> #include<QFileDialog> #inclu

  • python利用socket实现udp文件传输功能

    本文实例为大家分享了UDP实现文件传输的具体代码,供大家参考,具体内容如下 tcp进行文件传输看这里–python实现TCP文件接发 这里实现的接收方一直接收,发送方每次发送一个文件,方便我在其他函数中调用发送文件. 使用udp 容易出现丢包现象需要处理 要注意 tcp 和udp的套接字不一样 # udp: udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # tcp tcp_socketr = socket.socket(

  • python实现简单socket程序在两台电脑之间传输消息的方法

    本文实例讲述了python实现简单socket程序在两台电脑之间传输消息的方法.分享给大家供大家参考.具体分析如下: python开发简单socket程序在两台电脑之间传输消息,分为客户端和服务端,分别在两台电脑上运行后即可进行简单的消息传输,也可以在一台电脑上测试,设置两个不同的端口即可. # Save as server.py 服务端代码 # Message Receiver import os from socket import * host = "" port = 13000

  • python爬虫爬取快手视频多线程下载功能

    环境: python 2.7 + win10 工具:fiddler postman 安卓模拟器 首先,打开fiddler,fiddler作为http/https 抓包神器,这里就不多介绍. 配置允许https 配置允许远程连接 也就是打开http代理 电脑ip: 192.168.1.110 然后 确保手机和电脑是在一个局域网下,可以通信.由于我这边没有安卓手机,就用了安卓模拟器代替,效果一样的. 打开手机浏览器,输入192.168.1.110:8888   也就是设置的代理地址,安装证书之后才能

  • Python实现基于socket的udp传输与接收功能详解

    本文实例讲述了Python实现基于socket的udp传输与接收功能.分享给大家供大家参考,具体如下: udp的传输与接收 windows网络调试助手下载:https://pan.baidu.com/s/1IwBWeAzGUO1A3sCWl20ssQ 提取码:68gr 或者点击此处本站下载. 一.基本用法 1.创建套接字 udp_socket = socket.socket(socket.AF_INET,cosket.SOCK_DGRAM) localaddr = ("",port)

  • Python实现视频下载功能

    最近一两年短视频业务风生水起,各个视频网站都有各自特色的短视频内容.如果有这样一个程序,可以把各大视频网站的热门用户最新发布的视频都下载下来,不仅方便自己观看,还可以将没有版权的视频发布在个人社交网站上,增加自己的人气,岂不美哉? parker就是这样一个项目(项目地址:https://github.com/LiuRoy/parker),它采用celery框架定时爬取用户视频列表,将最新发布的视频通过you-get异步下载,可以很方便地实现分布式部署.因为各个网站的页面布局和接口更新比较频繁,为

  • Python实现Windows和Linux之间互相传输文件(文件夹)的方法

    项目中需要从Windows系统传输ISO文件到Linux测试系统,然后再Linux测试系统里安装这个ISO文件.所以就需要实现如何把文件从Windows系统传输到Linux系统中. 在项目中使用了pscp.exe这个工具,只要按照pscp.exe的使用说明操作即可.只要进入pscp.exe的安装位置,然后输入pscp即可查看pscp的使用说明. 下面是我机器上的: 使用Python实现也挺简单的,下面的code主要介绍4中情况: 1. windows传输文件到Linux 2. windows传输

随机推荐