# -*- coding: utf-8 -*- from socket import * import threading import time import cv2 import struct import pickle import zlib class Video_Server(threading.Thread): def __init__(self, USERLIST, USER, BUFSIZE, 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.USERLIST = USERLIST self.USER = USER self.BUFSIZE = BUFSIZE self.ADDR = ADDR self.spd = SPD self.fx = FX pass def __del__(self): if self.USER in self.USERLIST: self.USER.close() self.USERLIST.remove(self.USER) self.cap.release() pass def run(self): # 添加用户 self.USERLIST.append(self.USER) 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: self.USER.sendall(struct.pack("L", len(zdata)) + zdata) except: self.USER.close() self.USERLIST.remove(self.USER) self.cap.release() print('client close:', time.ctime(), len(self.USERLIST)) break