所以,基本上我正在制作一个网络流媒体服务,并且我使用 opencv 和 Flask 在浏览器中流式传输网络摄像头视频:
def gen(camera):
frame = camera.get_frame()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame.tobytes() + b'\r\n')
@app.route('/video_feed')
def video_feed():
return Response(gen(Camera()),
mimetype='multipart/x-mixed-replace; boundary=frame')
这工作正常。现在,当用户查看网络摄像头(比如说面部点)时,我会生成一个数据流。我想使用子进程将此数据流式传输到浏览器。这是我到目前为止所写的:
服务器端
@app.route('/yield')
def conso():
def inner():
proc = subprocess.Popen( # where L is the stream of data
L,
shell=True,
stdout=subprocess.PIPE
)
for line in iter(proc.stdout.readline,''):
time.sleep(1)
yield ( line.rstrip() + b'\r\n')
return Response(inner(), mimetype='text/event-stream')
客户端
<script>
if (!!window.EventSource) {
var source = new EventSource('/yield');
source.onmessage = function(e) {
$("#data").text(e.data);
}
}
</script>
<div id="data">nothing received yet</div>
但是无法传输任何数据。它也没有给出任何错误。有人可以帮我确定问题出在哪里吗?
我曾经处理过这样的问题,那就是 $(#data) 选择器不起作用,您可以尝试使用 document.getElementById 来测试是否可以解决问题:
<script type='text/javascript'>
var source = new EventSource('/yield');
source.onmessage = function(event) {
document.getElementById("result").innerHTML += event.data + '<br>';
};
</script>