Commit 43363024 authored by liyuanhong's avatar liyuanhong

完成了flv视频的压力测试脚本2

parent 0b5d2c53
...@@ -9,10 +9,6 @@ from lib.socket.ClientSocket import ClientSocket ...@@ -9,10 +9,6 @@ from lib.socket.ClientSocket import ClientSocket
logging.basicConfig(level = logging.INFO,format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s') logging.basicConfig(level = logging.INFO,format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
# http://10.100.11.125:8085/live?port=1985&app=vandyo&stream=013146201117-1
# http://10.16.15.85:8085/live?port=1985&app=vandyo&stream=013146201117-3
# http://localhost:3333/video/013146201117-3
from lib.protocal.Protocal_1078 import Protocal_1078 from lib.protocal.Protocal_1078 import Protocal_1078
...@@ -24,10 +20,8 @@ class StreamH264(): ...@@ -24,10 +20,8 @@ class StreamH264():
self.mobile = "013146201117" # 手机号 self.mobile = "013146201117" # 手机号
self.channel = 1 # 频道号 self.channel = 1 # 频道号
self.host = "10.100.11.125" # self.host = "10.100.11.125" # 开发环境
# self.host = "10.16.12.249" self.host = "10.100.12.3" # 测试环境
# self.host = "10.100.12.3"
# self.host = "localhost"
self.port = 1078 self.port = 1078
self.client = None self.client = None
self.BUF_SIZE = 2048 self.BUF_SIZE = 2048
......
#coding: utf-8 #coding: utf-8
import binascii import binascii
import json
import re
import socket import socket
import time import time
import requests
from lib.protocal.Protocal_1078 import Protocal_1078 from lib.protocal.Protocal_1078 import Protocal_1078
from lib.socket.ClientSocket import ClientSocket from lib.socket.ClientSocket import ClientSocket
...@@ -21,11 +25,13 @@ class StreamH264Flv(): ...@@ -21,11 +25,13 @@ class StreamH264Flv():
self.isSendAudio = 1 # 是否发送音频0:不发送 1:发送 self.isSendAudio = 1 # 是否发送音频0:不发送 1:发送
# self.host = "10.100.11.125" # 开发环境 # self.host = "10.100.11.125" # 开发环境
# self.host = "10.16.12.249"
self.host = "10.100.12.3" # 测试环境 self.host = "10.100.12.3" # 测试环境
# self.host = "localhost"
self.port = 1078 self.port = 1078
self.videoPath = "../../flv/bbb3.flv" # 要推流的视频路劲 self.videoPath = "../../flv/bbb3.flv" # 要推流的视频路劲
self.getGetPlayUrl = "http://10.100.11.110:9999/video/streamInfo" # 获取推流播放地址的url
# self.getGetPlayUrl = "http://fb-test.vandyo.com/video/streamInfo" # 获取推流播放地址的url
self.isGetPlayUrl = 0 # 是否已经获取了playUrl 0:没有 1:获取了
self.playUrl = "" # 视频播放地址
def setMobile(self,data): def setMobile(self,data):
self.mobile = data self.mobile = data
...@@ -83,6 +89,10 @@ class StreamH264Flv(): ...@@ -83,6 +89,10 @@ class StreamH264Flv():
tagType = self.getTagType(tag) # flv tag 类型,是音频 还是视频 tagType = self.getTagType(tag) # flv tag 类型,是音频 还是视频
AVtag = tag[30:] # 音视频 tag AVtag = tag[30:] # 音视频 tag
avTimeStamp = self.getAVTimeStamp(tag) #获取时间戳 avTimeStamp = self.getAVTimeStamp(tag) #获取时间戳
if avTimeStamp > 100:
if self.isGetPlayUrl == 0:
self.getPlayUrl(self.mobile,self.channel)
self.isGetPlayUrl = 1
if tagType == "08": # 音频 if tagType == "08": # 音频
AVdata = AVtag[4:] # 音频数据 AVdata = AVtag[4:] # 音频数据
frameInfo = self.getAudioFrame(AVtag) frameInfo = self.getAudioFrame(AVtag)
...@@ -100,6 +110,26 @@ class StreamH264Flv(): ...@@ -100,6 +110,26 @@ class StreamH264Flv():
data = data[(tagSize * 2 + 30):] data = data[(tagSize * 2 + 30):]
self.client.close() self.client.close()
####################################################
# 获取视频播放地址
####################################################
def getPlayUrl(self,mobile,channel):
res = requests.post(self.getGetPlayUrl, data=json.dumps({'devId': mobile,'chan': str(channel)})).text
res = json.loads(res)
url = res["data"]["url"]
# url = self.replaceHost(res["data"]["url"],"video-test.vandyo.com:")
print("播放地址:" + url)
####################################################
# 替换url的host
####################################################
def replaceHost(self,url,replaceWord):
data = url
strinfo = re.compile('(\d+.\d+.\d+.\d+.:)')
result = strinfo.sub(replaceWord, data)
return result
#################################################### ####################################################
# 发送视频帧 # 发送视频帧
#################################################### ####################################################
...@@ -240,13 +270,15 @@ class StreamH264Flv(): ...@@ -240,13 +270,15 @@ class StreamH264Flv():
if __name__ == "__main__": if __name__ == "__main__":
obj = StreamH264Flv() obj = StreamH264Flv()
obj.setSendDur(0.003) obj.setSendDur(0.007)
obj.setIsSendAudio(1) obj.setIsSendAudio(1)
obj.setMobile("013146201117") # obj.setMobile("013146201117")
obj.setMobile("142043390091")
obj.setChannel(1) obj.setChannel(1)
obj.setHost("10.100.12.3") # obj.setHost("10.100.12.3")
obj.setHost("video-test.vandyo.com")
obj.setPort(1078) obj.setPort(1078)
obj.setVideoPath("../../flv/bbb3.flv") obj.setVideoPath("../../flv/yyy.flv")
obj.connectServer() obj.connectServer()
obj.readFlvAndSend() obj.readFlvAndSend()
#coding: utf-8 #coding: utf-8
import json
import re
import threading import threading
import time import time
import cv2 import cv2
import requests
from lib.service.StreamH264Flv import StreamH264Flv from lib.service.StreamH264Flv import StreamH264Flv
...@@ -16,6 +20,8 @@ class FlvPressureTest(): ...@@ -16,6 +20,8 @@ class FlvPressureTest():
self.port = 1078 self.port = 1078
self.sendDur = 0.005 # socket消息发送间隔 self.sendDur = 0.005 # socket消息发送间隔
self.isShowFrame = 0 # 拉流是否展示画面 0:不展示 1:展示 self.isShowFrame = 0 # 拉流是否展示画面 0:不展示 1:展示
self.getGetPlayUrl = "http://10.100.11.110:9999/video/streamInfo" # 获取推流播放地址的url
# self.getGetPlayUrl = "http://fb-test.vandyo.com/video/streamInfo" # 获取推流播放地址的url
self.threadInfo = {} # 存放线程集 self.threadInfo = {} # 存放线程集
self.threadInfo["threadObj"] = {} self.threadInfo["threadObj"] = {}
...@@ -28,7 +34,6 @@ class FlvPressureTest(): ...@@ -28,7 +34,6 @@ class FlvPressureTest():
self.threadInfoPull["failT"] = {} self.threadInfoPull["failT"] = {}
self.isOpenPullStream = 1 # 是否开启视频拉流 0:不 1:是 self.isOpenPullStream = 1 # 是否开启视频拉流 0:不 1:是
self.pullUrl = "http://10.100.11.125:8085/live?port=1985&app=vandyo&stream="
def setTerNum(self, data): def setTerNum(self, data):
self.terNum = data self.terNum = data
...@@ -53,7 +58,8 @@ class FlvPressureTest(): ...@@ -53,7 +58,8 @@ class FlvPressureTest():
cloudMirror.readFlvAndSend() cloudMirror.readFlvAndSend()
def testServicePull(self, mobile): def testServicePull(self, mobile):
pullUrl = self.pullUrl + mobile + "-" + str(self.channel) pullUrl = self.getPlayUrl(mobile,self.channel)
# pullUrl = self.replaceHost(pullUrl, "video-test.vandyo.com:")
cap = cv2.VideoCapture(pullUrl) cap = cv2.VideoCapture(pullUrl)
while (cap.isOpened()): while (cap.isOpened()):
ret, frame = cap.read() ret, frame = cap.read()
...@@ -83,6 +89,7 @@ class FlvPressureTest(): ...@@ -83,6 +89,7 @@ class FlvPressureTest():
print(threadId + "启动了:" + mobile + "-" + str(self.channel)) print(threadId + "启动了:" + mobile + "-" + str(self.channel))
def runPull(self, mobile, threadId): def runPull(self, mobile, threadId):
time.sleep(1)
pullThread = threading.Thread(target=self.testServicePull, args=(mobile,)) pullThread = threading.Thread(target=self.testServicePull, args=(mobile,))
self.threadInfoPull["threadObj"][threadId] = pullThread self.threadInfoPull["threadObj"][threadId] = pullThread
pullThread.start() pullThread.start()
...@@ -104,15 +111,33 @@ class FlvPressureTest(): ...@@ -104,15 +111,33 @@ class FlvPressureTest():
self.runPull(mobile, threadPullId) self.runPull(mobile, threadPullId)
time.sleep(0.01) time.sleep(0.01)
####################################################
# 获取视频播放地址
####################################################
def getPlayUrl(self,mobile,channel):
res = requests.post(self.getGetPlayUrl, data=json.dumps({'devId': mobile,'chan': str(channel)})).text
res = json.loads(res)
return res["data"]["url"]
####################################################
# 替换url的host
####################################################
def replaceHost(self,url,replaceWord):
data = url
strinfo = re.compile('(\d+.\d+.\d+.\d+.:)')
result = strinfo.sub(replaceWord, data)
return result
if __name__ == "__main__": if __name__ == "__main__":
test = FlvPressureTest() test = FlvPressureTest()
test.setHost("10.100.12.3") test.setHost("10.100.11.125")
# test.setHost("video-test.vandyo.com")
test.setPort(1078) test.setPort(1078)
test.setMobileStart(10000000000) test.setMobileStart(10000000000)
test.setChannel(1) test.setChannel(1)
test.setTerNum(2) test.setTerNum(1)
test.setIsOpenPullStream(1) # 设置是否开启拉流 test.setIsOpenPullStream(1) # 设置是否开启拉流
test.setIsShowFrame(1) # 拉流是否显示预览画面 test.setIsShowFrame(0) # 拉流是否显示预览画面
test.setSendDur(0.001) test.setSendDur(0.007)
test.setFlvPath("../../flv/aaa3.flv") test.setFlvPath("../../flv/aaa3.flv")
test.start() test.start()
\ No newline at end of file
...@@ -32,8 +32,8 @@ def flvFilePushTest(): ...@@ -32,8 +32,8 @@ def flvFilePushTest():
test.setPort(1078) test.setPort(1078)
test.setMobileStart(10000000000) test.setMobileStart(10000000000)
test.setChannel(1) test.setChannel(1)
test.setTerNum(10) test.setTerNum(1)
test.setIsOpenPullStream(0) # 设置是否开启拉流 test.setIsOpenPullStream(1) # 设置是否开启拉流
test.setIsShowFrame(1) # 拉流是否显示预览画面 test.setIsShowFrame(1) # 拉流是否显示预览画面
test.setSendDur(0.001) test.setSendDur(0.001)
test.setFlvPath("flv/aaa3.flv") test.setFlvPath("flv/aaa3.flv")
......
#coding: utf-8
import os
import wx
class CameraArea():
def __init__(self,frame):
self.frame = frame
self.mainPanel = None
#################################################
# 创建一个pannel
#################################################
def create(self):
self.mainPanel = wx.Panel(self.frame)
boxSizer = wx.BoxSizer(wx.VERTICAL)
topPanel = wx.Panel(self.mainPanel)
bottomPanel = wx.Panel(self.mainPanel)
bottomPanel.SetBackgroundColour(wx.YELLOW)
boxSizer.Add(topPanel,1,flag=wx.EXPAND | wx.ALL)
boxSizer.Add(bottomPanel,2, flag=wx.EXPAND | wx.ALL)
self.mainPanel.SetSizer(boxSizer)
preView = wx.Panel(topPanel)
preView.SetBackgroundColour(wx.GREEN)
controlView = wx.Panel(topPanel)
wx.StaticText(controlView, label='本地视频:', pos=(10, 10))
videoPathText = wx.TextCtrl(controlView,pos=(70,5),size=wx.Size(300,-1))
selectPathButton = wx.Button(controlView,label="选择视频文件",pos=(375,5))
self.frame.Bind(wx.EVT_BUTTON, lambda evt,textCtr=videoPathText : self.selectVideoFile(evt,textCtr), selectPathButton)
boxSizer_1 = wx.BoxSizer(wx.HORIZONTAL)
boxSizer_1.Add(preView,1,flag=wx.EXPAND | wx.ALL)
boxSizer_1.Add(controlView, 3, flag=wx.EXPAND | wx.ALL)
topPanel.SetSizer(boxSizer_1)
return self.mainPanel
def selectVideoFile(self,evt,textCtr):
wildcard = "Video file (*.flv)|*.flv"
dlg = wx.FileDialog(
self.frame, message="Choose a file",
defaultDir=os.getcwd(),
defaultFile="",
wildcard=wildcard,
style=wx.FD_OPEN |
wx.FD_CHANGE_DIR | wx.FD_FILE_MUST_EXIST |
wx.FD_PREVIEW
)
if dlg.ShowModal() == wx.ID_OK:
path = dlg.GetPath()
print(path)
dlg.Destroy()
\ No newline at end of file
#coding:utf-8
import wx
from ui.CameraArea import CameraArea
'''
定义主窗体
'''
class MainWindow():
def __init__(self):
self.app = None
self.frame = None
self.main()
def main(self):
self.app = wx.App()
self.frame = wx.Frame(None,-1, title='云镜模拟器',size = wx.Size(1100,700))
self.createMainPanel()
#####################################################
# 显示窗体
#####################################################
def show(self):
self.frame.Show()
self.app.MainLoop()
#####################################################
# 创建主窗体的布局面板
#####################################################
def createMainPanel(self):
mainPanel = wx.Panel(self.frame)
boxSizer = wx.BoxSizer(wx.VERTICAL)
nodeBook = wx.Notebook(mainPanel)
page1 = CameraArea(nodeBook).create()
nodeBook.AddPage(page1,"摄像头1")
page2 = CameraArea(nodeBook).create()
nodeBook.AddPage(page2, "摄像头2")
page3 = wx.Panel(nodeBook)
nodeBook.AddPage(page3, "摄像头3")
page4 = wx.Panel(nodeBook)
nodeBook.AddPage(page4, "转码工具")
page5 = wx.Panel(nodeBook)
nodeBook.AddPage(page5, "告警与其他功能")
boxSizer.Add(nodeBook, 1, flag=wx.EXPAND | wx.ALL)
mainPanel.SetSizer(boxSizer)
if __name__ == "__main__":
MainWindow().show()
\ No newline at end of file
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