2016-01-30 103 views
1

我有一台不断发送视频流的服务器。这实际上只是一个不断的图像流。在PyQt4中显示视频流的最佳方式是什么?

我可以通过加载下面的HTML页面显示在浏览器中该流:

<!DOCTYPE html> 
<html><body> 
<h2>Video:</h2> 
<img src='http://192.168.1.100:8081/' style='width:304px;height:228px;'> 
</body></html> 

现在我想在我建立一个PyQt的应用程序加载此流。 当我在QWebView中尝试这个时,它不会加载图像。我也试过将它加载到QPixmap中。什么都没有

所以现在我想知道,是否有一种简单的方法在QT小部件中显示此流?

回答

2

过了一段时间,我找到了解决方案。在这个例子中,我有一个我首先加载的.ui模板。在这个窗口中是一个名为'label'的标签,我想在其中加载我的流。你将需要openCV。

class videoThread(QThread): 

    def __init__(self,address): 
     super(videoThread,self).__init__() 
     self.ip = address 

    def run(self): 
     cap = cv2.VideoCapture("http://"+ str(self.ip) + 
      ":8081/?action=stream?dummy=param.mjpg") 
     while cap.isOpened(): 
      _,frame = cap.read() 
      # adjust width en height to the preferred values 
      image = QImage(frame.tostring(),640,480,QImage.Format_RGB888) 
       .rgbSwapped() 
      self.emit(SIGNAL('newImage(QImage)'), image) 

class MyGui(QMainWindow): 
    """ 
     My gui implementation 
    """ 
    def __init__(self,template): 
     super(MyGui,self).__init__() 
     uic.loadUi(template,self) 

     #video stream 
     self.video = videoThread("192.168.1.100") 
     self.video.start() 
     #my label is named label 
     self.label.connect(self.video,SIGNAL('newImage(QImage)'),self.setFrame) 

    def setFrame(self,frame): 
     pixmap = QPixmap.fromImage(frame) 
     self.label.setPixmap(pixmap) 
相关问题