mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
Merge branch 'tufang14-develop' into develop
This commit is contained in:
commit
4c18234678
8 changed files with 525 additions and 152 deletions
2
trunk/configure
vendored
2
trunk/configure
vendored
|
@ -389,7 +389,7 @@ if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
|
||||||
"srs_app_pithy_print" "srs_app_reload" "srs_app_http_api" "srs_app_http_conn" "srs_app_http_hooks"
|
"srs_app_pithy_print" "srs_app_reload" "srs_app_http_api" "srs_app_http_conn" "srs_app_http_hooks"
|
||||||
"srs_app_json" "srs_app_ingest" "srs_app_ffmpeg" "srs_app_utility" "srs_app_dvr" "srs_app_edge"
|
"srs_app_json" "srs_app_ingest" "srs_app_ffmpeg" "srs_app_utility" "srs_app_dvr" "srs_app_edge"
|
||||||
"srs_app_kbps" "srs_app_heartbeat" "srs_app_empty" "srs_app_http_client" "srs_app_avc_aac"
|
"srs_app_kbps" "srs_app_heartbeat" "srs_app_empty" "srs_app_http_client" "srs_app_avc_aac"
|
||||||
"srs_app_recv_thread" "srs_app_security")
|
"srs_app_recv_thread" "srs_app_security" "srs_app_statistic")
|
||||||
APP_INCS="src/app"; MODULE_DIR=${APP_INCS} . auto/modules.sh
|
APP_INCS="src/app"; MODULE_DIR=${APP_INCS} . auto/modules.sh
|
||||||
APP_OBJS="${MODULE_OBJS[@]}"
|
APP_OBJS="${MODULE_OBJS[@]}"
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -35,6 +35,8 @@ using namespace std;
|
||||||
#include <srs_app_json.hpp>
|
#include <srs_app_json.hpp>
|
||||||
#include <srs_kernel_utility.hpp>
|
#include <srs_kernel_utility.hpp>
|
||||||
#include <srs_app_utility.hpp>
|
#include <srs_app_utility.hpp>
|
||||||
|
#include <srs_app_statistic.hpp>
|
||||||
|
#include <srs_protocol_rtmp.hpp>
|
||||||
|
|
||||||
SrsApiRoot::SrsApiRoot()
|
SrsApiRoot::SrsApiRoot()
|
||||||
{
|
{
|
||||||
|
@ -122,6 +124,8 @@ SrsApiV1::SrsApiV1()
|
||||||
handlers.push_back(new SrsApiMemInfos());
|
handlers.push_back(new SrsApiMemInfos());
|
||||||
handlers.push_back(new SrsApiAuthors());
|
handlers.push_back(new SrsApiAuthors());
|
||||||
handlers.push_back(new SrsApiRequests());
|
handlers.push_back(new SrsApiRequests());
|
||||||
|
handlers.push_back(new SrsApiVhosts());
|
||||||
|
handlers.push_back(new SrsApiStreams());
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsApiV1::~SrsApiV1()
|
SrsApiV1::~SrsApiV1()
|
||||||
|
@ -147,7 +151,9 @@ int SrsApiV1::do_process_request(SrsStSocket* skt, SrsHttpMessage* req)
|
||||||
<< __SRS_JFIELD_STR("system_proc_stats", "the system process stats") << __SRS_JFIELD_CONT
|
<< __SRS_JFIELD_STR("system_proc_stats", "the system process stats") << __SRS_JFIELD_CONT
|
||||||
<< __SRS_JFIELD_STR("meminfos", "the meminfo of system") << __SRS_JFIELD_CONT
|
<< __SRS_JFIELD_STR("meminfos", "the meminfo of system") << __SRS_JFIELD_CONT
|
||||||
<< __SRS_JFIELD_STR("authors", "the primary authors and contributors") << __SRS_JFIELD_CONT
|
<< __SRS_JFIELD_STR("authors", "the primary authors and contributors") << __SRS_JFIELD_CONT
|
||||||
<< __SRS_JFIELD_STR("requests", "the request itself, for http debug")
|
<< __SRS_JFIELD_STR("requests", "the request itself, for http debug") << __SRS_JFIELD_CONT
|
||||||
|
<< __SRS_JFIELD_STR("vhosts", "dumps vhost to json") << __SRS_JFIELD_CONT
|
||||||
|
<< __SRS_JFIELD_STR("streams", "dumps streams to json")
|
||||||
<< __SRS_JOBJECT_END
|
<< __SRS_JOBJECT_END
|
||||||
<< __SRS_JOBJECT_END;
|
<< __SRS_JOBJECT_END;
|
||||||
|
|
||||||
|
@ -500,6 +506,70 @@ int SrsApiAuthors::do_process_request(SrsStSocket* skt, SrsHttpMessage* req)
|
||||||
return res_json(skt, req, ss.str());
|
return res_json(skt, req, ss.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SrsApiVhosts::SrsApiVhosts()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
SrsApiVhosts::~SrsApiVhosts()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SrsApiVhosts::can_handle(const char* path, int length, const char** /*pchild*/)
|
||||||
|
{
|
||||||
|
return srs_path_equals("/vhosts", path, length);
|
||||||
|
}
|
||||||
|
|
||||||
|
int SrsApiVhosts::do_process_request(SrsStSocket* skt, SrsHttpMessage* req)
|
||||||
|
{
|
||||||
|
std::stringstream data;
|
||||||
|
SrsStatistic* stat = SrsStatistic::instance();
|
||||||
|
int ret = stat->dumps_vhosts(data);
|
||||||
|
|
||||||
|
std::stringstream ss;
|
||||||
|
|
||||||
|
ss << __SRS_JOBJECT_START
|
||||||
|
<< __SRS_JFIELD_ERROR(ret) << __SRS_JFIELD_CONT
|
||||||
|
<< __SRS_JFIELD_ORG("server", stat->server_id()) << __SRS_JFIELD_CONT
|
||||||
|
<< __SRS_JFIELD_ORG("vhosts", __SRS_JARRAY_START)
|
||||||
|
<< data.str()
|
||||||
|
<< __SRS_JARRAY_END
|
||||||
|
<< __SRS_JOBJECT_END;
|
||||||
|
|
||||||
|
return res_json(skt, req, ss.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
SrsApiStreams::SrsApiStreams()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
SrsApiStreams::~SrsApiStreams()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SrsApiStreams::can_handle(const char* path, int length, const char** /*pchild*/)
|
||||||
|
{
|
||||||
|
return srs_path_equals("/streams", path, length);
|
||||||
|
}
|
||||||
|
|
||||||
|
int SrsApiStreams::do_process_request(SrsStSocket* skt, SrsHttpMessage* req)
|
||||||
|
{
|
||||||
|
std::stringstream data;
|
||||||
|
SrsStatistic* stat = SrsStatistic::instance();
|
||||||
|
int ret = stat->dumps_streams(data);
|
||||||
|
|
||||||
|
std::stringstream ss;
|
||||||
|
|
||||||
|
ss << __SRS_JOBJECT_START
|
||||||
|
<< __SRS_JFIELD_ERROR(ret) << __SRS_JFIELD_CONT
|
||||||
|
<< __SRS_JFIELD_ORG("server", stat->server_id()) << __SRS_JFIELD_CONT
|
||||||
|
<< __SRS_JFIELD_ORG("streams", __SRS_JARRAY_START)
|
||||||
|
<< data.str()
|
||||||
|
<< __SRS_JARRAY_END
|
||||||
|
<< __SRS_JOBJECT_END;
|
||||||
|
|
||||||
|
return res_json(skt, req, ss.str());
|
||||||
|
}
|
||||||
|
|
||||||
SrsHttpApi::SrsHttpApi(SrsServer* srs_server, st_netfd_t client_stfd, SrsHttpHandler* _handler)
|
SrsHttpApi::SrsHttpApi(SrsServer* srs_server, st_netfd_t client_stfd, SrsHttpHandler* _handler)
|
||||||
: SrsConnection(srs_server, client_stfd)
|
: SrsConnection(srs_server, client_stfd)
|
||||||
{
|
{
|
||||||
|
|
|
@ -164,6 +164,28 @@ protected:
|
||||||
virtual int do_process_request(SrsStSocket* skt, SrsHttpMessage* req);
|
virtual int do_process_request(SrsStSocket* skt, SrsHttpMessage* req);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class SrsApiVhosts : public SrsHttpHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SrsApiVhosts();
|
||||||
|
virtual ~SrsApiVhosts();
|
||||||
|
public:
|
||||||
|
virtual bool can_handle(const char* path, int length, const char** pchild);
|
||||||
|
protected:
|
||||||
|
virtual int do_process_request(SrsStSocket* skt, SrsHttpMessage* req);
|
||||||
|
};
|
||||||
|
|
||||||
|
class SrsApiStreams : public SrsHttpHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SrsApiStreams();
|
||||||
|
virtual ~SrsApiStreams();
|
||||||
|
public:
|
||||||
|
virtual bool can_handle(const char* path, int length, const char** pchild);
|
||||||
|
protected:
|
||||||
|
virtual int do_process_request(SrsStSocket* skt, SrsHttpMessage* req);
|
||||||
|
};
|
||||||
|
|
||||||
class SrsHttpApi : public SrsConnection
|
class SrsHttpApi : public SrsConnection
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -52,6 +52,7 @@ using namespace std;
|
||||||
#include <srs_core_performance.hpp>
|
#include <srs_core_performance.hpp>
|
||||||
#include <srs_kernel_utility.hpp>
|
#include <srs_kernel_utility.hpp>
|
||||||
#include <srs_app_security.hpp>
|
#include <srs_app_security.hpp>
|
||||||
|
#include <srs_app_statistic.hpp>
|
||||||
|
|
||||||
// when stream is busy, for example, streaming is already
|
// when stream is busy, for example, streaming is already
|
||||||
// publishing, when a new client to request to publish,
|
// publishing, when a new client to request to publish,
|
||||||
|
@ -395,6 +396,13 @@ int SrsRtmpConn::stream_service_cycle()
|
||||||
}
|
}
|
||||||
srs_assert(source != NULL);
|
srs_assert(source != NULL);
|
||||||
|
|
||||||
|
// update the statistic when source disconveried.
|
||||||
|
SrsStatistic* stat = SrsStatistic::instance();
|
||||||
|
if ((ret = stat->on_client(_srs_context->get_id(), req)) != ERROR_SUCCESS) {
|
||||||
|
srs_error("stat client failed. ret=%d", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
// check ASAP, to fail it faster if invalid.
|
// check ASAP, to fail it faster if invalid.
|
||||||
if (type != SrsRtmpConnPlay && !vhost_is_edge) {
|
if (type != SrsRtmpConnPlay && !vhost_is_edge) {
|
||||||
// check publish available
|
// check publish available
|
||||||
|
|
|
@ -1807,4 +1807,3 @@ void SrsSource::destroy_forwarders()
|
||||||
forwarders.clear();
|
forwarders.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
164
trunk/src/app/srs_app_statistic.cpp
Normal file
164
trunk/src/app/srs_app_statistic.cpp
Normal file
|
@ -0,0 +1,164 @@
|
||||||
|
/*
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2013-2015 winlin
|
||||||
|
|
||||||
|
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 <srs_app_statistic.hpp>
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sstream>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
#include <srs_protocol_rtmp.hpp>
|
||||||
|
#include <srs_app_json.hpp>
|
||||||
|
|
||||||
|
int64_t __srs_gvid = getpid();
|
||||||
|
|
||||||
|
int64_t __srs_generate_id()
|
||||||
|
{
|
||||||
|
return __srs_gvid++;
|
||||||
|
}
|
||||||
|
|
||||||
|
SrsStatisticVhost::SrsStatisticVhost()
|
||||||
|
{
|
||||||
|
id = __srs_generate_id();
|
||||||
|
}
|
||||||
|
|
||||||
|
SrsStatisticVhost::~SrsStatisticVhost()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
SrsStatisticStream::SrsStatisticStream()
|
||||||
|
{
|
||||||
|
id = __srs_generate_id();
|
||||||
|
vhost = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
SrsStatisticStream::~SrsStatisticStream()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
SrsStatistic* SrsStatistic::_instance = new SrsStatistic();
|
||||||
|
|
||||||
|
SrsStatistic::SrsStatistic()
|
||||||
|
{
|
||||||
|
_server_id = __srs_generate_id();
|
||||||
|
}
|
||||||
|
|
||||||
|
SrsStatistic::~SrsStatistic()
|
||||||
|
{
|
||||||
|
if (true) {
|
||||||
|
std::map<std::string, SrsStatisticVhost*>::iterator it;
|
||||||
|
for (it = vhosts.begin(); it != vhosts.end(); it++) {
|
||||||
|
SrsStatisticVhost* vhost = it->second;
|
||||||
|
srs_freep(vhost);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (true) {
|
||||||
|
std::map<std::string, SrsStatisticStream*>::iterator it;
|
||||||
|
for (it = streams.begin(); it != streams.end(); it++) {
|
||||||
|
SrsStatisticStream* stream = it->second;
|
||||||
|
srs_freep(stream);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (true) {
|
||||||
|
std::map<int, SrsStatisticClient*>::iterator it;
|
||||||
|
for (it = clients.begin(); it != clients.end(); it++) {
|
||||||
|
SrsStatisticClient* client = it->second;
|
||||||
|
srs_freep(client);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SrsStatistic* SrsStatistic::instance()
|
||||||
|
{
|
||||||
|
return _instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
int SrsStatistic::on_client(int id, SrsRequest* req)
|
||||||
|
{
|
||||||
|
int ret = ERROR_SUCCESS;
|
||||||
|
|
||||||
|
// create vhost if not exists.
|
||||||
|
SrsStatisticVhost* vhost = NULL;
|
||||||
|
if (vhosts.find(req->vhost) == vhosts.end()) {
|
||||||
|
vhost = new SrsStatisticVhost();
|
||||||
|
vhost->vhost = req->vhost;
|
||||||
|
vhosts[req->vhost] = vhost;
|
||||||
|
} else {
|
||||||
|
vhost = vhosts[req->vhost];
|
||||||
|
}
|
||||||
|
|
||||||
|
// the url to identify the stream.
|
||||||
|
std::string url = req->get_stream_url();
|
||||||
|
|
||||||
|
// create stream if not exists.
|
||||||
|
SrsStatisticStream* stream = NULL;
|
||||||
|
if (streams.find(url) == streams.end()) {
|
||||||
|
stream = new SrsStatisticStream();
|
||||||
|
stream->vhost = vhost;
|
||||||
|
stream->stream = req->stream;
|
||||||
|
stream->url = url;
|
||||||
|
streams[url] = stream;
|
||||||
|
} else {
|
||||||
|
stream = streams[url];
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t SrsStatistic::server_id()
|
||||||
|
{
|
||||||
|
return _server_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
int SrsStatistic::dumps_vhosts(stringstream& ss)
|
||||||
|
{
|
||||||
|
int ret = ERROR_SUCCESS;
|
||||||
|
|
||||||
|
std::map<std::string, SrsStatisticVhost*>::iterator it;
|
||||||
|
for (it = vhosts.begin(); it != vhosts.end(); it++) {
|
||||||
|
SrsStatisticVhost* vhost = it->second;
|
||||||
|
ss << __SRS_JOBJECT_START
|
||||||
|
<< __SRS_JFIELD_ORG("id", vhost->id) << __SRS_JFIELD_CONT
|
||||||
|
<< __SRS_JFIELD_STR("name", vhost->vhost)
|
||||||
|
<< __SRS_JOBJECT_END;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int SrsStatistic::dumps_streams(stringstream& ss)
|
||||||
|
{
|
||||||
|
int ret = ERROR_SUCCESS;
|
||||||
|
|
||||||
|
std::map<std::string, SrsStatisticStream*>::iterator it;
|
||||||
|
for (it = streams.begin(); it != streams.end(); it++) {
|
||||||
|
SrsStatisticStream* stream = it->second;
|
||||||
|
ss << __SRS_JOBJECT_START
|
||||||
|
<< __SRS_JFIELD_ORG("id", stream->id) << __SRS_JFIELD_CONT
|
||||||
|
<< __SRS_JFIELD_STR("name", stream->stream) << __SRS_JFIELD_CONT
|
||||||
|
<< __SRS_JFIELD_ORG("vhost", stream->vhost->id)
|
||||||
|
<< __SRS_JOBJECT_END;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
108
trunk/src/app/srs_app_statistic.hpp
Normal file
108
trunk/src/app/srs_app_statistic.hpp
Normal file
|
@ -0,0 +1,108 @@
|
||||||
|
/*
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2013-2015 winlin
|
||||||
|
|
||||||
|
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_APP_STATISTIC_HPP
|
||||||
|
#define SRS_APP_STATISTIC_HPP
|
||||||
|
|
||||||
|
/*
|
||||||
|
#include <srs_app_statistic.hpp>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <srs_core.hpp>
|
||||||
|
|
||||||
|
#include <map>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
class SrsRequest;
|
||||||
|
|
||||||
|
struct SrsStatisticVhost
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
int64_t id;
|
||||||
|
std::string vhost;
|
||||||
|
public:
|
||||||
|
SrsStatisticVhost();
|
||||||
|
virtual ~SrsStatisticVhost();
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SrsStatisticStream
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
int64_t id;
|
||||||
|
SrsStatisticVhost* vhost;
|
||||||
|
std::string app;
|
||||||
|
std::string stream;
|
||||||
|
std::string url;
|
||||||
|
public:
|
||||||
|
SrsStatisticStream();
|
||||||
|
virtual ~SrsStatisticStream();
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SrsStatisticClient
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SrsStatisticStream* stream;
|
||||||
|
int id;
|
||||||
|
};
|
||||||
|
|
||||||
|
class SrsStatistic
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
static SrsStatistic *_instance;
|
||||||
|
// the id to identify the sever.
|
||||||
|
int64_t _server_id;
|
||||||
|
// key: vhost name, value: vhost object.
|
||||||
|
std::map<std::string, SrsStatisticVhost*> vhosts;
|
||||||
|
// key: stream name, value: stream object.
|
||||||
|
std::map<std::string, SrsStatisticStream*> streams;
|
||||||
|
// key: client id, value: stream object.
|
||||||
|
std::map<int, SrsStatisticClient*> clients;
|
||||||
|
private:
|
||||||
|
SrsStatistic();
|
||||||
|
virtual ~SrsStatistic();
|
||||||
|
public:
|
||||||
|
static SrsStatistic* instance();
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* when got a client to publish/play stream,
|
||||||
|
* @param id, the client srs id.
|
||||||
|
* @param req, the client request object.
|
||||||
|
*/
|
||||||
|
virtual int on_client(int id, SrsRequest* req);
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* get the server id, used to identify the server.
|
||||||
|
* for example, when restart, the server id must changed.
|
||||||
|
*/
|
||||||
|
virtual int64_t server_id();
|
||||||
|
/**
|
||||||
|
* dumps the vhosts to sstream in json.
|
||||||
|
*/
|
||||||
|
virtual int dumps_vhosts(std::stringstream& ss);
|
||||||
|
/**
|
||||||
|
* dumps the streams to sstream in json.
|
||||||
|
*/
|
||||||
|
virtual int dumps_streams(std::stringstream& ss);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -1,153 +1,155 @@
|
||||||
file
|
file
|
||||||
main readonly separator,
|
main readonly separator,
|
||||||
..\main\srs_main_server.cpp,
|
..\main\srs_main_server.cpp,
|
||||||
auto readonly separator,
|
auto readonly separator,
|
||||||
..\..\objs\srs_auto_headers.hpp,
|
..\..\objs\srs_auto_headers.hpp,
|
||||||
libs readonly separator,
|
libs readonly separator,
|
||||||
..\libs\srs_librtmp.hpp,
|
..\libs\srs_librtmp.hpp,
|
||||||
..\libs\srs_librtmp.cpp,
|
..\libs\srs_librtmp.cpp,
|
||||||
..\libs\srs_lib_bandwidth.hpp,
|
..\libs\srs_lib_bandwidth.hpp,
|
||||||
..\libs\srs_lib_bandwidth.cpp,
|
..\libs\srs_lib_bandwidth.cpp,
|
||||||
..\libs\srs_lib_simple_socket.hpp,
|
..\libs\srs_lib_simple_socket.hpp,
|
||||||
..\libs\srs_lib_simple_socket.cpp,
|
..\libs\srs_lib_simple_socket.cpp,
|
||||||
core readonly separator,
|
core readonly separator,
|
||||||
..\core\srs_core.hpp,
|
..\core\srs_core.hpp,
|
||||||
..\core\srs_core.cpp,
|
..\core\srs_core.cpp,
|
||||||
..\core\srs_core_autofree.hpp,
|
..\core\srs_core_autofree.hpp,
|
||||||
..\core\srs_core_autofree.cpp,
|
..\core\srs_core_autofree.cpp,
|
||||||
..\core\srs_core_performance.hpp,
|
..\core\srs_core_performance.hpp,
|
||||||
..\core\srs_core_performance.cpp,
|
..\core\srs_core_performance.cpp,
|
||||||
kernel readonly separator,
|
kernel readonly separator,
|
||||||
..\kernel\srs_kernel_codec.hpp,
|
..\kernel\srs_kernel_codec.hpp,
|
||||||
..\kernel\srs_kernel_codec.cpp,
|
..\kernel\srs_kernel_codec.cpp,
|
||||||
..\kernel\srs_kernel_consts.hpp,
|
..\kernel\srs_kernel_consts.hpp,
|
||||||
..\kernel\srs_kernel_consts.cpp,
|
..\kernel\srs_kernel_consts.cpp,
|
||||||
..\kernel\srs_kernel_error.hpp,
|
..\kernel\srs_kernel_error.hpp,
|
||||||
..\kernel\srs_kernel_error.cpp,
|
..\kernel\srs_kernel_error.cpp,
|
||||||
..\kernel\srs_kernel_file.hpp,
|
..\kernel\srs_kernel_file.hpp,
|
||||||
..\kernel\srs_kernel_file.cpp,
|
..\kernel\srs_kernel_file.cpp,
|
||||||
..\kernel\srs_kernel_flv.hpp,
|
..\kernel\srs_kernel_flv.hpp,
|
||||||
..\kernel\srs_kernel_flv.cpp,
|
..\kernel\srs_kernel_flv.cpp,
|
||||||
..\kernel\srs_kernel_log.hpp,
|
..\kernel\srs_kernel_log.hpp,
|
||||||
..\kernel\srs_kernel_log.cpp,
|
..\kernel\srs_kernel_log.cpp,
|
||||||
..\kernel\srs_kernel_stream.hpp,
|
..\kernel\srs_kernel_stream.hpp,
|
||||||
..\kernel\srs_kernel_stream.cpp,
|
..\kernel\srs_kernel_stream.cpp,
|
||||||
..\kernel\srs_kernel_utility.hpp,
|
..\kernel\srs_kernel_utility.hpp,
|
||||||
..\kernel\srs_kernel_utility.cpp,
|
..\kernel\srs_kernel_utility.cpp,
|
||||||
rtmp-protocol readonly separator,
|
rtmp-protocol readonly separator,
|
||||||
..\rtmp\srs_protocol_amf0.hpp,
|
..\rtmp\srs_protocol_amf0.hpp,
|
||||||
..\rtmp\srs_protocol_amf0.cpp,
|
..\rtmp\srs_protocol_amf0.cpp,
|
||||||
..\rtmp\srs_protocol_buffer.hpp,
|
..\rtmp\srs_protocol_buffer.hpp,
|
||||||
..\rtmp\srs_protocol_buffer.cpp,
|
..\rtmp\srs_protocol_buffer.cpp,
|
||||||
..\rtmp\srs_protocol_handshake.hpp,
|
..\rtmp\srs_protocol_handshake.hpp,
|
||||||
..\rtmp\srs_protocol_handshake.cpp,
|
..\rtmp\srs_protocol_handshake.cpp,
|
||||||
..\rtmp\srs_protocol_io.hpp,
|
..\rtmp\srs_protocol_io.hpp,
|
||||||
..\rtmp\srs_protocol_io.cpp,
|
..\rtmp\srs_protocol_io.cpp,
|
||||||
..\rtmp\srs_protocol_msg_array.hpp,
|
..\rtmp\srs_protocol_msg_array.hpp,
|
||||||
..\rtmp\srs_protocol_msg_array.cpp,
|
..\rtmp\srs_protocol_msg_array.cpp,
|
||||||
..\rtmp\srs_protocol_rtmp.hpp,
|
..\rtmp\srs_protocol_rtmp.hpp,
|
||||||
..\rtmp\srs_protocol_rtmp.cpp,
|
..\rtmp\srs_protocol_rtmp.cpp,
|
||||||
..\rtmp\srs_protocol_stack.hpp,
|
..\rtmp\srs_protocol_stack.hpp,
|
||||||
..\rtmp\srs_protocol_stack.cpp,
|
..\rtmp\srs_protocol_stack.cpp,
|
||||||
..\rtmp\srs_protocol_utility.hpp,
|
..\rtmp\srs_protocol_utility.hpp,
|
||||||
..\rtmp\srs_protocol_utility.cpp,
|
..\rtmp\srs_protocol_utility.cpp,
|
||||||
app readonly separator,
|
app readonly separator,
|
||||||
..\app\srs_app_avc_aac.hpp,
|
..\app\srs_app_avc_aac.hpp,
|
||||||
..\app\srs_app_avc_aac.cpp,
|
..\app\srs_app_avc_aac.cpp,
|
||||||
..\app\srs_app_bandwidth.hpp,
|
..\app\srs_app_bandwidth.hpp,
|
||||||
..\app\srs_app_bandwidth.cpp,
|
..\app\srs_app_bandwidth.cpp,
|
||||||
..\app\srs_app_conn.hpp,
|
..\app\srs_app_conn.hpp,
|
||||||
..\app\srs_app_conn.cpp,
|
..\app\srs_app_conn.cpp,
|
||||||
..\app\srs_app_config.hpp,
|
..\app\srs_app_config.hpp,
|
||||||
..\app\srs_app_config.cpp,
|
..\app\srs_app_config.cpp,
|
||||||
..\app\srs_app_dvr.hpp,
|
..\app\srs_app_dvr.hpp,
|
||||||
..\app\srs_app_dvr.cpp,
|
..\app\srs_app_dvr.cpp,
|
||||||
..\app\srs_app_edge.hpp,
|
..\app\srs_app_edge.hpp,
|
||||||
..\app\srs_app_edge.cpp,
|
..\app\srs_app_edge.cpp,
|
||||||
..\app\srs_app_empty.hpp,
|
..\app\srs_app_empty.hpp,
|
||||||
..\app\srs_app_empty.cpp,
|
..\app\srs_app_empty.cpp,
|
||||||
..\app\srs_app_encoder.hpp,
|
..\app\srs_app_encoder.hpp,
|
||||||
..\app\srs_app_encoder.cpp,
|
..\app\srs_app_encoder.cpp,
|
||||||
..\app\srs_app_ffmpeg.hpp,
|
..\app\srs_app_ffmpeg.hpp,
|
||||||
..\app\srs_app_ffmpeg.cpp,
|
..\app\srs_app_ffmpeg.cpp,
|
||||||
..\app\srs_app_forward.hpp,
|
..\app\srs_app_forward.hpp,
|
||||||
..\app\srs_app_forward.cpp,
|
..\app\srs_app_forward.cpp,
|
||||||
..\app\srs_app_heartbeat.hpp,
|
..\app\srs_app_heartbeat.hpp,
|
||||||
..\app\srs_app_heartbeat.cpp,
|
..\app\srs_app_heartbeat.cpp,
|
||||||
..\app\srs_app_hls.hpp,
|
..\app\srs_app_hls.hpp,
|
||||||
..\app\srs_app_hls.cpp,
|
..\app\srs_app_hls.cpp,
|
||||||
..\app\srs_app_http.hpp,
|
..\app\srs_app_http.hpp,
|
||||||
..\app\srs_app_http.cpp,
|
..\app\srs_app_http.cpp,
|
||||||
..\app\srs_app_http_api.hpp,
|
..\app\srs_app_http_api.hpp,
|
||||||
..\app\srs_app_http_api.cpp,
|
..\app\srs_app_http_api.cpp,
|
||||||
..\app\srs_app_http_client.hpp,
|
..\app\srs_app_http_client.hpp,
|
||||||
..\app\srs_app_http_client.cpp,
|
..\app\srs_app_http_client.cpp,
|
||||||
..\app\srs_app_http_conn.hpp,
|
..\app\srs_app_http_conn.hpp,
|
||||||
..\app\srs_app_http_conn.cpp,
|
..\app\srs_app_http_conn.cpp,
|
||||||
..\app\srs_app_http_hooks.hpp,
|
..\app\srs_app_http_hooks.hpp,
|
||||||
..\app\srs_app_http_hooks.cpp,
|
..\app\srs_app_http_hooks.cpp,
|
||||||
..\app\srs_app_ingest.hpp,
|
..\app\srs_app_ingest.hpp,
|
||||||
..\app\srs_app_ingest.cpp,
|
..\app\srs_app_ingest.cpp,
|
||||||
..\app\srs_app_json.hpp,
|
..\app\srs_app_json.hpp,
|
||||||
..\app\srs_app_json.cpp,
|
..\app\srs_app_json.cpp,
|
||||||
..\app\srs_app_kbps.hpp,
|
..\app\srs_app_kbps.hpp,
|
||||||
..\app\srs_app_kbps.cpp,
|
..\app\srs_app_kbps.cpp,
|
||||||
..\app\srs_app_log.hpp,
|
..\app\srs_app_log.hpp,
|
||||||
..\app\srs_app_log.cpp,
|
..\app\srs_app_log.cpp,
|
||||||
..\app\srs_app_recv_thread.hpp,
|
..\app\srs_app_recv_thread.hpp,
|
||||||
..\app\srs_app_recv_thread.cpp,
|
..\app\srs_app_recv_thread.cpp,
|
||||||
..\app\srs_app_refer.hpp,
|
..\app\srs_app_refer.hpp,
|
||||||
..\app\srs_app_refer.cpp,
|
..\app\srs_app_refer.cpp,
|
||||||
..\app\srs_app_reload.hpp,
|
..\app\srs_app_reload.hpp,
|
||||||
..\app\srs_app_reload.cpp,
|
..\app\srs_app_reload.cpp,
|
||||||
..\app\srs_app_rtmp_conn.hpp,
|
..\app\srs_app_rtmp_conn.hpp,
|
||||||
..\app\srs_app_rtmp_conn.cpp,
|
..\app\srs_app_rtmp_conn.cpp,
|
||||||
..\app\srs_app_pithy_print.hpp,
|
..\app\srs_app_pithy_print.hpp,
|
||||||
..\app\srs_app_pithy_print.cpp,
|
..\app\srs_app_pithy_print.cpp,
|
||||||
..\app\srs_app_security.hpp,
|
..\app\srs_app_security.hpp,
|
||||||
..\app\srs_app_security.cpp,
|
..\app\srs_app_security.cpp,
|
||||||
..\app\srs_app_server.hpp,
|
..\app\srs_app_server.hpp,
|
||||||
..\app\srs_app_server.cpp,
|
..\app\srs_app_server.cpp,
|
||||||
..\app\srs_app_st.hpp,
|
..\app\srs_app_st.hpp,
|
||||||
..\app\srs_app_st.cpp,
|
..\app\srs_app_st.cpp,
|
||||||
..\app\srs_app_st_socket.hpp,
|
..\app\srs_app_st_socket.hpp,
|
||||||
..\app\srs_app_st_socket.cpp,
|
..\app\srs_app_st_socket.cpp,
|
||||||
..\app\srs_app_source.hpp,
|
..\app\srs_app_statistic.hpp,
|
||||||
..\app\srs_app_source.cpp,
|
..\app\srs_app_statistic.cpp,
|
||||||
..\app\srs_app_thread.hpp,
|
..\app\srs_app_source.hpp,
|
||||||
..\app\srs_app_thread.cpp,
|
..\app\srs_app_source.cpp,
|
||||||
..\app\srs_app_utility.hpp,
|
..\app\srs_app_thread.hpp,
|
||||||
..\app\srs_app_utility.cpp,
|
..\app\srs_app_thread.cpp,
|
||||||
utest readonly separator,
|
..\app\srs_app_utility.hpp,
|
||||||
..\utest\srs_utest.hpp,
|
..\app\srs_app_utility.cpp,
|
||||||
..\utest\srs_utest.cpp,
|
utest readonly separator,
|
||||||
..\utest\srs_utest_amf0.hpp,
|
..\utest\srs_utest.hpp,
|
||||||
..\utest\srs_utest_amf0.cpp,
|
..\utest\srs_utest.cpp,
|
||||||
..\utest\srs_utest_config.hpp,
|
..\utest\srs_utest_amf0.hpp,
|
||||||
..\utest\srs_utest_config.cpp,
|
..\utest\srs_utest_amf0.cpp,
|
||||||
..\utest\srs_utest_core.hpp,
|
..\utest\srs_utest_config.hpp,
|
||||||
..\utest\srs_utest_core.cpp,
|
..\utest\srs_utest_config.cpp,
|
||||||
..\utest\srs_utest_kernel.hpp,
|
..\utest\srs_utest_core.hpp,
|
||||||
..\utest\srs_utest_kernel.cpp,
|
..\utest\srs_utest_core.cpp,
|
||||||
..\utest\srs_utest_protocol.hpp,
|
..\utest\srs_utest_kernel.hpp,
|
||||||
..\utest\srs_utest_protocol.cpp,
|
..\utest\srs_utest_kernel.cpp,
|
||||||
..\utest\srs_utest_reload.hpp,
|
..\utest\srs_utest_protocol.hpp,
|
||||||
..\utest\srs_utest_reload.cpp,
|
..\utest\srs_utest_protocol.cpp,
|
||||||
research readonly separator,
|
..\utest\srs_utest_reload.hpp,
|
||||||
..\..\research\librtmp\srs_aac_raw_publish.c,
|
..\utest\srs_utest_reload.cpp,
|
||||||
..\..\research\librtmp\srs_audio_raw_publish.c,
|
research readonly separator,
|
||||||
..\..\research\librtmp\srs_bandwidth_check.c,
|
..\..\research\librtmp\srs_aac_raw_publish.c,
|
||||||
..\..\research\librtmp\srs_detect_rtmp.c,
|
..\..\research\librtmp\srs_audio_raw_publish.c,
|
||||||
..\..\research\librtmp\srs_flv_injecter.c,
|
..\..\research\librtmp\srs_bandwidth_check.c,
|
||||||
..\..\research\librtmp\srs_flv_parser.c,
|
..\..\research\librtmp\srs_detect_rtmp.c,
|
||||||
..\..\research\librtmp\srs_h264_raw_publish.c,
|
..\..\research\librtmp\srs_flv_injecter.c,
|
||||||
..\..\research\librtmp\srs_ingest_flv.c,
|
..\..\research\librtmp\srs_flv_parser.c,
|
||||||
..\..\research\librtmp\srs_ingest_rtmp.c,
|
..\..\research\librtmp\srs_h264_raw_publish.c,
|
||||||
..\..\research\librtmp\srs_play.c,
|
..\..\research\librtmp\srs_ingest_flv.c,
|
||||||
..\..\research\librtmp\srs_publish.c,
|
..\..\research\librtmp\srs_ingest_rtmp.c,
|
||||||
..\..\research\librtmp\srs_rtmp_dump.c,
|
..\..\research\librtmp\srs_play.c,
|
||||||
..\..\research\hls\ts_info.cc;
|
..\..\research\librtmp\srs_publish.c,
|
||||||
|
..\..\research\librtmp\srs_rtmp_dump.c,
|
||||||
|
..\..\research\hls\ts_info.cc;
|
||||||
|
|
||||||
mainconfig
|
mainconfig
|
||||||
"" = "MAIN";
|
"" = "MAIN";
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue