from socket import * import threading import time import cv2 import struct import pickle import zlib class Video_Server(threading.Thread): def __init__(self, HOST, PORT, FX, SPD): threading.Thread.__init__(self) self.setDaemon(True) self.ADDR = (HOST, PORT) self.sock = socket(AF_INET, SOCK_STREAM) self.sock.bind(self.ADDR) # 套接字绑定的IP与端口 self.sock.listen(1) # 开始TCP监听,监听1个请求 self.cap = cv2.VideoCapture( 'C:/Users/Caner/Desktop/ichat0.2/Video_Socket/132.mp4') self.fx = FX # 压缩率 self.spd = SPD # 速率 pass def __del__(self): self.sock.close() self.cap.release() pass def run(self): while True: print('wait NewClient connect...') conn, addr = self.sock.accept() # 会阻塞 print('client connected:', addr) while self.cap.isOpened(): time.sleep(self.spd) res, frame = self.cap.read() if res: sframe = cv2.resize(frame, (0, 0), fx=self.fx, fy=self.fx) data = pickle.dumps(sframe) zdata = zlib.compress(data, zlib.Z_BEST_COMPRESSION) try: conn.sendall(struct.pack("L", len(zdata)) + zdata) except: print('client close:', addr) break