| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- # -*- 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
|