Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
胡斌
/
srs
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
winlin
2014-07-13 11:17:03 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
0fb51413f41588cd9940bf3ece9ffcd25d1b1d6a
0fb51413
1 parent
539b5956
refine bandwidth test, use function ptr.
显示空白字符变更
内嵌
并排对比
正在显示
2 个修改的文件
包含
61 行增加
和
71 行删除
trunk/src/app/srs_app_bandwidth.cpp
trunk/src/app/srs_app_kbps.cpp
trunk/src/app/srs_app_bandwidth.cpp
查看文件 @
0fb5141
...
...
@@ -63,6 +63,52 @@ void SrsBandwidthSample::calc_kbps(int _bytes, int _duration)
kbps
=
bytes
*
8
/
actual_duration_ms
;
}
/**
* recv bandwidth helper.
*/
typedef
bool
(
*
_CheckPacketType
)(
SrsBandwidthPacket
*
pkt
);
bool
_bandwidth_is_flash_final
(
SrsBandwidthPacket
*
pkt
)
{
return
pkt
->
is_flash_final
();
}
bool
_bandwidth_is_starting_play
(
SrsBandwidthPacket
*
pkt
)
{
return
pkt
->
is_starting_play
();
}
bool
_bandwidth_is_stopped_play
(
SrsBandwidthPacket
*
pkt
)
{
return
pkt
->
is_stopped_play
();
}
bool
_bandwidth_is_starting_publish
(
SrsBandwidthPacket
*
pkt
)
{
return
pkt
->
is_starting_publish
();
}
bool
_bandwidth_is_stopped_publish
(
SrsBandwidthPacket
*
pkt
)
{
return
pkt
->
is_stopped_publish
();
}
int
_srs_expect_bandwidth_packet
(
SrsRtmpServer
*
rtmp
,
_CheckPacketType
pfn
)
{
int
ret
=
ERROR_SUCCESS
;
while
(
true
)
{
SrsMessage
*
msg
=
NULL
;
SrsBandwidthPacket
*
pkt
=
NULL
;
if
((
ret
=
rtmp
->
expect_message
<
SrsBandwidthPacket
>
(
&
msg
,
&
pkt
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
SrsAutoFree
(
SrsMessage
,
msg
);
SrsAutoFree
(
SrsBandwidthPacket
,
pkt
);
srs_info
(
"get final message success."
);
if
(
pfn
(
pkt
))
{
return
ret
;
}
}
return
ret
;
}
SrsBandwidth
::
SrsBandwidth
()
{
_req
=
NULL
;
...
...
@@ -190,22 +236,10 @@ int SrsBandwidth::do_bandwidth_check(SrsKbpsLimit* limit)
// we notice the result, and expect a final packet if not flash.
// if flash client, client will disconnect when got finish packet.
bool
is_flash
=
(
_req
->
swfUrl
!=
""
);
while
(
!
is_flash
)
{
SrsMessage
*
msg
=
NULL
;
SrsBandwidthPacket
*
pkt
=
NULL
;
if
((
ret
=
_rtmp
->
expect_message
<
SrsBandwidthPacket
>
(
&
msg
,
&
pkt
))
!=
ERROR_SUCCESS
)
{
// info level to ignore and return success.
srs_info
(
"expect final message failed. ret=%d"
,
ret
);
return
ERROR_SUCCESS
;
}
SrsAutoFree
(
SrsMessage
,
msg
);
SrsAutoFree
(
SrsBandwidthPacket
,
pkt
);
srs_info
(
"get final message success."
);
if
(
pkt
->
is_flash_final
())
{
if
(
!
is_flash
)
{
// ignore any error.
_srs_expect_bandwidth_packet
(
_rtmp
,
_bandwidth_is_flash_final
);
srs_info
(
"BW check recv flash final response."
);
break
;
}
}
srs_info
(
"BW check finished."
);
...
...
@@ -231,22 +265,9 @@ int SrsBandwidth::check_play(SrsBandwidthSample* sample, SrsKbpsLimit* limit)
}
srs_info
(
"BW check begin."
);
while
(
true
)
{
// recv client's starting play response
SrsMessage
*
msg
=
NULL
;
SrsBandwidthPacket
*
pkt
=
NULL
;
if
((
ret
=
_rtmp
->
expect_message
<
SrsBandwidthPacket
>
(
&
msg
,
&
pkt
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"expect bandwidth message failed. ret=%d"
,
ret
);
if
((
ret
=
_srs_expect_bandwidth_packet
(
_rtmp
,
_bandwidth_is_starting_play
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
SrsAutoFree
(
SrsMessage
,
msg
);
SrsAutoFree
(
SrsBandwidthPacket
,
pkt
);
srs_info
(
"get bandwidth message succes."
);
if
(
pkt
->
is_starting_play
())
{
break
;
}
}
srs_info
(
"BW check recv play begin response."
);
// send play data to client
...
...
@@ -297,22 +318,9 @@ int SrsBandwidth::check_play(SrsBandwidthSample* sample, SrsKbpsLimit* limit)
}
srs_info
(
"BW check stop play bytes."
);
while
(
true
)
{
// recv client's stop play response.
SrsMessage
*
msg
=
NULL
;
SrsBandwidthPacket
*
pkt
=
NULL
;
if
((
ret
=
_rtmp
->
expect_message
<
SrsBandwidthPacket
>
(
&
msg
,
&
pkt
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"expect bandwidth message failed. ret=%d"
,
ret
);
if
((
ret
=
_srs_expect_bandwidth_packet
(
_rtmp
,
_bandwidth_is_stopped_play
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
SrsAutoFree
(
SrsMessage
,
msg
);
SrsAutoFree
(
SrsBandwidthPacket
,
pkt
);
srs_info
(
"get bandwidth message succes."
);
if
(
pkt
->
is_stopped_play
())
{
break
;
}
}
srs_info
(
"BW check recv stop play response."
);
return
ret
;
...
...
@@ -336,22 +344,9 @@ int SrsBandwidth::check_publish(SrsBandwidthSample* sample, SrsKbpsLimit* limit)
}
srs_info
(
"BW check publish begin."
);
while
(
true
)
{
// read client's notification of starting publish
SrsMessage
*
msg
=
NULL
;
SrsBandwidthPacket
*
pkt
=
NULL
;
if
((
ret
=
_rtmp
->
expect_message
<
SrsBandwidthPacket
>
(
&
msg
,
&
pkt
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"expect bandwidth message failed. ret=%d"
,
ret
);
if
((
ret
=
_srs_expect_bandwidth_packet
(
_rtmp
,
_bandwidth_is_starting_publish
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
SrsAutoFree
(
SrsMessage
,
msg
);
SrsAutoFree
(
SrsBandwidthPacket
,
pkt
);
srs_info
(
"get bandwidth message succes."
);
if
(
pkt
->
is_starting_publish
())
{
break
;
}
}
srs_info
(
"BW check recv publish begin response."
);
// recv publish msgs until @duration_ms ms
...
...
@@ -392,23 +387,12 @@ int SrsBandwidth::check_publish(SrsBandwidthSample* sample, SrsKbpsLimit* limit)
// there are many many packets in the queue.
// we just ignore the packet and send the bandwidth test data.
bool
is_flash
=
(
_req
->
swfUrl
!=
""
);
while
(
!
is_flash
)
{
// recv client's stop publish response.
SrsMessage
*
msg
=
NULL
;
SrsBandwidthPacket
*
pkt
=
NULL
;
if
((
ret
=
_rtmp
->
expect_message
<
SrsBandwidthPacket
>
(
&
msg
,
&
pkt
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"expect bandwidth message failed. ret=%d"
,
ret
);
if
(
!
is_flash
)
{
if
((
ret
=
_srs_expect_bandwidth_packet
(
_rtmp
,
_bandwidth_is_stopped_publish
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
SrsAutoFree
(
SrsMessage
,
msg
);
SrsAutoFree
(
SrsBandwidthPacket
,
pkt
);
srs_info
(
"get bandwidth message succes."
);
if
(
pkt
->
is_stopped_publish
())
{
break
;
}
}
srs_info
(
"BW check recv stop publish response."
);
}
return
ret
;
}
...
...
trunk/src/app/srs_app_kbps.cpp
查看文件 @
0fb5141
...
...
@@ -259,16 +259,22 @@ SrsKbpsLimit::~SrsKbpsLimit()
void
SrsKbpsLimit
::
recv_limit
()
{
_kbps
->
sample
();
while
(
_kbps
->
get_recv_kbps
()
>
_limit_kbps
)
{
_kbps
->
sample
();
st_usleep
(
_SRS_BANDWIDTH_LIMIT_INTERVAL_MS
*
1000
);
}
}
void
SrsKbpsLimit
::
send_limit
()
{
_kbps
->
sample
();
while
(
_kbps
->
get_send_kbps
()
>
_limit_kbps
)
{
_kbps
->
sample
();
st_usleep
(
_SRS_BANDWIDTH_LIMIT_INTERVAL_MS
*
1000
);
}
}
...
...
请
注册
或
登录
后发表评论