我试图用Django创建一个简单的视频流网站。我使用cv2启动网络摄像头和ZMQ从客户端到服务器传输数据。我发现了这个link,我用它编写了代码的联网部分。在
代码本身运行良好,但是当我创建一个简单的HTML文件来通过浏览器启动实时流时,代码失败并显示以下错误消息
zmq.error.ZMQError: Address in use
我想这个错误是因为Django使用的IP和ZMQ尝试使用的IP是相同的。但我不知道如何纠正这个错误。在
这是我目前为止的代码
from server import *
def index(request):
face_cascade_path = '../../../TRAINED MODELS/FACE/haarcascade_frontalface_default.xml'
footage_socket = start_server()
recv_content(footage_socket, face_cascade_path)
return render(request, 'index.html')
def start_client(request):
context = zmq.Context()
footage_socket = context.socket(zmq.PUB)
footage_socket.connect('tcp://192.168.1.18:5020')
print('connected to server')
print('starting video on client machine')
camera = cv2.VideoCapture(0) # init the camera
while True:
try:
grabbed, frame = camera.read() # grab the current frame
frame = cv2.resize(frame, (640, 480)) # resize the frame
frame = cv2.flip(frame, 1)
encoded, buffer = cv2.imencode('.jpg', frame)
jpg_as_text = base64.b64encode(buffer)
footage_socket.send(jpg_as_text)
except KeyboardInterrupt:
camera.release()
cv2.destroyAllWindows()
break
<html>
<head>
</head>
<body>
<div class='container'>
<h2>CAMERA SERVER CLIENT TEST</h2>
<p>
Click the start_client button to start camera. Each frame of the stream is sent to the server.
</p>
<p>
The camera code is running on the client side.
</p>
<a href ='start_client/'><button>start client</button></a>
</div>
</body>
</html>
请帮帮我。在
提前谢谢你
您应该采用另一个端口,而不是通常使用的
8000
端口。在另一个想法是任何套接字选项都必须放在ZMQ中的}方法之前。在
bind
或{所以你的代码应该是这样的:
[注意]:
不要忘记将客户端的端口(
.connect()
)更改为5020
。在[更新]:
try-except
更新了答案。 或者您可以使用footage_socket.close()
方法清除前一个套接字,或者设置一个条件来检查前一个套接字。在相关问题 更多 >
编程相关推荐