流视频htmlPy

时间:2016-01-08 17:45:42

标签: javascript python multithreading video video-streaming

我使用htmlPy构建了一个python独立应用。我想要实现的目标是获得包含视频的iFrame。视频应该是网络摄像头正在录制的内容。我目前取得的成就是使用cv2获取视频,并尝试更新" div"使用JPG,并不断重复此过程。

我遇到的问题是当我尝试处理它时使用htmlPy,它在主线程中完成,阻止整个应用程序。当我尝试创建一个新线程时,新线程无法访问GUI(使用javascript,我甚至无法在新线程上执行console.log),无法正确更新GUI。

我必须收集信息并尝试更新HTML的代码如下:

class Camera(htmlPy.Object):

  def __init__(self,app):
    super(Camera,self).__init__()
    self.app = app
    return

  @htmlPy.Slot()
  def send_image_to_html(self,jpeg):
    b64 = base64.encodestring(jpeg)
    generatedImage = "<html><img src='data:image/png;base64,"+b64 +"'></html>"
    #js_to_eval = "$('#camera-div').html("+generatedImage+");}";
    js_to_eval = "console.log('Hello from new thread')"
    print("Eval: "+js_to_eval)
    self.app.evaluate_javascript(js_to_eval)  

  def setup_camera(self):
    vc = cv2.VideoCapture(0)
    if vc.isOpened(): # try to get the first frame
        rval, frame = vc.read()
    else:
        rval = False

    while rval:
        time.sleep(2)
        jpeg = cv2.imencode('.png', frame)[1]
        self.send_image_to_html(jpeg)
        rval, frame = vc.read()
        #key = cv2.waitKey(20)
        #if key == 27: # exit on ESC
        #    break


  @htmlPy.Slot()
  def start_camera(self):
    self.setup_camera()
    self.app.evaluate_javascript("console.log('Hello from back-end')")

正如您可能已经猜到的那样,我只能看到来自后端的&#34; Hello&#34; console.logs,但是我无法从新线程&#34;中看到&#34; Hello。

我想知道是否有使用Javascript,Jinja2(htmlPy使用jinja2)甚至flash更新GUI的任何解决方法。我的想法是这个小应用程序运行在覆盆子Pi上,所以我试图让事情变得尽可能简单。

此致

0 个答案:

没有答案