video.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. # -*- coding: utf-8 -*-
  2. import cv2
  3. import struct
  4. import pickle
  5. import zlib
  6. import time
  7. import threading
  8. from socket import *
  9. import psutil
  10. from pythonping import ping
  11. class Send_Video_Client(threading.Thread):
  12. # 只发送视频
  13. def __init__(self, HOST, PORT, FX, SPD):
  14. threading.Thread.__init__(self)
  15. self.setDaemon(True)
  16. self.fx = FX # 压缩率
  17. self.spd = SPD # 速率
  18. self.ADDR = (HOST, PORT)
  19. self.sock = socket(AF_INET, SOCK_STREAM)
  20. self.cap = cv2.VideoCapture(
  21. 'C:/Users/Caner/Desktop/ichat0.2/Video_Socket/132.mp4')
  22. self.font = cv2.FONT_HERSHEY_SIMPLEX
  23. def __del__(self):
  24. self.sock.close()
  25. self.cap.release()
  26. pass
  27. def run(self):
  28. # 连接socket
  29. print('start connecting socket server...')
  30. while True:
  31. try:
  32. self.sock.connect_ex(self.ADDR)
  33. break
  34. except:
  35. print('restart connecting socket server...')
  36. time.sleep(3)
  37. continue
  38. # 发送视频
  39. while self.cap.isOpened():
  40. # 增加电量
  41. battery = psutil.sensors_battery()
  42. percent = str(battery)
  43. if percent == 'None':
  44. percent = str(100)
  45. # 增加网速
  46. # sent_before = psutil.net_io_counters().bytes_sent # 已发送的流量
  47. # recv_before = psutil.net_io_counters().bytes_recv # 已接收的流量
  48. # 增加网络测试
  49. res = ping('www.baidu.com')
  50. delay = str(res.rtt_avg_ms)
  51. time.sleep(self.spd)
  52. res, frame = self.cap.read()
  53. # sent_now = psutil.net_io_counters().bytes_sent
  54. # net = round(((sent_now - sent_before) / 1024), 2) # 算出差值
  55. arr = [delay, percent]
  56. text = "delay: {0[0]}ms power: {0[1]}% ".format(arr)
  57. if res:
  58. cv2.putText(frame, text, (0, 30), self.font, 1, (0, 0, 255), 2)
  59. sframe = cv2.resize(frame, (0, 0), fx=self.fx, fy=self.fx)
  60. data = pickle.dumps(sframe)
  61. zdata = zlib.compress(data, zlib.Z_BEST_COMPRESSION)
  62. try:
  63. self.sock.sendall(struct.pack("L", len(zdata)) + zdata)
  64. except:
  65. print('client close:')
  66. break