From 5c4398f4a967f6baf3d787c66838fdc69ef79791 Mon Sep 17 00:00:00 2001 From: winlin Date: Sun, 13 Jul 2014 20:25:36 +0800 Subject: [PATCH] refine bandwidth check/test, flash publish test is ok. --- .../players/srs_bwt/release/srs_bwt.swf | Bin 6481 -> 6474 bytes .../players/srs_bwt/src/SrsBandwidth.as | 22 +++++++++- trunk/src/app/srs_app_bandwidth.cpp | 7 ++++ trunk/src/app/srs_app_kbps.cpp | 5 +++ trunk/src/app/srs_app_kbps.hpp | 4 ++ trunk/src/libs/srs_lib_bandwidth.cpp | 38 +++++------------- trunk/src/libs/srs_lib_bandwidth.hpp | 4 +- 7 files changed, 49 insertions(+), 31 deletions(-) diff --git a/trunk/research/players/srs_bwt/release/srs_bwt.swf b/trunk/research/players/srs_bwt/release/srs_bwt.swf index e0c6cd423e8416c589959fb35c1cf139292ce94c..79d45e5855731230b642b36ee60b2ef7e16f9d7a 100755 GIT binary patch literal 6474 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 diff --git a/trunk/research/players/srs_bwt/src/SrsBandwidth.as b/trunk/research/players/srs_bwt/src/SrsBandwidth.as index e09e55ffc..2df4420f6 100755 --- a/trunk/research/players/srs_bwt/src/SrsBandwidth.as +++ b/trunk/research/players/srs_bwt/src/SrsBandwidth.as @@ -394,7 +394,27 @@ package private function publisher():void{ var data:Array = new Array(); - var data_size:int = 100; + /** + * the data size cannot too large, it will increase the test time. + * server need atleast got one packet, then timeout to stop the publish. + * + * cannot too small neither, it will limit the max publish kbps. + * + * the test values: + * test_s test_s + * data_size max_publish_kbps (no limit) (limit upload to 5KBps) + * 100 2116 6.5 7.3 + * 200 4071 6.5 7.7 + * 300 6438 6.5 10.3 + * 400 9328 6.5 10.2 + * 500 10377 6.5 10.0 + * 600 13737 6.5 10.8 + * 700 15635 6.5 12.0 + * 800 18103 6.5 14.0 + * 900 20484 6.5 14.2 + * 1000 21447 6.5 16.8 + */ + var data_size:int = 900; for(var i:int; i < data_size; i++) { data.push("SrS band check data from client's publishing......"); } diff --git a/trunk/src/app/srs_app_bandwidth.cpp b/trunk/src/app/srs_app_bandwidth.cpp index c196df835..fe01e1545 100644 --- a/trunk/src/app/srs_app_bandwidth.cpp +++ b/trunk/src/app/srs_app_bandwidth.cpp @@ -42,6 +42,9 @@ using namespace std; // default sample duration, in ms #define _SRS_BANDWIDTH_SAMPLE_DURATION_MS 3000 +// wait for a while for flash to got all packets. +#define _SRS_BANDWIDTH_FINAL_WAIT_MS 600 + SrsBandwidthSample::SrsBandwidthSample() { duration_ms = _SRS_BANDWIDTH_SAMPLE_DURATION_MS; @@ -241,6 +244,8 @@ int SrsBandwidth::do_bandwidth_check(SrsKbpsLimit* limit) if ((ret = finial(play_sample, publish_sample, start_time, end_time)) != ERROR_SUCCESS) { return ret; } + + st_usleep(_SRS_BANDWIDTH_FINAL_WAIT_MS * 1000); srs_info("BW check finished."); return ret; @@ -254,6 +259,7 @@ int SrsBandwidth::play_start(SrsBandwidthSample* sample, SrsKbpsLimit* limit) // send start play command to client SrsBandwidthPacket* pkt = SrsBandwidthPacket::create_start_play(); + pkt->data->set("limit_kbps", SrsAmf0Any::number(limit->limit_kbps())); pkt->data->set("duration_ms", SrsAmf0Any::number(sample->duration_ms)); pkt->data->set("interval_ms", SrsAmf0Any::number(sample->interval_ms)); @@ -349,6 +355,7 @@ int SrsBandwidth::publish_start(SrsBandwidthSample* sample, SrsKbpsLimit* limit) // notify client to start publish SrsBandwidthPacket* pkt = SrsBandwidthPacket::create_start_publish(); + pkt->data->set("limit_kbps", SrsAmf0Any::number(limit->limit_kbps())); pkt->data->set("duration_ms", SrsAmf0Any::number(sample->duration_ms)); pkt->data->set("interval_ms", SrsAmf0Any::number(sample->interval_ms)); diff --git a/trunk/src/app/srs_app_kbps.cpp b/trunk/src/app/srs_app_kbps.cpp index 9fea51668..028195da9 100644 --- a/trunk/src/app/srs_app_kbps.cpp +++ b/trunk/src/app/srs_app_kbps.cpp @@ -257,6 +257,11 @@ SrsKbpsLimit::~SrsKbpsLimit() { } +int SrsKbpsLimit::limit_kbps() +{ + return _limit_kbps; +} + void SrsKbpsLimit::recv_limit() { _kbps->sample(); diff --git a/trunk/src/app/srs_app_kbps.hpp b/trunk/src/app/srs_app_kbps.hpp index 4156f2f69..8f1587681 100644 --- a/trunk/src/app/srs_app_kbps.hpp +++ b/trunk/src/app/srs_app_kbps.hpp @@ -210,6 +210,10 @@ public: SrsKbpsLimit(SrsKbps* kbps, int limit_kbps); virtual ~SrsKbpsLimit(); public: + /** + * get the system limit kbps. + */ + virtual int limit_kbps(); /** * limit the recv bandwidth. */ diff --git a/trunk/src/libs/srs_lib_bandwidth.cpp b/trunk/src/libs/srs_lib_bandwidth.cpp index b1ae8119a..01b0d75d3 100644 --- a/trunk/src/libs/srs_lib_bandwidth.cpp +++ b/trunk/src/libs/srs_lib_bandwidth.cpp @@ -130,29 +130,20 @@ int SrsBandwidthClient::bandwidth_check( *start_time = srs_get_system_time_ms(); // play - int duration_delta = 0; - int bytes_delta = 0; if ((ret = play_start()) != ERROR_SUCCESS) { return ret; } if ((ret = play_checking()) != ERROR_SUCCESS) { return ret; } - if ((ret = play_stop(duration_delta, bytes_delta)) != ERROR_SUCCESS) { + if ((ret = play_stop()) != ERROR_SUCCESS) { return ret; } - // play kbps used to refer for publish - int actual_play_kbps = 0; - if (duration_delta > 0) { - actual_play_kbps = bytes_delta * 8 / duration_delta; - } - // max publish kbps, we set to 1.2*play_kbps: - actual_play_kbps = (int)(actual_play_kbps * 1.2); - // publish int duration_ms = 0; - if ((ret = publish_start(duration_ms)) != ERROR_SUCCESS) { + int actual_play_kbps = 0; + if ((ret = publish_start(duration_ms, actual_play_kbps)) != ERROR_SUCCESS) { return ret; } if ((ret = publish_checking(duration_ms, actual_play_kbps)) != ERROR_SUCCESS) { @@ -226,24 +217,12 @@ int SrsBandwidthClient::play_checking() return ret; } -int SrsBandwidthClient::play_stop(int& duration_delta, int& bytes_delta) +int SrsBandwidthClient::play_stop() { int ret = ERROR_SUCCESS; - if (true) { - SrsBandwidthPacket* pkt = NULL; - if ((ret = _srs_expect_bandwidth_packet2(_rtmp, _bandwidth_is_stop_play, &pkt)) != ERROR_SUCCESS) { - return ret; - } - SrsAutoFree(SrsBandwidthPacket, pkt); - - SrsAmf0Any* prop = NULL; - if ((prop = pkt->data->ensure_property_number("duration_delta")) != NULL) { - duration_delta = (int)prop->to_number(); - } - if ((prop = pkt->data->ensure_property_number("bytes_delta")) != NULL) { - bytes_delta = (int)prop->to_number(); - } + if ((ret = _srs_expect_bandwidth_packet(_rtmp, _bandwidth_is_stop_play)) != ERROR_SUCCESS) { + return ret; } srs_info("BW check recv play stop request."); @@ -261,7 +240,7 @@ int SrsBandwidthClient::play_stop(int& duration_delta, int& bytes_delta) return ret; } -int SrsBandwidthClient::publish_start(int& duration_ms) +int SrsBandwidthClient::publish_start(int& duration_ms, int& play_kbps) { int ret = ERROR_SUCCESS; @@ -276,6 +255,9 @@ int SrsBandwidthClient::publish_start(int& duration_ms) if ((prop = pkt->data->ensure_property_number("duration_ms")) != NULL) { duration_ms = (int)prop->to_number(); } + if ((prop = pkt->data->ensure_property_number("limit_kbps")) != NULL) { + play_kbps = (int)prop->to_number(); + } } srs_info("BW check recv publish begin request."); diff --git a/trunk/src/libs/srs_lib_bandwidth.hpp b/trunk/src/libs/srs_lib_bandwidth.hpp index 0d86df5a4..82db66d48 100644 --- a/trunk/src/libs/srs_lib_bandwidth.hpp +++ b/trunk/src/libs/srs_lib_bandwidth.hpp @@ -73,11 +73,11 @@ private: */ virtual int play_start(); virtual int play_checking(); - virtual int play_stop(int& duration_delta, int& bytes_delta); + virtual int play_stop(); /** * publish check/test, publishing bandwidth kbps. */ - virtual int publish_start(int& duration_ms); + virtual int publish_start(int& duration_ms, int& play_kbps); virtual int publish_checking(int duration_ms, int play_kbps); virtual int publish_stop(); /**