video.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. # -*- coding: utf-8 -*-
  2. from socket import *
  3. import threading
  4. import time
  5. import cv2
  6. import struct
  7. import pickle
  8. import zlib
  9. class Video_Server(threading.Thread):
  10. def __init__(self, USERLIST, USER, BUFSIZE, ADDR, SPD, FX):
  11. threading.Thread.__init__(self)
  12. self.setDaemon(True)
  13. self.cap = cv2.VideoCapture(
  14. 'C:/Users/Caner/Desktop/ichat0.2/Video_Socket/132.mp4')
  15. self.USERLIST = USERLIST
  16. self.USER = USER
  17. self.BUFSIZE = BUFSIZE
  18. self.ADDR = ADDR
  19. self.spd = SPD
  20. self.fx = FX
  21. pass
  22. def __del__(self):
  23. if self.USER in self.USERLIST:
  24. self.USER.close()
  25. self.USERLIST.remove(self.USER)
  26. self.cap.release()
  27. pass
  28. def run(self):
  29. # 添加用户
  30. self.USERLIST.append(self.USER)
  31. while self.cap.isOpened():
  32. time.sleep(self.spd)
  33. res, frame = self.cap.read()
  34. if res:
  35. sframe = cv2.resize(
  36. frame, (0, 0), fx=self.fx, fy=self.fx)
  37. data = pickle.dumps(sframe)
  38. zdata = zlib.compress(data, zlib.Z_BEST_COMPRESSION)
  39. try:
  40. self.USER.sendall(struct.pack("L", len(zdata)) + zdata)
  41. except:
  42. self.USER.close()
  43. self.USERLIST.remove(self.USER)
  44. self.cap.release()
  45. print('client close:', time.ctime(), len(self.USERLIST))
  46. break