| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- # -*- coding: utf-8 -*-
- from socket import *
- import threading
- import cv2
- import struct
- import pickle
- import zlib
- class Video_Client(threading.Thread):
- def __init__(self, HOST, PORT):
- threading.Thread.__init__(self)
- print('video clinet start')
- self.setDaemon(True)
- self.ADDR = (HOST, PORT)
- self.sock = socket(AF_INET, SOCK_STREAM)
- def __del__(self):
- self.sock.close()
- try:
- cv2.destroyAllWindows()
- except:
- pass
- def run(self):
- self.sock.connect_ex(self.ADDR)
- print("video client connected...")
- data = "".encode("utf-8")
- payload_size = struct.calcsize("L")
- cv2.namedWindow('Remote', cv2.WINDOW_NORMAL)
- while True:
- try:
- while len(data) < payload_size:
- data += self.sock.recv(81920)
- packed_size = data[:payload_size]
- data = data[payload_size:]
- msg_size = struct.unpack("L", packed_size)[0]
- while len(data) < msg_size:
- data += self.sock.recv(81920)
- zframe_data = data[:msg_size]
- data = data[msg_size:]
- frame_data = zlib.decompress(zframe_data)
- frame = pickle.loads(frame_data)
- try:
- cv2.imshow('Remote', frame)
- key = cv2.waitKey(10)
- if key == ord('q'):
- print('client exit')
- cv2.destroyAllWindows()
- self.sock.close()
- except:
- print('video server error')
- cv2.destroyAllWindows()
- self.sock.close()
- except:
- self.sock.close()
- try:
- cv2.destroyAllWindows()
- except:
- pass
- print('server close')
- break
|