Python VLC+PyQt5 读取视频音频流

31 篇文章 14 订阅

下载,安装 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"))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值