纯python实现的视频监控客户端软件(三)

  • 继续
  • 我们继续上篇文章继续贴代码,以下部分是如何用诺基亚的QT5来创建一个界面应用程序,带输入框、按钮、文本区,以及视频显示区。


    class ClientDemo(QWidget):

    def __init__(self):

    super().__init__()

    #Init SDK

    self.sdk = HCNetSDK()

    self.sdk.NET_DVR_Init()

    self.sdk.NET_DVR_SetReconnect()

    self.lUserID = -1

    self.lRealHandle = -1

    #Dialog

    self.resize(1300, 850)

    self.setWindowTitle(‘ClientDemo’)

    #Layout

    self.hbl = QHBoxLayout()

    self.hbl2 = QHBoxLayout()

    self.hbl3 = QHBoxLayout()

    self.hbl4 = QHBoxLayout()

    self.vbl = QVBoxLayout()

    self.vbl.addLayout(self.hbl)

    self.vbl.addLayout(self.hbl2)

    self.vbl.addLayout(self.hbl3)

    self.vbl.addLayout(self.hbl4)

    self.setLayout(self.vbl)

    #Login Infomation

    self.lbIP = QLabel(‘IP’)

    self.eIP = QLineEdit()

    self.lbPort = QLabel(‘Port’)

    self.ePort = QLineEdit()

    self.lbUser = QLabel(‘User’)

    self.eUser = QLineEdit()

    self.lbPassword = QLabel(‘Password’)

    self.ePassword = QLineEdit()

    self.ePassword.setEchoMode(QLineEdit.Password)

    self.lbChannel = QLabel(‘Channel’)

    self.eChannel = QLineEdit()

    self.hbl.addWidget(self.lbIP)

    self.hbl.addWidget(self.eIP)

    self.hbl.addWidget(self.lbPort)

    self.hbl.addWidget(self.ePort)

    self.hbl.addWidget(self.lbUser)

    self.hbl.addWidget(self.eUser)

    self.hbl.addWidget(self.lbPassword)

    self.hbl.addWidget(self.ePassword)

    self.hbl.addWidget(self.lbChannel)

    self.hbl.addWidget(self.eChannel)

    #Button

    self.btnVersion = QPushButton(‘Version’)

    self.btnVersion.clicked.connect(self.onVersion)

    self.hbl2.addWidget(self.btnVersion)

    self.btnLogin = QPushButton(‘Login’)

    self.btnLogin.clicked.connect(self.onLogin)

    self.hbl2.addWidget(self.btnLogin)

    self.btnLogout = QPushButton(‘Logout’)

    self.btnLogout.clicked.connect(self.onLogout)

    self.hbl2.addWidget(self.btnLogout)

    self.btnLive = QPushButton(‘Live’)

    self.btnLive.clicked.connect(self.onLive)

    self.hbl2.addWidget(self.btnLive)

    self.btnCloseLive = QPushButton(‘Close Live’)

    self.btnCloseLive.clicked.connect(self.onCloseLive)

    self.hbl2.addWidget(self.btnCloseLive)

    #Screen

    self.Screen = QTextEdit()

    self.vbl.addWidget(self.Screen)

    #Load Config

    self.LoadConfig()

    def text(self, info):

    self.Screen.setText(info)

    def closeEvent(self, event):

    self.SaveConfig()

    event.accept()

    def checkLoginInfo(self):

    ip = self.eIP.text()

    port = self.ePort.text()

    user = self.eUser.text()

    password = self.ePassword.text()

    if ” == ip or ” == port or ” == user or ” == password:

    return False

    if not port.isdigit():

    return False

    return True

    def checkChannelInfo(self):

    channel = self.eChannel.text()

    if ” == channel or not channel.isdigit():

    return False

    return True

    def checkVideoParams(self):

    bright = self.eBright.text()

    contrast = self.eContrast.text()

    saturation = self.eSaturation.text()

    hue = self.eHue.text()

    if ” == bright or not bright.isdigit():

    return False

    if ” == contrast or not contrast.isdigit():

    return False

    if ” == saturation or not saturation.isdigit():

    return False

    if ” == hue or not hue.isdigit():

    return False

    return True

    def SaveConfig(self):

    if self.checkLoginInfo() and self.checkLoginInfo():

    ip = self.eIP.text()

    port = self.ePort.text()

    user = self.eUser.text()

    password = self.ePassword.text()

    channel = self.eChannel.text()

    di = dict(ip=ip, port=port, user=user, password=password, channel=channel)

    path = APP_PATH + ‘\clientdemo.conf’

    with open(path, ‘wb’) as f:

    pickle.dump(di, f)

    def LoadConfig(self):

    try:

    path = APP_PATH + ‘\clientdemo.conf’

    with open(path, ‘rb’) as f:

    di = pickle.load(f)

    self.eIP.setText(di[‘ip’])

    self.ePort.setText(di[‘port’])

    self.eUser.setText(di[‘user’])

    self.ePassword.setText(di[‘password’])

    self.eChannel.setText(di[‘channel’])

    except Exception as e:

    print(str(e))

    def onVersion(self):

    self.Screen.clear()

    ver = hex(self.sdk.NET_DVR_GetSDKVersion())

    build = hex(self.sdk.NET_DVR_GetSDKBuildVersion())

    self.text(‘SDK Version: ‘ + str(ver) + ‘rn’ + ‘Build Version: ‘ + str(build))

    def onLogin(self):

    if -1 == self.lUserID:

    if self.checkLoginInfo():

    self.lUserID = self.sdk.NET_DVR_Login(self.eIP.text(), int(self.ePort.text()), self.eUser.text(), self.ePassword.text())

    if -1 != self.lUserID:

    self.text(‘Login was successful’)

    else:

    self.text(‘Login was failed, Error Code: ‘ + str(self.sdk.NET_DVR_GetLastError()))

    else:

    self.text(‘Please input the correct parameters before login’)

    else:

    self.text(‘You have already logined’)

    def onLogout(self):

    if -1 != self.lUserID:

    self.sdk.NET_DVR_Logout(self.lUserID)

    self.lUserID = -1

    self.text(‘Logout was successful’)

    else:

    self.text(‘Now you are in logout status’)

    def onLive(self):

    if -1 != self.lUserID:

    if self.checkChannelInfo():

    if -1 != self.lRealHandle:

    self.sdk.NET_DVR_StopRealPlay(self.lRealHandle)

    self.lRealHandle = -1

    self.lRealHandle = self.sdk.NET_DVR_RealPlay(self.lUserID, int(self.eChannel.text()), self.Screen.winId())

    if -1 != self.lRealHandle:

    self.text(‘Live was successful’)

    else:

    self.text(‘Live was failed, Error Code: ‘ + str(self.sdk.NET_DVR_GetLastError()))

    else:

    self.text(‘Please input the correct parameters before live’)

    else:

    self.text(‘You have to login first’)

    def onCloseLive(self):

    if -1 != self.lRealHandle:

    self.sdk.NET_DVR_StopRealPlay(self.lRealHandle)

    self.lRealHandle = -1

    self.Screen.clear()

    self.text(‘Live closed’)

    else:

    self.text(‘No any live opened’)

    app = QApplication(sys.argv)

    dlg = ClientDemo()

    dlg.show()

    sys.exit(app.exec_())


  • 如何使用
  • 所有 test.py 的代码,全部贴出,你只需要拷贝运行即可,运行后会得到如上图的一个对话框,输入摄像机的IP地址、端口、用户名、密码、通道 ,首先点击 Login 登录,成功后,然后点击 Live按钮查看实时预览,就可以看到视频了。

  • 结语
  • 今天的内容来得简单粗暴,如果有问题可以在留言区留言,向你们要个大大的红星赞可以吗?

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2020年10月5日
    下一篇 2020年10月5日

    相关推荐