У меня есть клиентские и серверные программы, которые отлично работают на локальном хосте, которые становятся практически бесполезными при передаче по ip. Сервер отправляет видеоданные, и они безупречно принимаются клиентом через localhost, но как только они введены в реальный тест, они могут получить только около 1 полезного кадра в секунду. Остальные сильно растянуты вверх. Пример этого в худшем случае >> https://imgur.com/a/RtGVNNh
До того, как попытка / исключение была помещена в файл клиента, он проигрывал один кадр разноцветных вертикальных полос, а затем падал, жалуясь на то, что данное изображение не имеет высоты или ширины.
cameraClient.py
import socket
import cv2
import numpy as np
ip = "insert ip"
port = 4001
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(3)
sock.connect((ip, port))
while True:
try:
buff = sock.recv(921664)
nparr = np.frombuffer(buff, np.uint8)
newFrame = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
cv2.imshow("s", newFrame)
except:
pass
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cameraServer.py
import cv2
import socket
host = ''
port = 4001
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("Preparing webcam.")
vid = cv2.VideoCapture(0)
print("Webcam ready, waiting for client connection.")
sock.bind((host, port))
sock.listen(3)
conn, addr = sock.accept()
while True:
if vid.isOpened():
empty, frame = vid.read()
data = cv2.imencode('.jpg', frame)[1].tostring()
conn.send(data)
Конечно, это не неразрешимая проблема. Даже если мне нужно полностью изменить способ отправки и получения данных, это вполне приемлемо. Если вы можете помочь мне понять, почему это происходит, а также как это исправить, было бы замечательно.