这篇教程python实现不同电脑之间视频传输功能写得很实用,希望能帮到您。 1. imageZMQ库实现imageZMQ库链接:https://github.com/jeffbass/imagezmq 该库原本是用于树莓派上的视频传输,其包含很多示例,有兴趣可以去看看。 
上图中间的笔记本为发送端,其余两个屏幕显示的是接收端视频。本文视频传输实现的前提是确保发送端和接收端接在同一个局域网下。 发送端 import socketimport timeimport cv2import imagezmqimport tracebackimport 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 cv2import imagezmqimport tracebackimport timeimport simplejpeg# 接收发送端数据,输入发送端的ip地址image_hub = imagezmq.ImageHub(open_port='tcp://192.168.100.104:5555',REQ_REP=False)frame_count = 1time1 = 0while 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 socketimport cv2import sysimport numpy as npaddress = ('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 = 0while 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 socketimport sysimport cv2import numpy as npimport timeaddress = ('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 = 1while 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 += 1cli.close() 到此这篇关于python实现不同电脑之间视频传输的文章就介绍到这了,更多相关python视频传输内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net! 使用Python获取公众号下所有的文章 Python的子线程和子进程是如何手动结束的? |