From 593d16446ea86902792b960d198ae809ed0ab04f Mon Sep 17 00:00:00 2001 From: winlin <winlin@vip.126.com> Date: Sun, 22 Dec 2013 17:45:08 +0800 Subject: [PATCH] add bandwidth workflow --- trunk/src/core/srs_core_bandwidth.hpp | 185 +++++++++++++------------- 1 file changed, 93 insertions(+), 92 deletions(-) mode change 100755 => 100644 trunk/src/core/srs_core_bandwidth.hpp diff --git a/trunk/src/core/srs_core_bandwidth.hpp b/trunk/src/core/srs_core_bandwidth.hpp old mode 100755 new mode 100644 index 2e7cd0b27..ef66a86f2 --- a/trunk/src/core/srs_core_bandwidth.hpp +++ b/trunk/src/core/srs_core_bandwidth.hpp @@ -1,93 +1,94 @@ -/* -The MIT License (MIT) - -Copyright (c) 2013 wenjiegit - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -#ifndef SRS_CORE_BANDWIDTH_HPP -#define SRS_CORE_BANDWIDTH_HPP - -/* -#include <srs_core_bandwidth.hpp> -*/ -#include <srs_core.hpp> - -class SrsRequest; -class SrsRtmp; - -/** -* bandwidth test agent which provides the interfaces for bandwidth check. -* 1. if vhost disabled bandwidth check, ignore. -* 2. otherwise, check the key, error if verify failed. -* 3. check the interval limit, error if bandwidth in the interval window. -* 4. check the bandwidth under the max kbps. -* 5. send the bandwidth data to client. -* bandwidth workflow: -* +------------+ +----------+ -* | Client | | Server | -* +-----+------+ +-----+----+ -* | | -* | connect vhost------> | if vhost enable bandwidth, -* | <-----result(success) | do bandwidth check. -* | | -* | <----call(start play) | onSrsBandCheckStartPlayBytes -* | result(playing)-----> | onSrsBandCheckStartingPlayBytes -* | <-------data(playing) | onSrsBandCheckStartingPlayBytes -* | <-----call(stop play) | onSrsBandCheckStopPlayBytes -* | result(stopped)-----> | onSrsBandCheckStoppedPlayBytes -* | | -* | <-call(start publish) | onSrsBandCheckStartPublishBytes -* | result(publishing)--> | onSrsBandCheckStartingPublishBytes -* | data(publishing)----> | onSrsBandCheckStartingPublishBytes -* | <--call(stop publish) | onSrsBandCheckStopPublishBytes -* | result(stopped)(1)--> | onSrsBandCheckStoppedPublishBytes -* | | -* | <--------------report | -* | final(2)------------> | finalClientPacket -* | <END> | -* 1. when flash client, server ignore the publish stopped result, -* and directly send the report to flash client. -* 2. flash client only. when got report, flash client should send out -* a final packet and close the connection immediately. -*/ -class SrsBandwidth -{ -private: - SrsRequest* req; - SrsRtmp* rtmp; -public: - SrsBandwidth(); - virtual ~SrsBandwidth(); -public: - /** - * do the bandwidth test. - */ - virtual int bandwidth_test(SrsRequest* _req, st_netfd_t stfd, SrsRtmp* _rtmp); -private: - virtual int get_local_ip(st_netfd_t stfd, char *&local_ip); - /** - * used to process band width check from client. - */ - virtual int do_bandwidth_check(); - virtual int check_play(int duration_ms, int interval_ms, int& actual_duration_ms, int& play_bytes, int max_play_kbps); - virtual int check_publish(int duration_ms, int interval_ms, int& actual_duration_ms, int& publish_bytes, int max_pub_kbps); -}; - +/* +The MIT License (MIT) + +Copyright (c) 2013 wenjiegit + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#ifndef SRS_CORE_BANDWIDTH_HPP +#define SRS_CORE_BANDWIDTH_HPP + +/* +#include <srs_core_bandwidth.hpp> +*/ +#include <srs_core.hpp> + +class SrsRequest; +class SrsRtmp; + +/** +* bandwidth test agent which provides the interfaces for bandwidth check. +* 1. if vhost disabled bandwidth check, ignore. +* 2. otherwise, check the key, error if verify failed. +* 3. check the interval limit, error if bandwidth in the interval window. +* 4. check the bandwidth under the max kbps. +* 5. send the bandwidth data to client. +* bandwidth workflow: +* +------------+ +----------+ +* | Client | | Server | +* +-----+------+ +-----+----+ +* | | +* | connect vhost------> | if vhost enable bandwidth, +* | <-----result(success) | do bandwidth check. +* | | +* | <----call(start play) | onSrsBandCheckStartPlayBytes +* | result(playing)-----> | onSrsBandCheckStartingPlayBytes +* | <-------data(playing) | onSrsBandCheckStartingPlayBytes +* | <-----call(stop play) | onSrsBandCheckStopPlayBytes +* | result(stopped)-----> | onSrsBandCheckStoppedPlayBytes +* | | +* | <-call(start publish) | onSrsBandCheckStartPublishBytes +* | result(publishing)--> | onSrsBandCheckStartingPublishBytes +* | data(publishing)----> | onSrsBandCheckStartingPublishBytes +* | <--call(stop publish) | onSrsBandCheckStopPublishBytes +* | result(stopped)(1)--> | onSrsBandCheckStoppedPublishBytes +* | | +* | <--------------report | +* | final(2)------------> | finalClientPacket +* | <END> | +* +* 1. when flash client, server ignore the publish stopped result, +* and directly send the report to flash client. +* 2. flash client only. when got report, flash client should send out +* a final packet and close the connection immediately. +*/ +class SrsBandwidth +{ +private: + SrsRequest* req; + SrsRtmp* rtmp; +public: + SrsBandwidth(); + virtual ~SrsBandwidth(); +public: + /** + * do the bandwidth test. + */ + virtual int bandwidth_test(SrsRequest* _req, st_netfd_t stfd, SrsRtmp* _rtmp); +private: + virtual int get_local_ip(st_netfd_t stfd, char *&local_ip); + /** + * used to process band width check from client. + */ + virtual int do_bandwidth_check(); + virtual int check_play(int duration_ms, int interval_ms, int& actual_duration_ms, int& play_bytes, int max_play_kbps); + virtual int check_publish(int duration_ms, int interval_ms, int& actual_duration_ms, int& publish_bytes, int max_pub_kbps); +}; + #endif \ No newline at end of file