我已经设置了客户端和服务器程序,使其可以在localhost上正常运行,当通过ip传送时,它们几乎完全无用。服务器发送视频数据,客户端通过本地主机完美接收它,但是一旦进行了实际测试,它每隔一秒钟只能获得大约1个有用的帧。其余部分则向上严重拉伸。最糟糕的例子>> https://imgur.com/a/RtGVNNh
在将try / except放入客户端文件之前,它将播放一帧彩色的竖线,然后在抱怨所给图像没有高度或宽度的情况下崩溃。
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)
当然这不是一个无法解决的问题。即使我必须完全改变我发送和接收数据的方式,这也是完全可以接受的。如果您可以帮助我了解它为什么这样做以及如何解决它,那将是很好的。