diff --git a/trunk/auto/options.sh b/trunk/auto/options.sh index 46d486c3e..fd861bfad 100755 --- a/trunk/auto/options.sh +++ b/trunk/auto/options.sh @@ -24,8 +24,6 @@ SRS_HTTP_CALLBACK=RESERVED SRS_HTTP_SERVER=RESERVED SRS_HTTP_API=RESERVED SRS_LIBRTMP=RESERVED -# srs-bandwidth-test client -SRS_BWTC=RESERVED SRS_RESEARCH=RESERVED SRS_UTEST=RESERVED # tcmalloc @@ -195,7 +193,6 @@ function parse_user_option() { --with-http-server) SRS_HTTP_SERVER=YES ;; --with-http-api) SRS_HTTP_API=YES ;; --with-librtmp) SRS_LIBRTMP=YES ;; - --with-bwtc) SRS_BWTC=YES ;; --with-research) SRS_RESEARCH=YES ;; --with-utest) SRS_UTEST=YES ;; --with-gperf) SRS_GPERF=YES ;; @@ -217,7 +214,6 @@ function parse_user_option() { --without-http-server) SRS_HTTP_SERVER=NO ;; --without-http-api) SRS_HTTP_API=NO ;; --without-librtmp) SRS_LIBRTMP=NO ;; - --without-bwtc) SRS_BWTC=NO ;; --without-research) SRS_RESEARCH=NO ;; --without-utest) SRS_UTEST=NO ;; --without-gperf) SRS_GPERF=NO ;; @@ -334,7 +330,6 @@ function apply_user_presets() { SRS_HTTP_SERVER=NO SRS_HTTP_API=NO SRS_LIBRTMP=NO - SRS_BWTC=NO SRS_RESEARCH=NO SRS_UTEST=NO SRS_GPERF=NO @@ -359,7 +354,6 @@ function apply_user_presets() { SRS_HTTP_SERVER=YES SRS_HTTP_API=YES SRS_LIBRTMP=YES - SRS_BWTC=YES SRS_RESEARCH=YES SRS_UTEST=YES SRS_GPERF=NO @@ -384,7 +378,6 @@ function apply_user_presets() { SRS_HTTP_SERVER=NO SRS_HTTP_API=NO SRS_LIBRTMP=NO - SRS_BWTC=NO SRS_RESEARCH=NO SRS_UTEST=NO SRS_GPERF=NO @@ -409,7 +402,6 @@ function apply_user_presets() { SRS_HTTP_SERVER=NO SRS_HTTP_API=NO SRS_LIBRTMP=NO - SRS_BWTC=NO SRS_RESEARCH=NO SRS_UTEST=NO SRS_GPERF=NO @@ -434,7 +426,6 @@ function apply_user_presets() { SRS_HTTP_SERVER=NO SRS_HTTP_API=NO SRS_LIBRTMP=NO - SRS_BWTC=NO SRS_RESEARCH=NO SRS_UTEST=NO SRS_GPERF=NO @@ -459,7 +450,6 @@ function apply_user_presets() { SRS_HTTP_SERVER=YES SRS_HTTP_API=YES SRS_LIBRTMP=YES - SRS_BWTC=NO SRS_RESEARCH=NO SRS_UTEST=NO SRS_GPERF=NO @@ -485,7 +475,6 @@ function apply_user_presets() { SRS_HTTP_SERVER=YES SRS_HTTP_API=YES SRS_LIBRTMP=YES - SRS_BWTC=NO SRS_RESEARCH=NO SRS_UTEST=NO SRS_GPERF=NO @@ -510,7 +499,6 @@ function apply_user_presets() { SRS_HTTP_SERVER=YES SRS_HTTP_API=YES SRS_LIBRTMP=YES - SRS_BWTC=YES SRS_RESEARCH=NO SRS_UTEST=YES SRS_GPERF=NO @@ -535,7 +523,6 @@ function apply_user_presets() { SRS_HTTP_SERVER=YES SRS_HTTP_API=YES SRS_LIBRTMP=YES - SRS_BWTC=YES SRS_RESEARCH=YES SRS_UTEST=YES SRS_GPERF=NO @@ -560,7 +547,6 @@ function apply_user_presets() { SRS_HTTP_SERVER=YES SRS_HTTP_API=YES SRS_LIBRTMP=NO - SRS_BWTC=NO SRS_RESEARCH=NO SRS_UTEST=NO SRS_GPERF=NO @@ -585,7 +571,6 @@ function apply_user_presets() { SRS_HTTP_SERVER=YES SRS_HTTP_API=YES SRS_LIBRTMP=YES - SRS_BWTC=YES SRS_RESEARCH=NO SRS_UTEST=YES SRS_GPERF=NO @@ -610,7 +595,6 @@ function apply_user_presets() { SRS_HTTP_SERVER=YES SRS_HTTP_API=YES SRS_LIBRTMP=YES - SRS_BWTC=NO SRS_RESEARCH=NO SRS_UTEST=NO SRS_GPERF=NO @@ -635,7 +619,6 @@ function apply_user_presets() { SRS_HTTP_SERVER=YES SRS_HTTP_API=YES SRS_LIBRTMP=YES - SRS_BWTC=NO SRS_RESEARCH=NO SRS_UTEST=NO SRS_GPERF=NO @@ -694,7 +677,6 @@ function regenerate_options() { if [ $SRS_HTTP_SERVER = YES ]; then SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --with-http-server"; else SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --without-http-server"; fi if [ $SRS_HTTP_API = YES ]; then SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --with-http-api"; else SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --without-http-api"; fi if [ $SRS_LIBRTMP = YES ]; then SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --with-librtmp"; else SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --without-librtmp"; fi - if [ $SRS_BWTC = YES ]; then SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --with-bwtc"; else SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --without-bwtc"; fi if [ $SRS_RESEARCH = YES ]; then SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --with-research"; else SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --without-research"; fi if [ $SRS_UTEST = YES ]; then SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --with-utest"; else SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --without-utest"; fi if [ $SRS_GPERF = YES ]; then SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --with-gperf"; else SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --without-gperf"; fi @@ -741,7 +723,6 @@ function check_option_conflicts() { # user should disable all other features if [ $SRS_EMBEDED_CPU = YES ]; then if [ $SRS_FFMPEG_TOOL = YES ]; then echo "ffmpeg for arm is not available, see: ./configure --help"; __check_ok=NO; fi - if [ $SRS_BWTC = YES ]; then echo "bwtc for arm is not available, see: ./configure --help"; __check_ok=NO; fi if [ $SRS_RESEARCH = YES ]; then echo "research for arm is not available, see: ./configure --help"; __check_ok=NO; fi if [ $SRS_GPERF = YES ]; then echo "gperf for arm is not available, see: ./configure --help"; __check_ok=NO; fi if [ $SRS_GPERF_MC = YES ]; then echo "gmc for arm is not available, see: ./configure --help"; __check_ok=NO; fi @@ -767,7 +748,6 @@ function check_option_conflicts() { if [ $SRS_HTTP_SERVER = RESERVED ]; then echo "you must specifies the http-server, see: ./configure --help"; __check_ok=NO; fi if [ $SRS_HTTP_API = RESERVED ]; then echo "you must specifies the http-api, see: ./configure --help"; __check_ok=NO; fi if [ $SRS_LIBRTMP = RESERVED ]; then echo "you must specifies the librtmp, see: ./configure --help"; __check_ok=NO; fi - if [ $SRS_BWTC = RESERVED ]; then echo "you must specifies the bwtc, see: ./configure --help"; __check_ok=NO; fi if [ $SRS_RESEARCH = RESERVED ]; then echo "you must specifies the research, see: ./configure --help"; __check_ok=NO; fi if [ $SRS_UTEST = RESERVED ]; then echo "you must specifies the utest, see: ./configure --help"; __check_ok=NO; fi if [ $SRS_GPERF = RESERVED ]; then echo "you must specifies the gperf, see: ./configure --help"; __check_ok=NO; fi diff --git a/trunk/configure b/trunk/configure index 89a5e2506..4bb2b84f2 100755 --- a/trunk/configure +++ b/trunk/configure @@ -115,7 +115,6 @@ SrsHttpServerSummaryColor="\${YELLOW}{disabled} "; if [ $SRS_HTTP_SERVER = YES ] SrsHttpApiSummaryColor="\${YELLOW}{disabled} "; if [ $SRS_HTTP_API = YES ]; then SrsHttpApiSummaryColor="\${GREEN}"; fi SrsLibrtmpSummaryColor="\${YELLOW}{disabled} "; if [ $SRS_LIBRTMP = YES ]; then SrsLibrtmpSummaryColor="\${GREEN}"; fi SrsLibrtmpSSLSummaryColor="\${YELLOW}{disabled} "; if [ $SRS_LIBRTMP = YES ]; then if [ $SRS_SSL = YES ]; then SrsLibrtmpSSLSummaryColor="\${GREEN}"; fi fi -SrsBWTCSummaryColor="\${GREEN}{disabled} "; if [ $SRS_BWTC = YES ]; then SrsBWTCSummaryColor="\${GREEN}"; fi SrsResearchSummaryColor="\${GREEN}{disabled} "; if [ $SRS_RESEARCH = YES ]; then SrsResearchSummaryColor="\${GREEN}"; fi SrsUtestSummaryColor="\${YELLOW}{disabled} "; if [ $SRS_UTEST = YES ]; then SrsUtestSummaryColor="\${GREEN}"; fi SrsGperfSummaryColor="\${GREEN}{disabled} "; if [ $SRS_GPERF = YES ]; then SrsGperfSummaryColor="\${GREEN}"; fi @@ -159,8 +158,6 @@ echo -e " | ${SrsGprofSummaryColor}gprof -b ./objs/srs gmon.out > gprof. echo -e " \${BLACK}+------------------------------------------------------------------------------------\${BLACK}" echo -e " |${SrsResearchSummaryColor}research: ./objs/research, api server, players, ts info, librtmp.\${BLACK}" echo -e " \${BLACK}+------------------------------------------------------------------------------------\${BLACK}" -echo -e " |${SrsBWTCSummaryColor}bandwidth: ./objs/bandwidth, the bandwidth test client\${BLACK}" -echo -e " \${BLACK}+------------------------------------------------------------------------------------\${BLACK}" echo -e " |${SrsUtestSummaryColor}utest: ./objs/srs_utest, the utest for srs\${BLACK}" echo -e " \${BLACK}+------------------------------------------------------------------------------------\${BLACK}" echo -e " |${SrsLibrtmpSummaryColor}librtmp @see: https://github.com/winlinvip/simple-rtmp-server/wiki/SrsLibrtmp\${BLACK}" @@ -168,6 +165,10 @@ echo -e " |${SrsLibrtmpSummaryColor}librtmp: ./objs/include, ./objs/lib, the echo -e " | ${SrsLibrtmpSummaryColor}simple handshake: publish/play stream with simple handshake to server\${BLACK}" echo -e " | ${SrsLibrtmpSSLSummaryColor}complex handshake: it's not required for client, recommend disable it\${BLACK}" echo -e " | ${SrsLibrtmpSummaryColor}librtmp-sample: ./research/librtmp, the srs-librtmp client sample\${BLACK}" +echo -e " | ${SrsLibrtmpSummaryColor}librtmp-sample: ./research/librtmp/objs/srs_ingest_flv\${BLACK}" +echo -e " | ${SrsLibrtmpSummaryColor}librtmp-sample: ./research/librtmp/objs/srs_ingest_rtmp\${BLACK}" +echo -e " | ${SrsLibrtmpSummaryColor}librtmp-sample: ./research/librtmp/objs/srs_detect_rtmp\${BLACK}" +echo -e " | ${SrsLibrtmpSummaryColor}librtmp-sample: ./research/librtmp/objs/srs_bandwidth_check\${BLACK}" echo -e " \${BLACK}+------------------------------------------------------------------------------------\${BLACK}" echo -e " |\${GREEN}server: ./objs/srs -c conf/srs.conf, start the srs server\${BLACK}" echo -e " | ${SrsHlsSummaryColor}hls @see: https://github.com/winlinvip/simple-rtmp-server/wiki/DeliveryHLS\${BLACK}" @@ -204,7 +205,7 @@ END # makefile echo "generate Makefile" cat << END > ${SRS_MAKEFILE} -.PHONY: default _default install install-api help clean server bandwidth librtmp librtmp-sample utest _prepare_dir +.PHONY: default _default install install-api help clean server librtmp utest _prepare_dir # install prefix. SRS_PREFIX=${SRS_PREFIX} @@ -230,24 +231,22 @@ fi # the real entry for all platform. cat << END >> ${SRS_MAKEFILE} -_default: bandwidth librtmp-sample utest +_default: server librtmp utest @bash objs/_srs_build_summary.sh help: - @echo "Usage: make <help>|<clean>|<server>|<bandwidth>|<librtmp>|<librtmp-sample>|<utest>|<install>|<install-api>|<uninstall>" + @echo "Usage: make <help>|<clean>|<server>|<librtmp>|<utest>|<install>|<install-api>|<uninstall>" @echo " help display this help menu" @echo " clean cleanup project" @echo " server build the srs(simple rtmp server) over st(state-threads)" - @echo " bandwidth build the bandwidth test client tool." - @echo " librtmp build the client publish/play library." - @echo " librtmp-sample build the srs-librtmp sample" + @echo " librtmp build the client publish/play library, and samples" @echo " utest build the utest for srs" @echo " install install srs to the prefix path" - @echo " install-api install srs api to the prefix path" + @echo " install-api install srs and api-server to the prefix path" @echo " uninstall uninstall srs from prefix path" clean: - (cd ${SRS_OBJS}; rm -rf srs bandwidth srs_utest) + (cd ${SRS_OBJS}; rm -rf srs srs_utest) (cd ${SRS_OBJS}; rm -rf src research include lib) (cd ${SRS_OBJS}/utest; rm -rf *.o *.a) (cd research/librtmp; make clean) @@ -313,49 +312,19 @@ install: END -if [ $SRS_BWTC = YES ]; then - cat << END >> ${SRS_MAKEFILE} -bandwidth: server - @echo "build the bandwidth test client tool" - \$(MAKE) -f ${SRS_OBJS}/${SRS_MAKEFILE} bandwidth - -END -else - cat << END >> ${SRS_MAKEFILE} -bandwidth: server - @echo "bandwidth test client tool is disabled, ignore." - -END -fi - if [ $SRS_LIBRTMP = YES ]; then cat << END >> ${SRS_MAKEFILE} librtmp: server @echo "build the client publish/play library." \$(MAKE) -f ${SRS_OBJS}/${SRS_MAKEFILE} librtmp - -END -else - cat << END >> ${SRS_MAKEFILE} -librtmp: server - @echo "srs-librtmp is disabled, ignore." - -END -fi -if [ $SRS_LIBRTMP = YES ]; then - cat << END >> ${SRS_MAKEFILE} - -librtmp-sample: librtmp @echo "build the srs-librtmp sample" (cd research/librtmp; \$(MAKE) ${SrsLibrtmpSampleEntry}) - @echo "srs-librtmp sample build success" END else cat << END >> ${SRS_MAKEFILE} - -librtmp-sample: librtmp - @echo "srs-librtmp sample is disabled, ignore." +librtmp: server + @echo "srs-librtmp is disabled, ignore." END fi @@ -406,7 +375,7 @@ AR = ar LINK = g++ CXXFLAGS = ${CXXFLAGS} -.PHONY: default srs bandwidth librtmp +.PHONY: default srs librtmp default: @@ -491,7 +460,7 @@ LIBS_OBJS="${MODULE_OBJS[@]}" MODULE_ID="MAIN" MODULE_DEPENDS=("CORE" "KERNEL" "RTMP" "APP") ModuleLibIncs=(${LibSTRoot} ${SRS_OBJS} ${LibGperfRoot}) -MODULE_FILES=("srs_main_server" "srs_main_bandcheck") +MODULE_FILES=("srs_main_server") MAIN_INCS="src/main"; MODULE_DIR=${MAIN_INCS} . auto/modules.sh MAIN_OBJS="${MODULE_OBJS[@]}" @@ -500,7 +469,7 @@ MAIN_OBJS="${MODULE_OBJS[@]}" # then link to a binary, for example, objs/srs # # all main entrances -MAIN_ENTRANCES=("srs_main_server" "srs_main_bandcheck") +MAIN_ENTRANCES=("srs_main_server") # # all depends libraries ModuleLibFiles=(${LibSTfile} ${LibHttpParserfile} ${LibSSLfile} ${LibGperfFile}) @@ -511,10 +480,6 @@ LINK_OPTIONS="${SrsLinkOptions}${SrsGprofLink}${SrsGperfLink}" # srs: # srs(simple rtmp server) over st(state-threads) BUILD_KEY="srs" APP_MAIN="srs_main_server" APP_NAME="srs" . auto/apps.sh -# bandwidth test tool, to test the bandwidth to server -if [ $SRS_BWTC = YES ]; then - BUILD_KEY="bandwidth" APP_MAIN="srs_main_bandcheck" APP_NAME="bandwidth" . auto/apps.sh -fi # srs librtmp if [ $SRS_LIBRTMP = YES ]; then MODULE_OBJS="${CORE_OBJS[@]} ${KERNEL_OBJS[@]} ${RTMP_OBJS[@]} ${LIBS_OBJS[@]}" @@ -601,11 +566,6 @@ if [ $SRS_LIBRTMP = YES ]; then else echo -e "${YELLOW}note: srs-librtmp for client is disabled${BLACK}" fi -if [ $SRS_BWTC = YES ]; then - echo -e "${GREEN}srs bandwidth test client is enabled${BLACK}" -else - echo -e "${GREEN}note: srs bandwidth test client is disabled${BLACK}" -fi if [ $SRS_RESEARCH = YES ]; then echo -e "${GREEN}research tools are builded${BLACK}" else diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index dd20685fe..c099cc33f 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // current release version #define VERSION_MAJOR "0" #define VERSION_MINOR "9" -#define VERSION_REVISION "158" +#define VERSION_REVISION "159" #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION // server info. #define RTMP_SIG_SRS_KEY "SRS" diff --git a/trunk/src/main/srs_main_bandcheck.cpp b/trunk/src/main/srs_main_bandcheck.cpp deleted file mode 100644 index 475ad0b49..000000000 --- a/trunk/src/main/srs_main_bandcheck.cpp +++ /dev/null @@ -1,817 +0,0 @@ -/* -The MIT License (MIT) - -Copyright (c) 2013-2014 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. -*/ - -#include <sys/socket.h> -#include <netinet/in.h> -#include <arpa/inet.h> -#include <sstream> -#include <getopt.h> -#include <stdlib.h> - -#include <srs_protocol_rtmp.hpp> -#include <srs_protocol_stack.hpp> -#include <srs_kernel_error.hpp> -#include <srs_protocol_amf0.hpp> -#include <srs_core_autofree.hpp> -#include <srs_kernel_stream.hpp> -#include <srs_app_socket.hpp> -#include <srs_app_config.hpp> -#include <srs_app_log.hpp> -#include <srs_app_server.hpp> -#include <srs_kernel_utility.hpp> - -// kernel module. -ISrsLog* _srs_log = new SrsFastLog(); -ISrsThreadContext* _srs_context = new ISrsThreadContext(); -// app module. -SrsConfig* _srs_config = NULL; -SrsServer* _srs_server = NULL; - -#include <st.h> - -// server play control -#define SRS_BW_CHECK_START_PLAY "onSrsBandCheckStartPlayBytes" -#define SRS_BW_CHECK_STARTING_PLAY "onSrsBandCheckStartingPlayBytes" -#define SRS_BW_CHECK_STOP_PLAY "onSrsBandCheckStopPlayBytes" -#define SRS_BW_CHECK_STOPPED_PLAY "onSrsBandCheckStoppedPlayBytes" - -// server publish control -#define SRS_BW_CHECK_START_PUBLISH "onSrsBandCheckStartPublishBytes" -#define SRS_BW_CHECK_STARTING_PUBLISH "onSrsBandCheckStartingPublishBytes" -#define SRS_BW_CHECK_STOP_PUBLISH "onSrsBandCheckStopPublishBytes" -#define SRS_BW_CHECK_STOPPED_PUBLISH "onSrsBandCheckStoppedPublishBytes" - -// EOF control. -#define SRS_BW_CHECK_FINISHED "onSrsBandCheckFinished" -#define SRS_BW_CHECK_FLASH_FINAL "finalClientPacket" - -// client only -#define SRS_BW_CHECK_PLAYING "onSrsBandCheckPlaying" -#define SRS_BW_CHECK_PUBLISHING "onSrsBandCheckPublishing" - -class ISrsProtocolReaderWriter; - -/** -* @brief class of Linux version band check client -* check play and publish speed. -*/ -class SrsBandCheckClient : public SrsRtmpClient -{ -public: - SrsBandCheckClient(ISrsProtocolReaderWriter* io); - ~SrsBandCheckClient(); - -public: - /** - * @brief test play - * - */ - int check_play(); - /** - * @brief test publish - * - */ - int check_publish(); - -private: - /** - * @brief just return success. - */ - int create_stream(int& stream_id); - /** - * @brief just return success. - */ - int play(std::string stream, int stream_id); - /** - * @brief just return success. - */ - int publish(std::string stream, int stream_id); - -private: - int expect_start_play(); - int send_starting_play(); - int expect_stop_play(); - int send_stopped_play(); - int expect_start_pub(); - int send_starting_pub(); - int send_pub_data(); - int expect_stop_pub(); - /** - * @brief expect result. - * because the core module has no method to decode this packet - * so we must get the internal data and decode it here. - */ - int expect_finished(); - int send_stopped_pub(); - /** - * @brief notify server the check procedure is over. - */ - int send_final(); -}; - -/** -* @brief class of band check -* used to check band width with a client @param bandCheck_Client -*/ -class SrsBandCheck -{ -public: - SrsBandCheck(); - ~SrsBandCheck(); - -public: - /** - * @brief band check method - * - * connect to server------>rtmp handshake------>rtmp connect------>play------>publish - * @retval ERROR_SUCCESS when success. - */ - int check(const std::string& app, const std::string& tcUrl); - - /** - * @brief set the address and port of test server - * - * @param server server address, domain or ip - * @param server listened port ,default is 1935 - */ - void set_server(const std::string& server, int port = 1935); - -private: - int connect_server(); -private: - st_netfd_t stfd; - ISrsProtocolReaderWriter* skt; - SrsBandCheckClient* bandCheck_Client; - std::string server_address; - int server_port; -}; - -/** -* @brief init st lib -*/ -static int init_st(); -static void print_help(char** argv); -static void print_version(); - -/** -* @brief get user option -* @internal ip Mandatory arguments -* @internal key Mandatory arguments -* @internal port default 1935 -* @internal vhost default bandcheck.srs.com -*/ -static int get_opt(int argc ,char* argv[]); - -/** -* global var. -*/ -static struct option long_options[] = -{ - {"ip", required_argument, 0, 'i'}, - {"port", optional_argument, 0, 'p'}, - {"key", required_argument, 0, 'k'}, - {"vhost", optional_argument, 0, 'v'}, - {"help", no_argument, 0, 'h'}, - {"version", no_argument, 0, 'V'}, -}; - -static const char* short_options = "i:p::k:v::hV"; - -static std::string g_ip; -static int g_port = 1935; -static std::string g_key; -static std::string g_vhost = "bandcheck.srs.com"; - -#define BUILD_VERSION "srs band check 0.1" - -// TODO: FIXME: by winlin, the bandwidth test tool has logic bug. -int main(int argc ,char* argv[]) -{ - int ret = ERROR_SUCCESS; - - if (argc <= 1) { - print_help(argv); - exit(1); - } - - if ((ret = get_opt(argc, argv)) != ERROR_SUCCESS) { - return -1; - } - - // check param - if (g_ip.empty()) { - printf("ip address should not be empty.\n"); - return -1; - } - - if (g_key.empty()) { - printf("test key should not be empty.\n"); - return -1; - } - - if ((ret = init_st()) != ERROR_SUCCESS) { - srs_error("band check init failed. ret=%d", ret); - return ret; - } - - std::string app = "app?key=" + g_key + "&vhost=" + g_vhost; - - char tcUrl_buffer[1024] = {0}; - sprintf(tcUrl_buffer, "rtmp://%s:%d/%s", g_ip.c_str(), g_port, app.c_str()); - std::string tcUrl = tcUrl_buffer; - - SrsBandCheck band_check; - band_check.set_server(g_ip, g_port); - if ((ret = band_check.check(app, tcUrl)) != ERROR_SUCCESS) { - srs_error("band check failed. address=%s ret=%d", "xx.com", ret); - return -1; - } - - return 0; -} - -SrsBandCheckClient::SrsBandCheckClient(ISrsProtocolReaderWriter* io) - : SrsRtmpClient(io) -{ -} - -SrsBandCheckClient::~SrsBandCheckClient() -{ -} - -int SrsBandCheckClient::check_play() -{ - int ret = ERROR_SUCCESS; - - if ((ret = expect_start_play()) != ERROR_SUCCESS) { - srs_error("expect_start_play failed. ret=%d", ret); - return ret; - } - - if ((ret = send_starting_play()) != ERROR_SUCCESS) { - srs_error("send starting play failed. ret=%d", ret); - return ret; - } - - if ((ret = expect_stop_play()) != ERROR_SUCCESS) { - srs_error("expect stop play failed. ret=%d", ret); - return ret; - } - - if ((ret = send_stopped_play()) != ERROR_SUCCESS) { - srs_error("send stopped play failed. ret=%d", ret); - return ret; - } - - return ret; -} - -int SrsBandCheckClient::check_publish() -{ - int ret = ERROR_SUCCESS; - - if ((ret = expect_start_pub()) != ERROR_SUCCESS) { - srs_error("expect start pub failed. ret=%d", ret); - return ret; - } - - if ((ret = send_starting_pub())!= ERROR_SUCCESS) { - srs_error("send starting pub failed. ret=%d", ret); - return ret; - } - - if ((ret = send_pub_data()) != ERROR_SUCCESS) { - srs_error("publish data failed. ret=%d", ret); - return ret; - } - - if ((ret = send_stopped_pub()) != ERROR_SUCCESS) { - srs_error("send stopped pub failed. ret=%d", ret); - return ret; - } - - if ((ret = expect_finished()) != ERROR_SUCCESS) { - srs_error("expect finished msg failed. ret=%d", ret); - return ret; - } - - if ((ret = send_final()) != ERROR_SUCCESS) { - srs_error("send final msg failed. ret=%d", ret); - return ret; - } - - return ret; -} - -int SrsBandCheckClient::create_stream(int &stream_id) -{ - return ERROR_SUCCESS; -} - -int SrsBandCheckClient::play(std::string stream, int stream_id) -{ - return ERROR_SUCCESS; -} - -int SrsBandCheckClient::publish(std::string stream, int stream_id) -{ - return ERROR_SUCCESS; -} - -int SrsBandCheckClient::expect_start_play() -{ - int ret = ERROR_SUCCESS; - - // expect connect _result - SrsMessage* msg = NULL; - SrsBandwidthPacket* pkt = NULL; - if ((ret = expect_message<SrsBandwidthPacket>(&msg, &pkt)) != ERROR_SUCCESS) { - srs_error("expect bandcheck start play message failed. ret=%d", ret); - return ret; - } - SrsAutoFree(SrsMessage, msg); - SrsAutoFree(SrsBandwidthPacket, pkt); - srs_info("get bandcheck start play message"); - - if (pkt->command_name != SRS_BW_CHECK_START_PLAY) { - srs_error("pkt error. expect=%s, actual=%s", SRS_BW_CHECK_START_PLAY, pkt->command_name.c_str()); - return -1; - } - - return ret; -} - -int SrsBandCheckClient::send_starting_play() -{ - int ret = ERROR_SUCCESS; - - SrsBandwidthPacket* pkt = new SrsBandwidthPacket; - pkt->command_name = SRS_BW_CHECK_STARTING_PLAY; - if ((ret = send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) { - srs_error("send starting play msg failed. ret=%d", ret); - return ret; - } - - return ret; -} - -int SrsBandCheckClient::expect_stop_play() -{ - int ret = ERROR_SUCCESS; - - while (true) { - SrsMessage* msg = NULL; - SrsBandwidthPacket* pkt = NULL; - if ((ret = expect_message<SrsBandwidthPacket>(&msg, &pkt)) != ERROR_SUCCESS) { - srs_error("expect stop play message failed. ret=%d", ret); - return ret; - } - SrsAutoFree(SrsMessage, msg); - SrsAutoFree(SrsBandwidthPacket, pkt); - srs_info("get bandcheck stop play message"); - - if (pkt->command_name == SRS_BW_CHECK_STOP_PLAY) { - break; - } - } - - return ret; -} - -int SrsBandCheckClient::send_stopped_play() -{ - int ret = ERROR_SUCCESS; - - SrsBandwidthPacket* pkt = new SrsBandwidthPacket; - pkt->command_name = SRS_BW_CHECK_STOPPED_PLAY; - if ((ret = send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) { - srs_error("send stopped play msg failed. ret=%d", ret); - return ret; - } - - return ret; -} - -int SrsBandCheckClient::expect_start_pub() -{ - int ret = ERROR_SUCCESS; - - while (true) { - SrsMessage* msg = NULL; - SrsBandwidthPacket* pkt = NULL; - if ((ret = expect_message<SrsBandwidthPacket>(&msg, &pkt)) != ERROR_SUCCESS) { - srs_error("expect start pub message failed. ret=%d", ret); - return ret; - } - SrsAutoFree(SrsMessage, msg); - SrsAutoFree(SrsBandwidthPacket, pkt); - srs_info("get bandcheck start pub message"); - - if (pkt->command_name == SRS_BW_CHECK_START_PUBLISH) { - break; - } - } - - return ret; -} - -int SrsBandCheckClient::send_starting_pub() -{ - int ret = ERROR_SUCCESS; - - SrsBandwidthPacket* pkt = new SrsBandwidthPacket; - pkt->command_name = SRS_BW_CHECK_STARTING_PUBLISH; - if ((ret = send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) { - srs_error("send starting play msg failed. ret=%d", ret); - return ret; - } - srs_info("send starting play msg success."); - - return ret; -} - -int SrsBandCheckClient::send_pub_data() -{ - int ret = ERROR_SUCCESS; - - int data_count = 100; - while (true) { - SrsBandwidthPacket* pkt = new SrsBandwidthPacket; - pkt->command_name = SRS_BW_CHECK_PUBLISHING; - - for (int i = 0; i < data_count; ++i) { - std::stringstream seq; - seq << i; - std::string play_data = "SrS band check data from client's publishing......"; - pkt->data->set(seq.str(), SrsAmf0Any::str(play_data.c_str())); - } - data_count += 100; - - if ((ret = send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) { - srs_error("send publish message failed.ret=%d", ret); - return ret; - } - - if ((ret = expect_stop_pub()) == ERROR_SUCCESS) { - break; - } - } - - return ret; -} - -int SrsBandCheckClient::expect_stop_pub() -{ - int ret = ERROR_SUCCESS; - - this->set_recv_timeout(1000 * 1000); - this->set_send_timeout(1000 * 1000); - - SrsMessage* msg; - SrsBandwidthPacket* pkt; - if ((ret = expect_message<SrsBandwidthPacket>(&msg, &pkt)) != ERROR_SUCCESS) { - return ret; - } - SrsAutoFree(SrsMessage, msg); - SrsAutoFree(SrsBandwidthPacket, pkt); - if (pkt->command_name == SRS_BW_CHECK_STOP_PUBLISH) { - return ret; - } - - return ret; -} - -int SrsBandCheckClient::expect_finished() -{ - int ret = ERROR_SUCCESS; - - while (true) { - SrsMessage* msg = NULL; - SrsBandwidthPacket* pkt = NULL; - if ((ret = expect_message<SrsBandwidthPacket>(&msg, &pkt)) != ERROR_SUCCESS) { - srs_error("expect finished message failed. ret=%d", ret); - return ret; - } - SrsAutoFree(SrsMessage, msg); - SrsAutoFree(SrsBandwidthPacket, pkt); - srs_info("get bandcheck finished message"); - - if (pkt->command_name == SRS_BW_CHECK_FINISHED) { - SrsStream *stream = new SrsStream; - SrsAutoFree(SrsStream, stream); - - if ((ret = stream->initialize((char*)msg->payload, msg->size)) != ERROR_SUCCESS) { - srs_error("initialize stream error. ret=%d", ret); - return ret; - } - - std::string command_name; - if ((ret = srs_amf0_read_string(stream, command_name)) != ERROR_SUCCESS) { - srs_error("amfo read string error. ret=%d", ret); - return ret; - } - - double action_id; - if ((ret = srs_amf0_read_number(stream, action_id)) != ERROR_SUCCESS) { - srs_error("amfo read number error. ret=%d", ret); - return ret; - } - - if ((ret = srs_amf0_read_null(stream)) != ERROR_SUCCESS) { - srs_error("amfo read number error. ret=%d", ret); - return ret; - } - - SrsAmf0Object* object = SrsAmf0Any::object(); - if ((ret = object->read(stream)) != ERROR_SUCCESS) { - srs_freep(object); - srs_error("amfo read object error. ret=%d", ret); - return ret; - } - - int64_t start_time = 0; - int64_t end_time = 0; - - SrsAmf0Any* start_time_any = object->get_property("start_time"); - if (start_time_any && start_time_any->is_number()) { - start_time = start_time_any->to_number(); - } - - SrsAmf0Any* end_time_any = object->get_property("end_time"); - if (end_time_any && end_time_any->is_number()) { - end_time = end_time_any->to_number(); - } - - int play_kbps = 0; - int pub_kbps = 0; - SrsAmf0Any* play_kbp_any = object->get_property("play_kbps"); - if (play_kbp_any && play_kbp_any->is_number()) { - play_kbps = play_kbp_any->to_number(); - } - - SrsAmf0Any* pub_kbp_any = object->get_property("publish_kbps"); - if (pub_kbp_any && pub_kbp_any->is_number()) { - pub_kbps = pub_kbp_any->to_number(); - } - - float time_elapsed; - if (end_time - start_time > 0) { - time_elapsed = (end_time - start_time) / 1000.00; - } - - srs_trace("result: play %d kbps, publish %d kbps, check time %.4f S\n" - , play_kbps, pub_kbps, time_elapsed); - - break; - } - } - - return ret; -} - -int SrsBandCheckClient::send_stopped_pub() -{ - int ret = ERROR_SUCCESS; - - SrsBandwidthPacket* pkt = new SrsBandwidthPacket; - pkt->command_name = SRS_BW_CHECK_STOPPED_PUBLISH; - if ((ret = send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) { - srs_error("send stopped pub msg failed. ret=%d", ret); - return ret; - } - srs_info("send stopped pub msg success."); - - return ret; -} - -int SrsBandCheckClient::send_final() -{ - int ret = ERROR_SUCCESS; - - SrsBandwidthPacket* pkt = new SrsBandwidthPacket; - pkt->command_name = SRS_BW_CHECK_FLASH_FINAL; - if ((ret = send_and_free_packet(pkt, 0)) != ERROR_SUCCESS) { - srs_error("send final msg failed. ret=%d", ret); - return ret; - } - srs_info("send final msg success."); - - return ret; -} - -SrsBandCheck::SrsBandCheck() -{ - skt = NULL; - bandCheck_Client = NULL; - stfd = NULL; -} - -SrsBandCheck::~SrsBandCheck() -{ - srs_freep(bandCheck_Client); - srs_freep(skt); - srs_close_stfd(stfd); -} - -int SrsBandCheck::check(const std::string &app, const std::string &tcUrl) -{ - int ret = ERROR_SUCCESS; - - if ((ret = connect_server()) != ERROR_SUCCESS) { - srs_error("connect to server failed. ret = %d", ret); - return ret; - } - - if ((ret = bandCheck_Client->handshake()) != ERROR_SUCCESS) { - srs_error("handshake failed. ret = %d", ret); - return ret; - } - - if ((ret = bandCheck_Client->connect_app(app, tcUrl)) != ERROR_SUCCESS) { - srs_error("handshake failed. ret = %d", ret); - return ret; - } - - if ((ret = bandCheck_Client->check_play()) != ERROR_SUCCESS) { - srs_error("band check play failed."); - return ret; - } - - if ((ret = bandCheck_Client->check_publish()) != ERROR_SUCCESS) { - srs_error("band check publish failed."); - return ret; - } - - return ret; -} - -void SrsBandCheck::set_server(const std::string &server, int port) -{ - server_address = server; - server_port = port; -} - -int SrsBandCheck::connect_server() -{ - int ret = ERROR_SUCCESS; - - int sock = socket(AF_INET, SOCK_STREAM, 0); - if(sock == -1){ - ret = ERROR_SOCKET_CREATE; - srs_error("create socket error. ret=%d", ret); - return ret; - } - - stfd = st_netfd_open_socket(sock); - if(stfd == NULL){ - ret = ERROR_ST_OPEN_SOCKET; - srs_error("st_netfd_open_socket failed. ret=%d", ret); - return ret; - } - - skt = new SrsSocket(stfd); - bandCheck_Client = new SrsBandCheckClient(skt); - - // connect to server. - std::string ip = srs_dns_resolve(server_address); - if (ip.empty()) { - ret = ERROR_SYSTEM_IP_INVALID; - srs_error("dns resolve server error, ip empty. ret=%d", ret); - return ret; - } - - sockaddr_in addr; - addr.sin_family = AF_INET; - addr.sin_port = htons(server_port); - addr.sin_addr.s_addr = inet_addr(ip.c_str()); - - if (st_connect(stfd, (const struct sockaddr*)&addr, sizeof(sockaddr_in), ST_UTIME_NO_TIMEOUT) == -1){ - ret = ERROR_ST_CONNECT; - srs_error("connect to server error. ip=%s, port=%d, ret=%d", ip.c_str(), server_port, ret); - return ret; - } - srs_trace("connect to server success. server=%s, ip=%s, port=%d", server_address.c_str(), ip.c_str(), server_port); - - return ret; -} - -int init_st() -{ - int ret = ERROR_SUCCESS; - - if (st_set_eventsys(ST_EVENTSYS_ALT) == -1) { - ret = ERROR_ST_SET_EPOLL; - srs_error("st_set_eventsys use linux epoll failed. ret=%d", ret); - return ret; - } - - if(st_init() != 0){ - ret = ERROR_ST_INITIALIZE; - srs_error("st_init failed. ret=%d", ret); - return ret; - } - - return ret; -} - -void print_help(char** argv) -{ - printf( - "Usage: %s [OPTION]...\n" - "test band width from client to rtmp server.\n" - "Mandatory arguments to long options are mandatory for short options too.\n" - " -i, --ip the ip or domain that to test\n" - " -p, --port the port that server listen \n" - " -k, --key the key used to test \n" - " -v, --vhost the vhost used to test \n" - " -V, --version output version information and exit \n" - " -h, --help display this help and exit \n" - "\n" - "For example:\n" - " %s -i 127.0.0.1 -p 1935 -v bandcheck.srs.com -k 35c9b402c12a7246868752e2878f7e0e" - "\n\n" - "Exit status:\n" - "0 if OK,\n" - "other if error occured, and the detail should be printed.\n" - "\n\n" - "srs home page: <http://blog.chinaunix.net/uid/25006789.html>\n", - argv[0], argv[0]); -} - -void print_version() -{ - const char *version = "" - "srs_bandcheck "BUILD_VERSION"\n" - "Copyright (c) 2013-2014 wenjiegit.\n" - "License MIT\n" - "This is free software: you are free to change and redistribute it.\n" - "There is NO WARRANTY, to the extent permitted by law.\n" - "\n" - "Written by wenjie.\n"; - - printf("%s", version); -} - -int get_opt(int argc, char *argv[]) -{ - int ret = ERROR_SUCCESS; - - int c; - while ((c = getopt_long (argc, argv, short_options, long_options, NULL)) != -1) { - switch (c) { - case 'i': - if (optarg) { - g_ip = optarg; - } - break; - case 'p': - if (optarg) { - g_port = atoi(optarg); - } - break; - case 'k': - if (optarg) { - g_key = optarg; - } - break; - case 'v': - if (optarg) { - g_vhost = optarg; - } - break; - case 'V': - print_version(); - exit(0); - break; - case 'h': - print_help(argv); - exit(0); - break; - default: - printf("see --help or -h\n"); - ret = -1; - } - } - - return ret; -} diff --git a/trunk/src/rtmp/srs_protocol_rtmp.cpp b/trunk/src/rtmp/srs_protocol_rtmp.cpp index 40a006f35..971f6a0d8 100644 --- a/trunk/src/rtmp/srs_protocol_rtmp.cpp +++ b/trunk/src/rtmp/srs_protocol_rtmp.cpp @@ -436,8 +436,6 @@ int SrsRtmpClient::complex_handshake() int SrsRtmpClient::connect_app(string app, string tc_url, SrsRequest* req) { - int ret = ERROR_SUCCESS; - std::string srs_server_ip; std::string srs_server; std::string srs_primary_authors; diff --git a/trunk/src/srs/srs.upp b/trunk/src/srs/srs.upp index 2bb52dfba..4584de8e8 100755 --- a/trunk/src/srs/srs.upp +++ b/trunk/src/srs/srs.upp @@ -1,7 +1,6 @@ file main readonly separator, ..\main\srs_main_server.cpp, - ..\main\srs_main_bandcheck.cpp, auto readonly separator, ..\..\objs\srs_auto_headers.hpp, libs readonly separator,