from socket import * import threading import time import cv2 import struct import pickle import zlib class VideoServer(threading.Thread): def __init__(self, ADDR, SPD, FX): threading.Thread.__init__(self) self.setDaemon(True) self.cap = cv2.VideoCapture( 'C:/Users/Caner/Desktop/ichat0.2/Video_Socket/132.mp4') self.spd = SPD self.fx = FX self.sock = socket(AF_INET, SOCK_STREAM) self.sock.bind(ADDR) self.sock.listen(1) pass def __del__(self): self.sock.close() self.cap.release() pass def run(self): # 添加用户 while True: print('Waiting For Video Client Connection ...') client, addr = self.sock.accept() # 会阻塞 print('New video User ', 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: client.sendall(struct.pack("L", len(zdata)) + zdata) except: print('video client exit') client.close() break