最近买了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_())
-
复制代码 |