首页 > 编程语言 >python实现不同电脑之间视频传输功能

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

时间:2024-02-21 17:36:52浏览次数:32  
标签:视频 python image cv2 传输 time print import frame

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

     这篇文章主要介绍了python实现不同电脑之间视频传输,本文视频传输实现的前提是确保发送端和接收端接在同一个局域网下,分为发送端和接收端,通过实例代码给大家介绍的非常详细,需要的朋友参考下吧  

1. imageZMQ库实现

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

在这里插入图片描述

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

发送端

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 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

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 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协议实现

在这里插入图片描述
发送端

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 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)

接收端

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 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视频传输内容请搜索脚本之家以前的文章或继续 

标签:视频,python,image,cv2,传输,time,print,import,frame
From: https://www.cnblogs.com/flyingsir/p/18025796

相关文章

  • 智慧安防/视频监控汇聚平台EasyCVR如何通过接口调用获取设备录像回看流地址?
    视频云存储/视频融合/安防监控EasyCVR视频汇聚系统可兼容各品牌的IPC、NVR、移动单兵、智能手持终端、移动执法仪、无人机、布控球等设备的接入,支持的接入协议包括:国标GB28181、RTSP/Onvif、RTMP,以及厂家的私有协议与SDK,如:海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云s......
  • Topaz Video AI:一键提升视频品质,智能重塑影像魅力 mac/win版
    TopazVideoAI是一款革命性的视频智能处理软件,它利用先进的机器学习和人工智能技术,为视频创作者提供了前所未有的视频增强和修复功能。无论您是专业视频编辑师、摄影师,还是热爱视频创作的爱好者,TopazVideoAI都能帮助您轻松提升视频质量,创造出更加生动、引人入胜的影像作品。→......
  • python 多进程交互
    frommultiprocessingimportProcess,QueueclassEngine:def__init__(self):self.info="EngineInfo"self.order_queue=Queue()#创建一个用于接收订单的队列self.orders=[]defget_info(self):returnself.info......
  • Python启动其他程序
    通过python脚本来启动其他的程序,一般使用subprocessimportsubprocess#启动Windows上的计算机程序subprocess.Popen('C:\\Windows\\System32\\calc.exe')#启动记事本,并打开text.txt文件,在该列表中第一个元素表示程序名称,后面的都是参数subprocess.Popen(['C:\\Windows......
  • python2 解决 unicode转中文问题
    importjson#避免\x0e问题importsysreload(sys)sys.setdefaultencoding('utf-8')#defbbb():#bbb={u"111":u"\u73bb\u7483"}printbbbprint(json.dumps(bbb).decode("unicode-escape"))de......
  • Python 机器学习工具 scikit-learn 的入门使用
    参考文档:https://www.scikitlearn.com.cn/通过对已有多组数据的训练,从而实现对单个数据的结果预测安装pipinstall-Uscikit-learnDemo通过使用sklearn包中的决策树DecisionTreeclassifier算法实现简单预测importsklearnfromsklearnimporttreefeature=[[178,1],......
  • python 播放 yuv
    mp4toyuvffmpeg-ivideo1.mp4video1.yuv使用python直接播放yuvimportcv2importnumpyasnpdefplay_yuv(file_path,width,height):yuv_file=open(file_path,'rb')frame_size=int(width*height*3/2)whileTrue:frame_......
  • 前端必学-40个精选案例实战-案例7-仿爱奇艺视频首页新片预告实战
    仿爱奇艺视频首页新片预告实战案例第一步:案例图片圆角制作、图片资源:代码:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname......
  • 【抖音】自动获取视频热度
    一、背景得益于移动互联网的发展,自媒体数量爆发式的增长,人人都是自媒体人,做自媒体运营,不可避免的需要获取自己发的视频或者同类Up主的热度数据做运营分析。一般发的数据较多,需一个视频一个视频的点进去,然后人工记录相关热度数据,非常的不方便,而且慢。这种规律重复的工作就非常适......
  • 【抖音】自动刷视频热度
    一、背景做抖音商家自媒体运营的朋友都碰到过一个问题,每次发布新视频后,为了提高视频热度,经常会做一些点赞、收藏刷取热度,提高视频的曝光度,但是每次在手机上手动处理会非常的麻烦,切换账号,找到Up的视频列表,一个一个的点进去点击热度按钮,整个过程枯燥无味。其实这种规律重复性的工......