# -*- coding: utf-8 -*- import cv2 import struct import pickle import zlib import time import threading from socket import * import psutil from pythonping import ping class Send_Video_Client(threading.Thread): # 只发送视频 def __init__(self, HOST, PORT, FX, SPD): threading.Thread.__init__(self) self.setDaemon(True) self.fx = FX # 压缩率 self.spd = SPD # 速率 self.ADDR = (HOST, PORT) self.sock = socket(AF_INET, SOCK_STREAM) self.cap = cv2.VideoCapture( 'C:/Users/Caner/Desktop/ichat0.2/Video_Socket/132.mp4') self.font = cv2.FONT_HERSHEY_SIMPLEX def __del__(self): self.sock.close() self.cap.release() pass def run(self): # 连接socket print('start connecting socket server...') while True: try: self.sock.connect_ex(self.ADDR) break except: print('restart connecting socket server...') time.sleep(3) continue # 发送视频 while self.cap.isOpened(): # 增加电量 battery = psutil.sensors_battery() percent = str(battery) if percent == 'None': percent = str(100) # 增加网速 # sent_before = psutil.net_io_counters().bytes_sent # 已发送的流量 # recv_before = psutil.net_io_counters().bytes_recv # 已接收的流量 # 增加网络测试 res = ping('www.baidu.com') delay = str(res.rtt_avg_ms) time.sleep(self.spd) res, frame = self.cap.read() # sent_now = psutil.net_io_counters().bytes_sent # net = round(((sent_now - sent_before) / 1024), 2) # 算出差值 arr = [delay, percent] text = "delay: {0[0]}ms power: {0[1]}% ".format(arr) if res: cv2.putText(frame, text, (0, 30), self.font, 1, (0, 0, 255), 2) 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: self.sock.sendall(struct.pack("L", len(zdata)) + zdata) except: print('client close:') break