| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- from socket import *
- import threading
- import time
- import cv2
- import struct
- import pickle
- import zlib
- class Video_Server(threading.Thread):
- def __init__(self, HOST, PORT, FX, SPD):
- threading.Thread.__init__(self)
- self.setDaemon(True)
- self.ADDR = (HOST, PORT)
- self.sock = socket(AF_INET, SOCK_STREAM)
- self.sock.bind(self.ADDR) # 套接字绑定的IP与端口
- self.sock.listen(1) # 开始TCP监听,监听1个请求
- self.cap = cv2.VideoCapture(
- 'C:/Users/Caner/Desktop/ichat0.2/Video_Socket/132.mp4')
- self.fx = FX # 压缩率
- self.spd = SPD # 速率
- pass
- def __del__(self):
- self.sock.close()
- self.cap.release()
- pass
- def run(self):
- while True:
- print('wait NewClient connect...')
- conn, addr = self.sock.accept() # 会阻塞
- print('client connected:', addr)
- 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:
- conn.sendall(struct.pack("L", len(zdata)) + zdata)
- except:
- print('client close:', addr)
- break
|