在PyQt4中显示视频流的最佳方法是什么?

时间:2016-01-30 15:04:36

标签: python qt 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小部件中显示这个流吗?

1 个答案:

答案 0 :(得分:3)

过了一会儿,我找到了解决方案。在这个例子中,我有一个我首先加载的.ui模板。在此窗口中有一个名为&#39; label&#39;的标签,其中我想加载我的流。你需要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)