万能监控客户端软件_纯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) + '' + '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_())


  • 如何使用
ff74d48e34721195a4be26bf745b3f13.png

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

  • 结语

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值