在Python中使用龙卷风提供MJPEG流

时间:2015-03-25 21:20:51

标签: python tornado mjpeg

我正在尝试使用此处的代码: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次循环之间,但随后停止并且没有显示任何内容。

0 个答案:

没有答案