下载,安装 VLC
从http://download.videolan.org/pub/videolan/vlc/下载对应版本的VLC Portable文件
下载安装 win64 版本的软件安装包
安装好。
安装 python-VLC 插件包
pip install python-vlc
安装完成后 可以开始测试了 VLC 插件包一定 是依赖于VLC软件的,如果只安装VLC python插件 是不能使用的。
使用QT做ui 使用VLC读取网络相机视频码流。
由于相机厂家的不知道为什么不能使用 opencv cv2.videocapture 来直接拉取视频流。 但是厂家推举使用VLC插件可以读取到码流。查了资料 vlc也有python插件。于是直接使用VLC +QT来显示视频码流。
下面上代码。
#!/usr/bin/env python
import nmap # import nmap.py module
import sys
import vlc
from PyQt5.QtCore import QStringListModel
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
from MainWin import *
class MyWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
self.setupUi(self)
self.qList = [] # 存储ip列表
# creating a basic vlc instance
self.instance = vlc.Instance()
# creating an empty vlc media player
self.mplayer = self.instance.media_player_new()
self.listView.clicked.connect(self.clickedlist) # listview 的点击事件
self.ButScanIP.clicked.connect(self.ScanIP_do)
self.ButOpenCamera.clicked.connect(self.openCamera) #打开相机显示图像
def openCamera(self,):
"""
打开相机开始显示
:return:
"""
media = self.instance.media_new("rtsp://192.168.1.173:8554/live1.264")
media.get_mrl()
self.mplayer.set_media(media)
self.mplayer.set_hwnd(self.playWidget.winId()) #设定Qt窗体的控件的 句柄为显示窗口
self.mplayer.play() #开始显示
def PlayPause(self):
if self.mediaplayer.is_playing():
return
else:
if self.mediaplayer.play() == -1:
self.openCamera()
return
self.mediaplayer.play()
def updateUI(self):
self.positionslider.setValue(self.mediaplayer.get_position() * 1000)
if not self.mediaplayer.is_playing():
return
def clickedlist(self, qModelIndex):
QMessageBox.information(self, "QListView", "你选择了: " + self.qList[qModelIndex.row()])
print("点击的是:" + str(qModelIndex.row()))
def ScanIP_do(self):
nm = nmap.PortScanner() # instantiate nmap.PortScanner object
nm.scan(hosts='192.168.1.0/24', arguments='-n -sP -PE -PA21,23,80,3389')
hosts_list = [(x, nm[x]['status']['state']) for x in nm.all_hosts()]
slm = QStringListModel(); # 创建mode
self.qList.clear() #重置清空列表
for host, status in hosts_list:
self.qList.append('{0}:{1}'.format(host, status))
print('{0}:{1}'.format(host, status))
slm.setStringList(self.qList) # 将数据设置到model
self.listView.setModel(slm) ##绑定 listView 和 model
if __name__ == '__main__':
app = QApplication(sys.argv)
myWin = MyWindow()
myWin.show()
sys.exit(app.exec_())
UI代码。
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'MainWin.ui'
#
# Created by: PyQt5 UI code generator 5.15.1
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(749, 655)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.listView = QtWidgets.QListView(self.centralwidget)
self.listView.setGeometry(QtCore.QRect(110, 0, 221, 91))
self.listView.setObjectName("listView")
self.playWidget = QtWidgets.QWidget(self.centralwidget)
self.playWidget.setEnabled(True)
self.playWidget.setGeometry(QtCore.QRect(10, 110, 720, 480))
self.playWidget.setMinimumSize(QtCore.QSize(720, 480))
self.playWidget.setAutoFillBackground(False)
self.playWidget.setObjectName("playWidget")
self.layoutWidget = QtWidgets.QWidget(self.centralwidget)
self.layoutWidget.setGeometry(QtCore.QRect(10, 10, 94, 54))
self.layoutWidget.setObjectName("layoutWidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.ButOpenCamera = QtWidgets.QPushButton(self.layoutWidget)
self.ButOpenCamera.setObjectName("ButOpenCamera")
self.verticalLayout.addWidget(self.ButOpenCamera)
self.ButScanIP = QtWidgets.QPushButton(self.layoutWidget)
self.ButScanIP.setObjectName("ButScanIP")
self.verticalLayout.addWidget(self.ButScanIP)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 749, 23))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.ButOpenCamera.setText(_translate("MainWindow", "打开视频"))
self.ButScanIP.setText(_translate("MainWindow", "点击扫描内网IP"))