我正在尝试使用此处的代码:http://pastie.org/7976455#165和我自己的OpenCV例程来显示MJPG流。
我毫不费力地设置了路由
import threading
import time
import tornado.ioloop
import tornado.web
from tornado import gen
import image_utils
class WebServer(threading.Thread):
def run(self):
paths = [(r"/(.*)\.jpg", WebJPEGHandler),
(r"/(.*)\.mjpg", WebMJPEGHandler)]
web = tornado.web.Application(paths,debug=True)
web.listen(listening_port)
tornado.ioloop.IOLoop.instance().start()
JPEG代码运行良好
class WebJPEGHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
@gen.coroutine
def get(self, quality):
image = image_utils.image_utils.getWebEncodedImage((detector.imageQ[-1]))
self.set_header("Content-type", "image/jpg")
self.write(str(image))
yield gen.Task(self.flush)
但我自己的MJPG代码实现(以及我尝试了一些变体)会导致Chrome无法显示网页消息。
class WebMJPEGHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
@gen.coroutine
def get(self, quality):
loop = tornado.ioloop.IOLoop.current()
self.served_image_timestamp = time.time()
self.set_header( 'Content-Type', 'multipart/x-mixed-replace;boundary=--boundarydonotcross')
my_boundary = "--boundarydonotcross\n"
while True:
img = image_utils.image_utils.getWebEncodedImage((detector.imageQ[-1]))
self.write(my_boundary)
self.write("Content-type: image/jpg")
self.write('Content-length: ' + str(len(img)))
self.write(str(img))
self.served_image_timestamp = time.time()
print 'Image sent'
time.sleep(0.5)
yield gen.Task(self.flush)
我可能错过了一些带有边界和标题的魔法,但请帮我弄清楚它是什么?即使在调试模式下,龙卷风本身也不会出错。
使用一些打印语句,当我转到127.0.0.1:5000/test.mjpg时,我可以看到它在2到4次循环之间,但随后停止并且没有显示任何内容。