1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

fix #588, kbps interface error. 2.0.228

This commit is contained in:
winlin 2017-01-11 11:22:16 +08:00
parent e3aa34ec5f
commit c58dbe4d14
4 changed files with 40 additions and 11 deletions

View file

@ -345,6 +345,7 @@ Remark:
## History ## History
* v2.0, 2017-01-11, fix [#588][bug #588], kbps interface error. 2.0.228
* v2.0, 2017-01-11, fix [#736][bug #736], recovery the hls dispose. 2.0.227 * v2.0, 2017-01-11, fix [#736][bug #736], recovery the hls dispose. 2.0.227
* v2.0, 2017-01-10, refine hls html5 video template. * v2.0, 2017-01-10, refine hls html5 video template.
* v2.0, 2017-01-10, fix [#635][bug #635], hls support NonIDR(open gop). 2.0.226 * v2.0, 2017-01-10, fix [#635][bug #635], hls support NonIDR(open gop). 2.0.226
@ -1272,6 +1273,7 @@ Winlin
[bug #513]: https://github.com/ossrs/srs/issues/513 [bug #513]: https://github.com/ossrs/srs/issues/513
[bug #730]: https://github.com/ossrs/srs/issues/730 [bug #730]: https://github.com/ossrs/srs/issues/730
[bug #635]: https://github.com/ossrs/srs/issues/635 [bug #635]: https://github.com/ossrs/srs/issues/635
[bug #588]: https://github.com/ossrs/srs/issues/588
[bug #xxxxxxxxxx]: https://github.com/ossrs/srs/issues/xxxxxxxxxx [bug #xxxxxxxxxx]: https://github.com/ossrs/srs/issues/xxxxxxxxxx
[exo #828]: https://github.com/google/ExoPlayer/pull/828 [exo #828]: https://github.com/google/ExoPlayer/pull/828

View file

@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// current release version // current release version
#define VERSION_MAJOR 2 #define VERSION_MAJOR 2
#define VERSION_MINOR 0 #define VERSION_MINOR 0
#define VERSION_REVISION 227 #define VERSION_REVISION 228
// generated by configure, only macros. // generated by configure, only macros.
#include <srs_auto_headers.hpp> #include <srs_auto_headers.hpp>

View file

@ -126,7 +126,7 @@ void SrsKbps::set_io(ISrsProtocolStatistic* in, ISrsProtocolStatistic* out)
is.io.in = in; is.io.in = in;
is.last_bytes = is.io_bytes_base = 0; is.last_bytes = is.io_bytes_base = 0;
if (in) { if (in) {
is.last_bytes = is.io_bytes_base = in->get_recv_bytes(); is.bytes += is.io.in->get_recv_bytes() - is.io_bytes_base;
} }
// resample // resample
is.sample(); is.sample();
@ -138,7 +138,7 @@ void SrsKbps::set_io(ISrsProtocolStatistic* in, ISrsProtocolStatistic* out)
} }
// save the old in bytes. // save the old in bytes.
if (os.io.out) { if (os.io.out) {
os.bytes += os.last_bytes - os.io_bytes_base; os.bytes += os.io.out->get_send_bytes() - os.io_bytes_base;
} }
// use new io. // use new io.
os.io.out = out; os.io.out = out;
@ -192,12 +192,36 @@ int SrsKbps::get_recv_kbps_5m()
int64_t SrsKbps::get_send_bytes() int64_t SrsKbps::get_send_bytes()
{ {
return os.get_total_bytes(); // we must calc the send bytes dynamically,
// to not depends on the sample(which used to calc the kbps).
// @read https://github.com/ossrs/srs/issues/588
// session start bytes.
int64_t bytes = os.bytes;
// session delta.
if (os.io.out) {
bytes += os.io.out->get_send_bytes() - os.io_bytes_base;
}
return bytes;
} }
int64_t SrsKbps::get_recv_bytes() int64_t SrsKbps::get_recv_bytes()
{ {
return is.get_total_bytes(); // we must calc the send bytes dynamically,
// to not depends on the sample(which used to calc the kbps).
// @read https://github.com/ossrs/srs/issues/588
// session start bytes.
int64_t bytes = is.bytes;
// session delta.
if (is.io.in) {
bytes += is.io.in->get_recv_bytes() - is.io_bytes_base;
}
return bytes;
} }
void SrsKbps::resample() void SrsKbps::resample()

View file

@ -95,13 +95,9 @@ public:
SrsKbpsSlice(); SrsKbpsSlice();
virtual ~SrsKbpsSlice(); virtual ~SrsKbpsSlice();
public: public:
/** // Get current total bytes, not depend on sample().
* get current total bytes.
*/
virtual int64_t get_total_bytes(); virtual int64_t get_total_bytes();
/** // Resample the slice to calculate the kbps.
* resample all samples.
*/
virtual void sample(); virtual void sample();
}; };
@ -162,6 +158,13 @@ public:
* printf("delta is %d/%d", delta->get_send_bytes_delta(), delta->get_recv_bytes_delta()); * printf("delta is %d/%d", delta->get_send_bytes_delta(), delta->get_recv_bytes_delta());
* delta->cleanup(); * delta->cleanup();
* the server never know how many bytes already send/recv, for the connection maybe closed. * the server never know how many bytes already send/recv, for the connection maybe closed.
* 4. kbps used as ISrsProtocolStatistic, to provides raw bytes:
* SrsKbps* kbps = ...;
* kbps->set_io(in, out);
* // both kbps->get_recv_bytes() and kbps->get_send_bytes() are available.
* // we can use the kbps as the data source of another kbps:
* SrsKbps* user = ...;
* user->set_io(kbps, kbps);
*/ */
class SrsKbps : public virtual ISrsProtocolStatistic, public virtual IKbpsDelta class SrsKbps : public virtual ISrsProtocolStatistic, public virtual IKbpsDelta
{ {