videoServer.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. from socket import *
  2. import threading
  3. import time
  4. import cv2
  5. import struct
  6. import pickle
  7. import zlib
  8. class VideoServer(threading.Thread):
  9. def __init__(self, ADDR, SPD, FX):
  10. threading.Thread.__init__(self)
  11. self.setDaemon(True)
  12. self.cap = cv2.VideoCapture(
  13. 'C:/Users/Caner/Desktop/ichat0.2/Video_Socket/132.mp4')
  14. self.spd = SPD
  15. self.fx = FX
  16. self.sock = socket(AF_INET, SOCK_STREAM)
  17. self.sock.bind(ADDR)
  18. self.sock.listen(1)
  19. pass
  20. def __del__(self):
  21. self.sock.close()
  22. self.cap.release()
  23. pass
  24. def run(self):
  25. # 添加用户
  26. while True:
  27. print('Waiting For Video Client Connection ...')
  28. client, addr = self.sock.accept() # 会阻塞
  29. print('New video User ', addr)
  30. while self.cap.isOpened():
  31. time.sleep(self.spd)
  32. res, frame = self.cap.read()
  33. if res:
  34. sframe = cv2.resize(frame, (0, 0), fx=self.fx, fy=self.fx)
  35. data = pickle.dumps(sframe)
  36. zdata = zlib.compress(data, zlib.Z_BEST_COMPRESSION)
  37. try:
  38. client.sendall(struct.pack("L", len(zdata)) + zdata)
  39. except:
  40. print('video client exit')
  41. client.close()
  42. break