apache 发表于 2012-11-23 22:01:17

在PyQt4窗体中播放mjpg-streamer输出视频

   最近买了TP-LINK703N路由器,按照论坛中的资料成功刷入openwrt。安装mjpg-streamer后,可正常在网页中观看视频。后面打算自己写个上位机程序,就研究了下如何用在基于PyQt4的窗口中播放视频。以下示例代码可正常播放视频,希望对有相同需求的同学有所帮助。

两个文件:PyStreamClientUi.py,PyStreamClient.py。双击PyStreamClient.py运行# -*- coding: utf-8 -*-
#filename: PyStreamClientUi.py
# Form implementation generated from reading ui file 'StreamClient.ui'
#
# Created: Fri Nov 23 21:50:32 2012
#      by: PyQt4 UI code generator 4.8.3
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s

class Ui_PyStreamClientForm(object):
    def setupUi(self, PyStreamClientForm):
      PyStreamClientForm.setObjectName(_fromUtf8("PyStreamClientForm"))
      PyStreamClientForm.resize(345, 259)
      self.label = QtGui.QLabel(PyStreamClientForm)
      self.label.setGeometry(QtCore.QRect(10, 10, 320, 240))
      self.label.setFrameShape(QtGui.QFrame.StyledPanel)
      self.label.setText(_fromUtf8(""))
      self.label.setObjectName(_fromUtf8("label"))

      self.retranslateUi(PyStreamClientForm)
      QtCore.QMetaObject.connectSlotsByName(PyStreamClientForm)

    def retranslateUi(self, PyStreamClientForm):
      PyStreamClientForm.setWindowTitle(QtGui.QApplication.translate("PyStreamClientForm", "PyStreamClient", None, QtGui.QApplication.UnicodeUTF8))

#-*- coding: utf-8 -*-
#author: apache
#filename: PyStreamClient.py

import sys, httplib
from PyQt4.QtGui import QWidget, QApplication, QPixmap
from PyQt4.QtCore import QTimer
from PyStreamClientUi import Ui_PyStreamClientForm

class QueryImage:
    def __init__(self, host, port, argv="/?action=snapshot"):
      self.host = host
      self.port = port
      self.argv = argv
      
    def queryImage(self):
      http = httplib.HTTP(self.host, self.port)
      http.putrequest('GET', self.argv)
      http.putheader('Host', self.host)
      http.putheader('User-agent', 'python-httplib')
      http.putheader('Content-type', 'image/jpeg')
      http.endheaders()
      (returncode, returnmsg, headers) = http.getreply()
      if returncode != 200:
            print returncode, returnmsg
            return None
            
      return http.getfile().read()
      
class StreamClientForm(QWidget):
    TIMEOUT = 50
    def __init__(self, parent=None):
      QWidget.__init__(self, parent)
      self.ui = Ui_PyStreamClientForm()
      self.queryImage = QueryImage("192.168.2.1", 8080)
      self.timer = QTimer(timeout=self.playStream)
      self.__setup()
      
    def __setup(self):
      self.ui.setupUi(self)
      self.timer.start(StreamClientForm.TIMEOUT)
   
    def transToPixmap(self):
      data = self.queryImage.queryImage()
      if not data:
            return None
      pixmap = QPixmap()
      pixmap.loadFromData(data)
      return pixmap
      
    def playStream(self):
      pixmap = self.transToPixmap()
      if pixmap:
            self.ui.label.setPixmap(pixmap)
      else:
            print "frame lost"
            
if __name__ == "__main__":
    app = QApplication(sys.argv)
    app.setStyle("plastique")
    form = StreamClientForm()
    form.show()
    sys.exit(app.exec_())
   

florgx 发表于 2013-2-26 12:26:13

请问楼主,用的703N刷的openwrt挂载的是什么摄像头?UVC的摄像头要怎么安装驱动呢?
页: [1]
查看完整版本: 在PyQt4窗体中播放mjpg-streamer输出视频