Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
streamPushPressure
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
李远洪
streamPushPressure
Commits
43363024
Commit
43363024
authored
Dec 30, 2020
by
liyuanhong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
完成了flv视频的压力测试脚本2
parent
0b5d2c53
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
183 additions
and
22 deletions
+183
-22
lib/service/StreamH264.py
lib/service/StreamH264.py
+2
-8
lib/service/StreamH264Flv.py
lib/service/StreamH264Flv.py
+38
-6
lib/testCase/FlvPressureTest.py
lib/testCase/FlvPressureTest.py
+31
-6
run.py
run.py
+2
-2
ui/CameraArea.py
ui/CameraArea.py
+57
-0
ui/MainWindow.py
ui/MainWindow.py
+53
-0
No files found.
lib/service/StreamH264.py
View file @
43363024
...
@@ -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
...
...
lib/service/StreamH264Flv.py
View file @
43363024
#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.00
3
)
obj
.
setSendDur
(
0.00
7
)
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
()
lib/testCase/FlvPressureTest.py
View file @
43363024
#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.00
1
)
test
.
setSendDur
(
0.00
7
)
test
.
setFlvPath
(
"../../flv/aaa3.flv"
)
test
.
setFlvPath
(
"../../flv/aaa3.flv"
)
test
.
start
()
test
.
start
()
\ No newline at end of file
run.py
View file @
43363024
...
@@ -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
(
1
0
)
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"
)
...
...
ui/CameraArea.py
0 → 100644
View file @
43363024
#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
ui/MainWindow.py
0 → 100644
View file @
43363024
#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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment