Commit b88fdf62 authored by liyuanhong's avatar liyuanhong

做了一些优化

parent 9e675d61
......@@ -34,6 +34,11 @@ class StreamH264Flv():
# self.getGetPlayUrl = "http://fb-test.vandyo.com/video/streamInfo" # 获取推流播放地址的url
self.isGetPlayUrl = 0 # 是否已经获取了playUrl 0:没有 1:获取了
self.playUrl = "" # 视频播放地址
self.mainframe = None # 图形界面主窗体,用于弹出对话框
self.logTextCtr = None # 日志输出框,用于输出日志
self.pushStatusText = None # 状态显示窗
self.multiPushStatus = 0 # 多次推流标记, 0:该连接第一次推流 1:该连接第一次对流 2: 该连接第二次对流
self.timeStampSeek = 0 # 时间搓偏移,推理完成后设置为最后一帧的时间搓值;循环推流的时候需要加上该值
def setMobile(self,data):
......@@ -56,6 +61,12 @@ class StreamH264Flv():
self.isSend = data
def setIsEndPush(self,data):
self.isEndPush = data
def setMainFrame(self,data):
self.mainframe = data
def setLogTextCtr(self,data):
self.logTextCtr = data
def setPushStatusText(self,data):
self.pushStatusText = data
####################################################
......@@ -82,6 +93,8 @@ class StreamH264Flv():
def readFlvAndSend(self):
self.isSend = 1 # 控制暂停或继续推流
self.isEndPush = 0
self.isFileHead = 0
timeStamp = 0
with open(self.videoPath, 'rb') as fi:
con = fi.read(self.readSize)
data = con.hex()
......@@ -107,7 +120,12 @@ class StreamH264Flv():
tag = data[:tagSize * 2 + 30] # flv tag
tagType = self.getTagType(tag) # flv tag 类型,是音频 还是视频
AVtag = tag[30:] # 音视频 tag
if self.multiPushStatus < 1:
avTimeStamp = self.getAVTimeStamp(tag) #获取时间戳
timeStamp = avTimeStamp
else:
avTimeStamp = self.getAVTimeStamp(tag) + self.timeStampSeek # 获取时间戳
timeStamp = avTimeStamp
if avTimeStamp > 100:
if self.isGetPlayUrl == 0:
self.getPlayUrl(self.mobile,self.channel)
......@@ -130,7 +148,12 @@ class StreamH264Flv():
data = data[(tagSize * 2 + 30):]
else:
time.sleep(1)
self.client.close()
self.pushStatusText.SetValue("已连网")
timeCur = self.getCurTime()
self.multiPushStatus = self.multiPushStatus + 1
self.timeStampSeek = self.timeStampSeek + timeStamp + 5000
self.logTextCtr.WriteText(timeCur + "视频推流完,自动结束推流!\n")
# self.client.close()
####################################################
# 停止发送消息
......@@ -295,6 +318,16 @@ class StreamH264Flv():
frameData["frames"] = frames
return frameData
####################################################
# 获取当前时间
####################################################
def getCurTime(self):
timeCur = int(time.time() * 1000)
timeArray = time.localtime(timeCur / 1000)
timeCur = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
timeCur = "[" + timeCur + "] "
return timeCur
if __name__ == "__main__":
obj = StreamH264Flv()
......
......@@ -242,6 +242,10 @@ class CameraArea():
obj.setMobile(devId)
obj.setChannel(int(channel))
obj.setVideoPath(flvPath)
obj.setMainFrame(self.mainPanel)
obj.setLogTextCtr(self.logTextCtr)
obj.setPushStatusText(self.pushStatusText)
self.pushObj = obj
self.pushObj.connectServer()
timeCur = self.getCurTime()
......@@ -342,7 +346,7 @@ class CameraArea():
self.logTextCtr.WriteText(timeCur + "推流停止!\n")
self.pushStatusText.SetValue("连网")
self.pushObj.setIsEndPush(1)
self.pushObj = None
# self.pushObj = None
####################################################
......@@ -420,6 +424,10 @@ class CameraArea():
res = requests.post(self.getGetPlayUrl, data=json.dumps({'devId': devId, 'chan': str(channel)})).text
res = json.loads(res)
url = res["data"]["url"]
if self.getOsName() == "Windows":
m_command = ["ffplay.exe", url]
subprocess.run(m_command)
else:
m_command = ["ffplay", url]
CREATE_NO_WINDOW = 0x08000000
subprocess.run(m_command,creationflags=CREATE_NO_WINDOW)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment