| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- # -*- 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
|