video.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. from socket import *
  2. import threading
  3. import time
  4. import cv2
  5. import struct
  6. import pickle
  7. import zlib
  8. class Video_Server(threading.Thread):
  9. def __init__(self, HOST, PORT, FX, SPD):
  10. threading.Thread.__init__(self)
  11. self.setDaemon(True)
  12. self.ADDR = (HOST, PORT)
  13. self.sock = socket(AF_INET, SOCK_STREAM)
  14. self.sock.bind(self.ADDR) # 套接字绑定的IP与端口
  15. self.sock.listen(1) # 开始TCP监听,监听1个请求
  16. self.cap = cv2.VideoCapture(
  17. 'C:/Users/Caner/Desktop/ichat0.2/Video_Socket/132.mp4')
  18. self.fx = FX # 压缩率
  19. self.spd = SPD # 速率
  20. pass
  21. def __del__(self):
  22. self.sock.close()
  23. self.cap.release()
  24. pass
  25. def run(self):
  26. while True:
  27. print('wait NewClient connect...')
  28. conn, addr = self.sock.accept() # 会阻塞
  29. print('client connected:', 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. conn.sendall(struct.pack("L", len(zdata)) + zdata)
  39. except:
  40. print('client close:', addr)
  41. break