2016-01-30 151 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) 
相關問題