Commit 43363024 authored by liyuanhong's avatar liyuanhong

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

parent 0b5d2c53
......@@ -9,10 +9,6 @@ from lib.socket.ClientSocket import ClientSocket
logging.basicConfig(level = logging.INFO,format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
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
......@@ -24,10 +20,8 @@ class StreamH264():
self.mobile = "013146201117" # 手机号
self.channel = 1 # 频道号
self.host = "10.100.11.125"
# self.host = "10.16.12.249"
# self.host = "10.100.12.3"
# self.host = "localhost"
# self.host = "10.100.11.125" # 开发环境
self.host = "10.100.12.3" # 测试环境
self.port = 1078
self.client = None
self.BUF_SIZE = 2048
......
#coding: utf-8
import binascii
import json
import re
import socket
import time
import requests
from lib.protocal.Protocal_1078 import Protocal_1078
from lib.socket.ClientSocket import ClientSocket
......@@ -21,11 +25,13 @@ class StreamH264Flv():
self.isSendAudio = 1 # 是否发送音频0:不发送 1:发送
# self.host = "10.100.11.125" # 开发环境
# self.host = "10.16.12.249"
self.host = "10.100.12.3" # 测试环境
# self.host = "localhost"
self.port = 1078
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):
self.mobile = data
......@@ -83,6 +89,10 @@ class StreamH264Flv():
tagType = self.getTagType(tag) # flv tag 类型,是音频 还是视频
AVtag = tag[30:] # 音视频 tag
avTimeStamp = self.getAVTimeStamp(tag) #获取时间戳
if avTimeStamp > 100:
if self.isGetPlayUrl == 0:
self.getPlayUrl(self.mobile,self.channel)
self.isGetPlayUrl = 1
if tagType == "08": # 音频
AVdata = AVtag[4:] # 音频数据
frameInfo = self.getAudioFrame(AVtag)
......@@ -100,6 +110,26 @@ class StreamH264Flv():
data = data[(tagSize * 2 + 30):]
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():
if __name__ == "__main__":
obj = StreamH264Flv()
obj.setSendDur(0.003)
obj.setSendDur(0.007)
obj.setIsSendAudio(1)
obj.setMobile("013146201117")
# obj.setMobile("013146201117")
obj.setMobile("142043390091")
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.setVideoPath("../../flv/bbb3.flv")
obj.setVideoPath("../../flv/yyy.flv")
obj.connectServer()
obj.readFlvAndSend()
#coding: utf-8
import json
import re
import threading
import time
import cv2
import requests
from lib.service.StreamH264Flv import StreamH264Flv
......@@ -16,6 +20,8 @@ class FlvPressureTest():
self.port = 1078
self.sendDur = 0.005 # socket消息发送间隔
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["threadObj"] = {}
......@@ -28,7 +34,6 @@ class FlvPressureTest():
self.threadInfoPull["failT"] = {}
self.isOpenPullStream = 1 # 是否开启视频拉流 0:不 1:是
self.pullUrl = "http://10.100.11.125:8085/live?port=1985&app=vandyo&stream="
def setTerNum(self, data):
self.terNum = data
......@@ -53,7 +58,8 @@ class FlvPressureTest():
cloudMirror.readFlvAndSend()
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)
while (cap.isOpened()):
ret, frame = cap.read()
......@@ -83,6 +89,7 @@ class FlvPressureTest():
print(threadId + "启动了:" + mobile + "-" + str(self.channel))
def runPull(self, mobile, threadId):
time.sleep(1)
pullThread = threading.Thread(target=self.testServicePull, args=(mobile,))
self.threadInfoPull["threadObj"][threadId] = pullThread
pullThread.start()
......@@ -104,15 +111,33 @@ class FlvPressureTest():
self.runPull(mobile, threadPullId)
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__":
test = FlvPressureTest()
test.setHost("10.100.12.3")
test.setHost("10.100.11.125")
# test.setHost("video-test.vandyo.com")
test.setPort(1078)
test.setMobileStart(10000000000)
test.setChannel(1)
test.setTerNum(2)
test.setTerNum(1)
test.setIsOpenPullStream(1) # 设置是否开启拉流
test.setIsShowFrame(1) # 拉流是否显示预览画面
test.setSendDur(0.001)
test.setIsShowFrame(0) # 拉流是否显示预览画面
test.setSendDur(0.007)
test.setFlvPath("../../flv/aaa3.flv")
test.start()
\ No newline at end of file
......@@ -32,8 +32,8 @@ def flvFilePushTest():
test.setPort(1078)
test.setMobileStart(10000000000)
test.setChannel(1)
test.setTerNum(10)
test.setIsOpenPullStream(0) # 设置是否开启拉流
test.setTerNum(1)
test.setIsOpenPullStream(1) # 设置是否开启拉流
test.setIsShowFrame(1) # 拉流是否显示预览画面
test.setSendDur(0.001)
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