Commit 0b5d2c53 authored by liyuanhong's avatar liyuanhong

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

parent c6a518d5
...@@ -31,7 +31,7 @@ class StreamH264(): ...@@ -31,7 +31,7 @@ class StreamH264():
self.port = 1078 self.port = 1078
self.client = None self.client = None
self.BUF_SIZE = 2048 self.BUF_SIZE = 2048
self.sendDur = 0 # 消息发送间隔 self.sendDur = 0 # 消息发送间隔
self.AVChangeBySecond = 2 # 每秒音视频切换数 self.AVChangeBySecond = 2 # 每秒音视频切换数
self.pos = 1 # 当前的帧数(视频) self.pos = 1 # 当前的帧数(视频)
...@@ -74,6 +74,8 @@ class StreamH264(): ...@@ -74,6 +74,8 @@ class StreamH264():
self.host = data self.host = data
def setPort(self,data): def setPort(self,data):
self.port = data self.port = data
def setIsLoop(self,data):
self.isLoop = data
#################################################### ####################################################
# 设置视频帧率 # 设置视频帧率
......
...@@ -20,11 +20,12 @@ class StreamH264Flv(): ...@@ -20,11 +20,12 @@ class StreamH264Flv():
self.channel = 1 # 频道号 self.channel = 1 # 频道号
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.16.12.249"
# self.host = "10.100.12.3" self.host = "10.100.12.3" # 测试环境
# self.host = "localhost" # self.host = "localhost"
self.port = 1078 self.port = 1078
self.videoPath = "../../flv/bbb3.flv" # 要推流的视频路劲
def setMobile(self,data): def setMobile(self,data):
self.mobile = data self.mobile = data
...@@ -40,6 +41,8 @@ class StreamH264Flv(): ...@@ -40,6 +41,8 @@ class StreamH264Flv():
self.port = data self.port = data
def setSendDur(self,data): def setSendDur(self,data):
self.sendDur = data self.sendDur = data
def setVideoPath(self,data):
self.videoPath = data
#################################################### ####################################################
...@@ -57,8 +60,8 @@ class StreamH264Flv(): ...@@ -57,8 +60,8 @@ class StreamH264Flv():
#################################################### ####################################################
# 读取flv文件,并发送 (h264编码,并且音频为aac编码格式) # 读取flv文件,并发送 (h264编码,并且音频为aac编码格式)
#################################################### ####################################################
def readFlvAndSend(self,fileName): def readFlvAndSend(self):
with open(fileName, 'rb') as fi: with open(self.videoPath, 'rb') as fi:
con = fi.read(self.readSize) con = fi.read(self.readSize)
data = con.hex() data = con.hex()
if self.isFileHead == 0: if self.isFileHead == 0:
...@@ -95,6 +98,7 @@ class StreamH264Flv(): ...@@ -95,6 +98,7 @@ class StreamH264Flv():
else: else:
AVdata = AVtag AVdata = AVtag
data = data[(tagSize * 2 + 30):] data = data[(tagSize * 2 + 30):]
self.client.close()
#################################################### ####################################################
# 发送视频帧 # 发送视频帧
...@@ -236,10 +240,13 @@ class StreamH264Flv(): ...@@ -236,10 +240,13 @@ class StreamH264Flv():
if __name__ == "__main__": if __name__ == "__main__":
obj = StreamH264Flv() obj = StreamH264Flv()
obj.setSendDur(0.008) obj.setSendDur(0.003)
obj.setIsSendAudio(1) obj.setIsSendAudio(1)
obj.setMobile("013146201117") obj.setMobile("013146201117")
obj.setChannel(1) obj.setChannel(1)
obj.setHost("10.100.12.3")
obj.setPort(1078)
obj.setVideoPath("../../flv/bbb3.flv")
obj.connectServer() obj.connectServer()
obj.readFlvAndSend("../../flv/yyy.flv") obj.readFlvAndSend()
#coding: utf-8
import threading
import time
import cv2
from lib.service.StreamH264Flv import StreamH264Flv
class FlvPressureTest():
def __init__(self):
self.mobileStart = 100000000000 # 开始手机号
self.channel = 1 # 频道号
self.terNum = 2 # 要压力测试的线程数
self.flvPath = "../../flv/aaa3.flv" # 要推流的视频路劲
self.host = "10.100.12.3"
self.port = 1078
self.sendDur = 0.005 # socket消息发送间隔
self.isShowFrame = 0 # 拉流是否展示画面 0:不展示 1:展示
self.threadInfo = {} # 存放线程集
self.threadInfo["threadObj"] = {}
self.threadInfo["sucessT"] = {}
self.threadInfo["failT"] = {}
self.threadInfoPull = {} # 存放线程集(拉流线程)
self.threadInfoPull["threadObj"] = {}
self.threadInfoPull["sucessT"] = {}
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
def setMobileStart(self, data="10000000000"):
self.mobileStart = data
def setChannel(self, data):
self.channel = data
def setFlvPath(self, data):
self.flvPath = data
def setHost(self, data):
self.host = data
def setPort(self, data):
self.port = data
def setIsOpenPullStream(self, data):
self.isOpenPullStream = data
def setSendDur(self,data):
self.sendDur = data
def setIsShowFrame(self,data):
self.isShowFrame = data
def testServicePush(self, cloudMirror):
cloudMirror.readFlvAndSend()
def testServicePull(self, mobile):
pullUrl = self.pullUrl + mobile + "-" + str(self.channel)
cap = cv2.VideoCapture(pullUrl)
while (cap.isOpened()):
ret, frame = cap.read()
if ret == False:
break
if self.isShowFrame == 1:
cv2.imshow("video", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
print("拉流结束")
cap.release()
cv2.destroyAllWindows()
def runPush(self, mobile, threadId):
cloudMirror = StreamH264Flv()
cloudMirror.setHost(self.host)
cloudMirror.setPort(self.port)
cloudMirror.connectServer()
cloudMirror.setVideoPath(self.flvPath)
cloudMirror.setMobile(mobile)
cloudMirror.setChannel(self.channel)
cloudMirror.setSendDur(self.sendDur)
conThread = threading.Thread(target=self.testServicePush, args=(cloudMirror,))
self.threadInfo["threadObj"][threadId] = conThread
conThread.start()
print(threadId + "启动了:" + mobile + "-" + str(self.channel))
def runPull(self, mobile, threadId):
pullThread = threading.Thread(target=self.testServicePull, args=(mobile,))
self.threadInfoPull["threadObj"][threadId] = pullThread
pullThread.start()
print(threadId + "启动了:" + mobile + "-" + str(self.channel))
def start(self):
for i in range(0, self.terNum):
mobile = self.mobileStart + i
mobile = "0" + str(mobile)
threadId = "threadId__" + str(i)
self.runPush(mobile, threadId)
time.sleep(0.01)
if self.isOpenPullStream == 1:
for j in range(0, self.terNum):
mobile = self.mobileStart + j
mobile = "0" + str(mobile)
threadPullId = "threadPullId__" + str(j)
self.runPull(mobile, threadPullId)
time.sleep(0.01)
if __name__ == "__main__":
test = FlvPressureTest()
test.setHost("10.100.12.3")
test.setPort(1078)
test.setMobileStart(10000000000)
test.setChannel(1)
test.setTerNum(2)
test.setIsOpenPullStream(1) # 设置是否开启拉流
test.setIsShowFrame(1) # 拉流是否显示预览画面
test.setSendDur(0.001)
test.setFlvPath("../../flv/aaa3.flv")
test.start()
\ No newline at end of file
...@@ -3,10 +3,11 @@ import threading ...@@ -3,10 +3,11 @@ import threading
import time import time
import cv2 import cv2
from lib.service.StreamH264 import StreamH264 from lib.service.StreamH264 import StreamH264
'''
使用H264视频文件 和aac音频文件作为推流的压力测试
'''
class H264PresureTest(): class H264PresureTest():
def __init__(self): def __init__(self):
...@@ -17,6 +18,8 @@ class H264PresureTest(): ...@@ -17,6 +18,8 @@ class H264PresureTest():
self.audioPath = "../../h264/bbb3.aac" # 要推流的音频路劲 self.audioPath = "../../h264/bbb3.aac" # 要推流的音频路劲
self.host = "10.100.12.3" self.host = "10.100.12.3"
self.port = 1078 self.port = 1078
self.sendDur = 0.001
self.isShowFrame = 0 # 拉流是否展示画面 0:不展示 1:展示
self.threadInfo = {} # 存放线程集 self.threadInfo = {} # 存放线程集
self.threadInfo["threadObj"] = {} self.threadInfo["threadObj"] = {}
...@@ -47,6 +50,10 @@ class H264PresureTest(): ...@@ -47,6 +50,10 @@ class H264PresureTest():
self.port = data self.port = data
def setIsOpenPullStream(self,data): def setIsOpenPullStream(self,data):
self.isOpenPullStream = data self.isOpenPullStream = data
def setSendDur(self,data):
self.sendDur = data
def setIsShowFrame(self,data):
self.isShowFrame = data
def testServicePush(self,cloudMirror): def testServicePush(self,cloudMirror):
...@@ -59,7 +66,8 @@ class H264PresureTest(): ...@@ -59,7 +66,8 @@ class H264PresureTest():
ret, frame = cap.read() ret, frame = cap.read()
if ret == False: if ret == False:
break break
cv2.imshow("video", frame) if self.isShowFrame == 1:
cv2.imshow("video", frame)
if cv2.waitKey(1)&0xFF==ord('q'): if cv2.waitKey(1)&0xFF==ord('q'):
break break
print("拉流结束") print("拉流结束")
...@@ -70,11 +78,10 @@ class H264PresureTest(): ...@@ -70,11 +78,10 @@ class H264PresureTest():
cloudMirror = StreamH264() cloudMirror = StreamH264()
cloudMirror.setHost(self.host) cloudMirror.setHost(self.host)
cloudMirror.setPort(self.port) cloudMirror.setPort(self.port)
cloudMirror.setSendDur(0) cloudMirror.setSendDur(self.sendDur)
cloudMirror.connectServer() cloudMirror.connectServer()
cloudMirror.setFPSVideo(30) cloudMirror.setFPSVideo(30)
cloudMirror.setFPSAudio(47) cloudMirror.setFPSAudio(47)
cloudMirror.setSendDur(0)
cloudMirror.setVideoPath(self.videoPath) cloudMirror.setVideoPath(self.videoPath)
cloudMirror.setAudioPath(self.audioPath) cloudMirror.setAudioPath(self.audioPath)
cloudMirror.setMobile(mobile) cloudMirror.setMobile(mobile)
...@@ -114,8 +121,10 @@ if __name__ == "__main__": ...@@ -114,8 +121,10 @@ if __name__ == "__main__":
test.setPort(1078) test.setPort(1078)
test.setMobileStart(10000000000) test.setMobileStart(10000000000)
test.setChannel(1) test.setChannel(1)
test.setTerNum(1) test.setTerNum(10)
test.setIsOpenPullStream(1) # 设置是否开启拉流 test.setSendDur(0.001)
test.setIsOpenPullStream(0) # 设置是否开启拉流
test.setIsShowFrame(0)
test.setVideoPath("../../h264/bbb3.h264") test.setVideoPath("../../h264/bbb3.h264")
test.setAudioPath("../../aac/bbb3.aac") test.setAudioPath("../../aac/bbb3.aac")
test.start() test.start()
\ No newline at end of file
#coding: utf-8 #coding: utf-8
from lib.service.StreamH264 import StreamH264 from lib.testCase.FlvPressureTest import FlvPressureTest
###########################################
# 推流h264 和 aac 文件压力测试
###########################################
from lib.testCase.H264PresureTest import H264PresureTest
def h264FilePushTest():
test = H264PresureTest()
test.setHost("10.100.12.3")
test.setPort(1078)
test.setMobileStart(10000000000)
test.setChannel(1)
test.setTerNum(10)
test.setSendDur(0.001)
test.setIsOpenPullStream(0) # 设置是否开启拉流
test.setIsShowFrame(0)
test.setVideoPath("h264/bbb3.h264")
test.setAudioPath("aac/bbb3.aac")
test.start()
###########################################
# 推流flv文件压力测试
###########################################
def flvFilePushTest():
test = FlvPressureTest()
test.setHost("10.100.12.3")
test.setPort(1078)
test.setMobileStart(10000000000)
test.setChannel(1)
test.setTerNum(10)
test.setIsOpenPullStream(0) # 设置是否开启拉流
test.setIsShowFrame(1) # 拉流是否显示预览画面
test.setSendDur(0.001)
test.setFlvPath("flv/aaa3.flv")
test.start()
if __name__ == "__main__": if __name__ == "__main__":
StreamH264().readStreamFromFileAndSend("h264/aaa2.264") flvFilePushTest()
# StreamH264().readTest("h264/aaa2.264") # h264FilePushTest()
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