1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-02-15 04:42:04 +00:00
srs/trunk/src/app/srs_app_config.hpp

1077 lines
48 KiB
C++
Raw Normal View History

2017-03-25 09:21:39 +00:00
/**
* The MIT License (MIT)
*
2019-12-30 02:10:35 +00:00
* Copyright (c) 2013-2020 Winlin
2017-03-25 09:21:39 +00:00
*
* 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_CONFIG_HPP
#define SRS_APP_CONFIG_HPP
#include <srs_core.hpp>
#include <vector>
#include <string>
2015-09-17 05:36:02 +00:00
#include <map>
#include <sstream>
2020-01-01 05:41:19 +00:00
#include <algorithm>
#include <srs_app_reload.hpp>
2015-09-17 05:36:02 +00:00
#include <srs_app_async_call.hpp>
#include <srs_app_thread.hpp>
class SrsRequest;
class SrsFileWriter;
2015-09-19 04:27:31 +00:00
class SrsJsonObject;
class SrsJsonArray;
class SrsJsonAny;
2015-09-17 05:36:02 +00:00
class SrsConfig;
class SrsRequest;
class SrsJsonArray;
class SrsConfDirective;
2020-01-01 05:41:19 +00:00
/**
* whether the two vector actual equals, for instance,
* srs_vector_actual_equals([0, 1, 2], [0, 1, 2]) ==== true
* srs_vector_actual_equals([0, 1, 2], [2, 1, 0]) ==== true
* srs_vector_actual_equals([0, 1, 2], [0, 2, 1]) ==== true
* srs_vector_actual_equals([0, 1, 2], [0, 1, 2, 3]) ==== false
* srs_vector_actual_equals([1, 2, 3], [0, 1, 2]) ==== false
*/
template<typename T>
bool srs_vector_actual_equals(const std::vector<T>& a, const std::vector<T>& b)
{
// all elements of a in b.
for (int i = 0; i < (int)a.size(); i++) {
const T& e = a.at(i);
if (std::find(b.begin(), b.end(), e) == b.end()) {
return false;
}
}
// all elements of b in a.
for (int i = 0; i < (int)b.size(); i++) {
const T& e = b.at(i);
if (std::find(a.begin(), a.end(), e) == a.end()) {
return false;
}
}
return true;
}
2015-09-17 05:36:02 +00:00
namespace _srs_internal
{
2019-04-28 01:08:05 +00:00
// The buffer of config content.
2015-09-17 05:36:02 +00:00
class SrsConfigBuffer
{
protected:
2019-04-28 01:08:05 +00:00
// The last available position.
2015-09-17 05:36:02 +00:00
char* last;
2019-04-28 01:08:05 +00:00
// The end of buffer.
2015-09-17 05:36:02 +00:00
char* end;
2019-04-28 01:08:05 +00:00
// The start of buffer.
2015-09-17 05:36:02 +00:00
char* start;
public:
2019-04-28 01:08:05 +00:00
// Current consumed position.
2015-09-17 05:36:02 +00:00
char* pos;
2019-04-28 01:08:05 +00:00
// Current parsed line.
2015-09-17 05:36:02 +00:00
int line;
public:
SrsConfigBuffer();
virtual ~SrsConfigBuffer();
public:
2019-04-28 01:08:05 +00:00
// Fullfill the buffer with content of file specified by filename.
virtual srs_error_t fullfill(const char* filename);
2019-04-28 01:08:05 +00:00
// Whether buffer is empty.
2015-09-17 05:36:02 +00:00
virtual bool empty();
};
};
2019-04-28 01:08:05 +00:00
// Deep compare directive.
2015-09-17 05:36:02 +00:00
extern bool srs_directive_equals(SrsConfDirective* a, SrsConfDirective* b);
extern bool srs_directive_equals(SrsConfDirective* a, SrsConfDirective* b, std::string except);
2019-04-28 01:08:05 +00:00
// The helper utilities, used for compare the consts values.
2015-09-17 05:36:02 +00:00
extern bool srs_config_hls_is_on_error_ignore(std::string strategy);
extern bool srs_config_hls_is_on_error_continue(std::string strategy);
extern bool srs_config_ingest_is_file(std::string type);
extern bool srs_config_ingest_is_stream(std::string type);
extern bool srs_config_dvr_is_plan_segment(std::string plan);
extern bool srs_config_dvr_is_plan_session(std::string plan);
extern bool srs_stream_caster_is_udp(std::string caster);
extern bool srs_stream_caster_is_rtsp(std::string caster);
extern bool srs_stream_caster_is_flv(std::string caster);
extern bool srs_stream_caster_is_gb28181(std::string caster);
2019-04-28 01:08:05 +00:00
// Whether the dvr_apply active the stream specified by req.
2015-09-17 05:36:02 +00:00
extern bool srs_config_apply_filter(SrsConfDirective* dvr_apply, SrsRequest* req);
2019-04-28 01:08:05 +00:00
// Convert bool in str to on/off
extern std::string srs_config_bool2switch(std::string sbool);
2015-09-17 05:36:02 +00:00
2019-04-28 01:08:05 +00:00
// Parse loaded vhost directives to compatible mode.
// For exmaple, SRS1/2 use the follow refer style:
// refer a.domain.com b.domain.com;
// while SRS3 use the following:
// refer {
// enabled on;
// all a.domain.com b.domain.com;
// }
// so we must transform the vhost directive anytime load the config.
// @param root the root directive to transform, in and out parameter.
extern srs_error_t srs_config_transform_vhost(SrsConfDirective* root);
2015-09-17 05:36:02 +00:00
2016-12-08 09:26:04 +00:00
// @global config object.
2015-09-17 05:36:02 +00:00
extern SrsConfig* _srs_config;
2019-04-28 01:08:05 +00:00
// The config directive.
// The config file is a group of directives,
// all directive has name, args and child-directives.
// For example, the following config text:
// vhost vhost.ossrs.net {
// enabled on;
// ingest livestream {
// enabled on;
// ffmpeg /bin/ffmpeg;
// }
// }
// will be parsed to:
// SrsConfDirective: name="vhost", arg0="vhost.ossrs.net", child-directives=[
// SrsConfDirective: name="enabled", arg0="on", child-directives=[]
// SrsConfDirective: name="ingest", arg0="livestream", child-directives=[
// SrsConfDirective: name="enabled", arg0="on", child-directives=[]
// SrsConfDirective: name="ffmpeg", arg0="/bin/ffmpeg", child-directives=[]
// ]
// ]
// @remark, allow empty directive, for example: "dir0 {}"
// @remark, don't allow empty name, for example: ";" or "{dir0 arg0;}
class SrsConfDirective
{
public:
2019-04-28 01:08:05 +00:00
// The line of config file in which the directive from
2014-03-18 03:32:58 +00:00
int conf_line;
2019-04-28 01:08:05 +00:00
// The name of directive, for example, the following config text:
// enabled on;
// will be parsed to a directive, its name is "enalbed"
2014-03-18 03:32:58 +00:00
std::string name;
2019-04-28 01:08:05 +00:00
// The args of directive, for example, the following config text:
// listen 1935 1936;
// will be parsed to a directive, its args is ["1935", "1936"].
2014-03-18 03:32:58 +00:00
std::vector<std::string> args;
2019-04-28 01:08:05 +00:00
// The child directives, for example, the following config text:
// vhost vhost.ossrs.net {
// enabled on;
// }
// will be parsed to a directive, its directives is a vector contains
// a directive, which is:
// name:"enalbed", args:["on"], directives:[]
//
// @remark, the directives can contains directives.
2014-03-18 03:32:58 +00:00
std::vector<SrsConfDirective*> directives;
public:
2014-03-18 03:32:58 +00:00
SrsConfDirective();
virtual ~SrsConfDirective();
2015-09-17 05:36:02 +00:00
public:
2019-04-28 01:08:05 +00:00
// Deep copy the directive, for SrsConfig to use it to support reload in upyun cluster,
// For when reload the upyun dynamic config, the root will be changed,
// so need to copy it to an old root directive, and use the copy result to do reload.
2015-09-17 05:36:02 +00:00
virtual SrsConfDirective* copy();
// @param except the name of sub directive.
virtual SrsConfDirective* copy(std::string except);
// args
public:
2019-04-28 01:08:05 +00:00
// Get the args0,1,2, if user want to get more args,
// directly use the args.at(index).
virtual std::string arg0();
2014-07-17 03:05:09 +00:00
virtual std::string arg1();
virtual std::string arg2();
2015-09-17 06:03:25 +00:00
virtual std::string arg3();
// directives
2014-07-17 03:05:09 +00:00
public:
2019-04-28 01:08:05 +00:00
// Get the directive by index.
// @remark, assert the index<directives.size().
virtual SrsConfDirective* at(int index);
2019-04-28 01:08:05 +00:00
// Get the directive by name, return the first match.
virtual SrsConfDirective* get(std::string _name);
2019-04-28 01:08:05 +00:00
// Get the directive by name and its arg0, return the first match.
virtual SrsConfDirective* get(std::string _name, std::string _arg0);
2019-04-28 01:08:05 +00:00
// RAW
public:
virtual SrsConfDirective* get_or_create(std::string n);
virtual SrsConfDirective* get_or_create(std::string n, std::string a0);
virtual SrsConfDirective* get_or_create(std::string n, std::string a0, std::string a1);
virtual SrsConfDirective* set_arg0(std::string a0);
2019-04-28 01:08:05 +00:00
// Remove the v from sub directives, user must free the v.
virtual void remove(SrsConfDirective* v);
// help utilities
public:
2019-04-28 01:08:05 +00:00
// Whether current directive is vhost.
2014-04-04 10:55:21 +00:00
virtual bool is_vhost();
2019-04-28 01:08:05 +00:00
// Whether current directive is stream_caster.
virtual bool is_stream_caster();
2019-04-28 01:08:05 +00:00
// Parse utilities
2014-07-17 03:05:09 +00:00
public:
2019-04-28 01:08:05 +00:00
// Parse config directive from file buffer.
virtual srs_error_t parse(_srs_internal::SrsConfigBuffer* buffer);
2019-04-28 01:08:05 +00:00
// Marshal the directive to writer.
// @param level, the root is level0, all its directives are level1, and so on.
virtual srs_error_t persistence(SrsFileWriter* writer, int level);
2019-04-28 01:08:05 +00:00
// Dumps the args[0-N] to array(string).
2015-09-19 04:27:31 +00:00
virtual SrsJsonArray* dumps_args();
2019-04-28 01:08:05 +00:00
// Dumps arg0 to str, number or boolean.
2015-09-19 04:27:31 +00:00
virtual SrsJsonAny* dumps_arg0_to_str();
virtual SrsJsonAny* dumps_arg0_to_integer();
2015-09-19 04:27:31 +00:00
virtual SrsJsonAny* dumps_arg0_to_number();
virtual SrsJsonAny* dumps_arg0_to_boolean();
// private parse.
2014-07-17 03:05:09 +00:00
private:
2019-04-28 01:08:05 +00:00
// The directive parsing type.
2014-07-17 03:05:09 +00:00
enum SrsDirectiveType {
2019-04-28 01:08:05 +00:00
// The root directives, parsing file.
2017-03-25 09:21:39 +00:00
parse_file,
2019-04-28 01:08:05 +00:00
// For each direcitve, parsing text block.
2014-07-17 03:05:09 +00:00
parse_block
};
2019-04-28 01:08:05 +00:00
// Parse the conf from buffer. the work flow:
// 1. read a token(directive args and a ret flag),
// 2. initialize the directive by args, args[0] is name, args[1-N] is args of directive,
// 3. if ret flag indicates there are child-directives, read_conf(directive, block) recursively.
virtual srs_error_t parse_conf(_srs_internal::SrsConfigBuffer* buffer, SrsDirectiveType type);
2019-04-28 01:08:05 +00:00
// Read a token from buffer.
// A token, is the directive args and a flag indicates whether has child-directives.
// @param args, the output directive args, the first is the directive name, left is the args.
// @param line_start, the actual start line of directive.
// @return, an error code indicates error or has child-directives.
virtual srs_error_t read_token(_srs_internal::SrsConfigBuffer* buffer, std::vector<std::string>& args, int& line_start);
};
2019-04-28 01:08:05 +00:00
// The config service provider.
// For the config supports reload, so never keep the reference cross st-thread,
// that is, never save the SrsConfDirective* get by any api of config,
// For it maybe free in the reload st-thread cycle.
// You could keep it before st-thread switch, or simply never keep it.
class SrsConfig
{
// user command
private:
2019-04-28 01:08:05 +00:00
// Whether srs is run in dolphin mode.
// @see https://github.com/ossrs/srs-dolphin
2015-05-28 06:59:12 +00:00
bool dolphin;
std::string dolphin_rtmp_port;
std::string dolphin_http_port;
2019-04-28 01:08:05 +00:00
// Whether show help and exit.
2014-03-18 03:32:58 +00:00
bool show_help;
2019-04-28 01:08:05 +00:00
// Whether test config file and exit.
bool test_conf;
2019-04-28 01:08:05 +00:00
// Whether show SRS version and exit.
2014-03-18 03:32:58 +00:00
bool show_version;
2019-04-28 01:08:05 +00:00
// Whether show SRS signature and exit.
2016-01-04 09:28:18 +00:00
bool show_signature;
// global env variables.
2014-07-17 03:53:51 +00:00
private:
2019-04-28 01:08:05 +00:00
// The user parameters, the argc and argv.
// The argv is " ".join(argv), where argv is from main(argc, argv).
2014-04-19 13:23:34 +00:00
std::string _argv;
2019-04-28 01:08:05 +00:00
// current working directory.
2014-04-19 13:23:34 +00:00
std::string _cwd;
2019-04-28 01:08:05 +00:00
// Config section
2014-07-17 03:53:51 +00:00
private:
2019-04-28 01:08:05 +00:00
// The last parsed config file.
// If reload, reload the config file.
2014-07-17 03:53:51 +00:00
std::string config_file;
2016-09-15 06:47:42 +00:00
protected:
2019-04-28 01:08:05 +00:00
// The directive root.
2014-03-18 03:32:58 +00:00
SrsConfDirective* root;
2019-04-28 01:08:05 +00:00
// Reload section
2014-07-17 03:53:51 +00:00
private:
2019-04-28 01:08:05 +00:00
// The reload subscribers, when reload, callback all handlers.
2014-03-18 03:32:58 +00:00
std::vector<ISrsReloadHandler*> subscribes;
public:
2014-03-18 03:32:58 +00:00
SrsConfig();
virtual ~SrsConfig();
2017-03-25 09:21:39 +00:00
// dolphin
2015-05-28 06:59:12 +00:00
public:
2019-04-28 01:08:05 +00:00
// Whether srs is in dolphin mode.
2015-05-28 06:59:12 +00:00
virtual bool is_dolphin();
2020-01-01 06:12:36 +00:00
// Reload
public:
2019-04-28 01:08:05 +00:00
// For reload handler to register itself,
// when config service do the reload, callback the handler.
2014-03-18 03:32:58 +00:00
virtual void subscribe(ISrsReloadHandler* handler);
2019-04-28 01:08:05 +00:00
// For reload handler to unregister itself.
2014-03-18 03:32:58 +00:00
virtual void unsubscribe(ISrsReloadHandler* handler);
2019-04-28 01:08:05 +00:00
// Reload the config file.
// @remark, user can test the config before reload it.
virtual srs_error_t reload();
private:
2019-04-28 01:08:05 +00:00
// Reload the vhost section of config.
2017-09-22 08:14:30 +00:00
virtual srs_error_t reload_vhost(SrsConfDirective* old_root);
protected:
2019-04-28 01:08:05 +00:00
// Reload from the config.
// @remark, use protected for the utest to override with mock.
virtual srs_error_t reload_conf(SrsConfig* conf);
2014-04-10 06:05:01 +00:00
private:
2019-04-28 01:08:05 +00:00
// Reload the http_api section of config.
2017-07-29 13:39:57 +00:00
virtual srs_error_t reload_http_api(SrsConfDirective* old_root);
2019-04-28 01:08:05 +00:00
// Reload the http_stream section of config.
// TODO: FIXME: rename to http_server.
2017-07-29 13:39:57 +00:00
virtual srs_error_t reload_http_stream(SrsConfDirective* old_root);
// Reload the rtc_server section of config.
virtual srs_error_t reload_rtc_server(SrsConfDirective* old_root);
2019-04-28 01:08:05 +00:00
// Reload the transcode section of vhost of config.
2017-09-22 08:14:30 +00:00
virtual srs_error_t reload_transcode(SrsConfDirective* new_vhost, SrsConfDirective* old_vhost);
2019-04-28 01:08:05 +00:00
// Reload the ingest section of vhost of config.
2017-09-22 08:14:30 +00:00
virtual srs_error_t reload_ingest(SrsConfDirective* new_vhost, SrsConfDirective* old_vhost);
2019-04-28 01:08:05 +00:00
// Parse options and file
public:
2019-04-28 01:08:05 +00:00
// Parse the cli, the main(argc,argv) function.
virtual srs_error_t parse_options(int argc, char** argv);
2019-04-28 01:08:05 +00:00
// initialize the cwd for server,
// because we may change the workdir.
virtual srs_error_t initialize_cwd();
2019-04-28 01:08:05 +00:00
// Marshal current config to file.
virtual srs_error_t persistence();
private:
virtual srs_error_t do_persistence(SrsFileWriter* fw);
public:
2019-04-28 01:08:05 +00:00
// Dumps the global sections to json.
2018-01-01 11:39:57 +00:00
virtual srs_error_t global_to_json(SrsJsonObject* obj);
2019-04-28 01:08:05 +00:00
// Dumps the minimal sections to json.
2018-01-01 11:39:57 +00:00
virtual srs_error_t minimal_to_json(SrsJsonObject* obj);
2019-04-28 01:08:05 +00:00
// Dumps the vhost section to json.
2018-01-01 11:39:57 +00:00
virtual srs_error_t vhost_to_json(SrsConfDirective* vhost, SrsJsonObject* obj);
2019-04-28 01:08:05 +00:00
// Dumps the http_api sections to json for raw api info.
2018-01-01 11:39:57 +00:00
virtual srs_error_t raw_to_json(SrsJsonObject* obj);
2019-04-28 01:08:05 +00:00
// RAW set the global listen.
2018-01-01 11:39:57 +00:00
virtual srs_error_t raw_set_listen(const std::vector<std::string>& eps, bool& applied);
2019-04-28 01:08:05 +00:00
// RAW set the global pid.
2018-01-01 11:39:57 +00:00
virtual srs_error_t raw_set_pid(std::string pid, bool& applied);
2019-04-28 01:08:05 +00:00
// RAW set the global chunk size.
2018-01-01 11:39:57 +00:00
virtual srs_error_t raw_set_chunk_size(std::string chunk_size, bool& applied);
2019-04-28 01:08:05 +00:00
// RAW set the global ffmpeg log dir.
2018-01-01 11:39:57 +00:00
virtual srs_error_t raw_set_ff_log_dir(std::string ff_log_dir, bool& applied);
2019-04-28 01:08:05 +00:00
// RAW set the global log tank.
2018-01-01 11:39:57 +00:00
virtual srs_error_t raw_set_srs_log_tank(std::string srs_log_tank, bool& applied);
2019-04-28 01:08:05 +00:00
// RAW set the global log level.
2018-01-01 11:39:57 +00:00
virtual srs_error_t raw_set_srs_log_level(std::string srs_log_level, bool& applied);
2019-04-28 01:08:05 +00:00
// RAW set the global log file path for file tank.
2018-01-01 11:39:57 +00:00
virtual srs_error_t raw_set_srs_log_file(std::string srs_log_file, bool& applied);
2019-04-28 01:08:05 +00:00
// RAW set the global max connections of srs.
2018-01-01 11:39:57 +00:00
virtual srs_error_t raw_set_max_connections(std::string max_connections, bool& applied);
2019-04-28 01:08:05 +00:00
// RAW set the global whether use utc time.
virtual srs_error_t raw_set_utc_time(std::string utc_time, bool& applied);
2019-04-28 01:08:05 +00:00
// RAW set the global pithy print interval in ms.
2018-01-01 11:39:57 +00:00
virtual srs_error_t raw_set_pithy_print_ms(std::string pithy_print_ms, bool& applied);
2019-04-28 01:08:05 +00:00
// RAW create the new vhost.
2018-01-01 11:39:57 +00:00
virtual srs_error_t raw_create_vhost(std::string vhost, bool& applied);
2019-04-28 01:08:05 +00:00
// RAW update the disabled vhost name.
2018-01-01 11:39:57 +00:00
virtual srs_error_t raw_update_vhost(std::string vhost, std::string name, bool& applied);
2019-04-28 01:08:05 +00:00
// RAW delete the disabled vhost.
2018-01-01 11:39:57 +00:00
virtual srs_error_t raw_delete_vhost(std::string vhost, bool& applied);
2019-04-28 01:08:05 +00:00
// RAW disable the enabled vhost.
2018-01-01 11:39:57 +00:00
virtual srs_error_t raw_disable_vhost(std::string vhost, bool& applied);
2019-04-28 01:08:05 +00:00
// RAW enable the disabled vhost.
2018-01-01 11:39:57 +00:00
virtual srs_error_t raw_enable_vhost(std::string vhost, bool& applied);
2019-04-28 01:08:05 +00:00
// RAW enable the dvr of stream of vhost.
2018-01-01 11:39:57 +00:00
virtual srs_error_t raw_enable_dvr(std::string vhost, std::string stream, bool& applied);
2019-04-28 01:08:05 +00:00
// RAW disable the dvr of stream of vhost.
2018-01-01 11:39:57 +00:00
virtual srs_error_t raw_disable_dvr(std::string vhost, std::string stream, bool& applied);
private:
2017-09-22 08:14:30 +00:00
virtual srs_error_t do_reload_listen();
virtual srs_error_t do_reload_pid();
virtual srs_error_t do_reload_srs_log_tank();
virtual srs_error_t do_reload_srs_log_level();
virtual srs_error_t do_reload_srs_log_file();
virtual srs_error_t do_reload_max_connections();
virtual srs_error_t do_reload_utc_time();
2017-09-22 08:14:30 +00:00
virtual srs_error_t do_reload_pithy_print_ms();
virtual srs_error_t do_reload_vhost_added(std::string vhost);
virtual srs_error_t do_reload_vhost_removed(std::string vhost);
virtual srs_error_t do_reload_vhost_dvr_apply(std::string vhost);
public:
2019-04-28 01:08:05 +00:00
// Get the config file path.
virtual std::string config();
private:
2019-04-28 01:08:05 +00:00
// Parse each argv.
virtual srs_error_t parse_argv(int& i, char** argv);
2019-04-28 01:08:05 +00:00
// Print help and exit.
2014-03-18 03:32:58 +00:00
virtual void print_help(char** argv);
public:
2019-04-28 01:08:05 +00:00
// Parse the config file, which is specified by cli.
virtual srs_error_t parse_file(const char* filename);
2019-04-28 01:08:05 +00:00
// Check the parsed config.
virtual srs_error_t check_config();
2017-03-26 06:25:08 +00:00
protected:
virtual srs_error_t check_normal_config();
virtual srs_error_t check_number_connections();
2014-07-17 03:34:49 +00:00
protected:
2019-04-28 01:08:05 +00:00
// Parse config from the buffer.
// @param buffer, the config buffer, user must delete it.
// @remark, use protected for the utest to override with mock.
virtual srs_error_t parse_buffer(_srs_internal::SrsConfigBuffer* buffer);
2017-03-25 09:21:39 +00:00
// global env
2014-04-19 13:23:34 +00:00
public:
2019-04-28 01:08:05 +00:00
// Get the current work directory.
2018-01-01 11:39:57 +00:00
virtual std::string cwd();
2019-04-28 01:08:05 +00:00
// Get the cli, the main(argc,argv), program start command.
2018-01-01 11:39:57 +00:00
virtual std::string argv();
// global section
2014-04-04 09:01:34 +00:00
public:
2019-04-28 01:08:05 +00:00
// Get the directive root, corresponding to the config file.
// The root directive, no name and args, contains directives.
// All directive parsed can retrieve from root.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_root();
2019-05-06 23:46:20 +00:00
// Get the daemon config.
// If true, SRS will run in daemon mode, fork and fork to reap the
2019-04-28 01:08:05 +00:00
// grand-child process to init process.
2019-05-06 23:46:20 +00:00
virtual bool get_daemon();
2019-04-28 01:08:05 +00:00
// Get the max connections limit of system.
// If exceed the max connection, SRS will disconnect the connection.
// @remark, linux will limit the connections of each process,
// for example, when you need SRS to service 10000+ connections,
// user must use "ulimit -HSn 10000" and config the max connections
// of SRS.
2018-01-01 11:39:57 +00:00
virtual int get_max_connections();
2019-04-28 01:08:05 +00:00
// Get the listen port of SRS.
// user can specifies multiple listen ports,
// each args of directive is a listen port.
2018-01-01 11:39:57 +00:00
virtual std::vector<std::string> get_listens();
2019-04-28 01:08:05 +00:00
// Get the pid file path.
// The pid file is used to save the pid of SRS,
// use file lock to prevent multiple SRS starting.
// @remark, if user need to run multiple SRS instance,
// for example, to start multiple SRS for multiple CPUs,
// user can use different pid file for each process.
2018-01-01 11:39:57 +00:00
virtual std::string get_pid_file();
2019-04-28 01:08:05 +00:00
// Get pithy print pulse in srs_utime_t,
// For example, all rtmp connections only print one message
// every this interval in ms.
2019-04-09 00:55:54 +00:00
virtual srs_utime_t get_pithy_print();
2019-04-28 01:08:05 +00:00
// Whether use utc-time to format the time.
2018-01-01 11:39:57 +00:00
virtual bool get_utc_time();
2019-04-28 01:08:05 +00:00
// Get the configed work dir.
// ignore if empty string.
2018-01-01 11:39:57 +00:00
virtual std::string get_work_dir();
2019-04-28 01:08:05 +00:00
// Whether use asprocess mode.
2018-01-01 11:39:57 +00:00
virtual bool get_asprocess();
// Whether empty client IP is ok.
virtual bool empty_ip_ok();
// Get the start wait in ms for gracefully quit.
virtual srs_utime_t get_grace_start_wait();
// Get the final wait in ms for gracefully quit.
virtual srs_utime_t get_grace_final_wait();
// Whether force to gracefully quit, never fast quit.
virtual bool is_force_grace_quit();
// Whether disable daemon for docker.
virtual bool disable_daemon_for_docker();
// Whether use inotify to auto reload by watching config file changes.
virtual bool inotify_auto_reload();
// Whether enable auto reload config for docker.
virtual bool auto_reload_for_docker();
2020-03-25 09:00:16 +00:00
// For tcmalloc, get the release rate.
virtual double tcmalloc_release_rate();
// stream_caster section
public:
2019-04-28 01:08:05 +00:00
// Get all stream_caster in config file.
2018-01-01 11:39:57 +00:00
virtual std::vector<SrsConfDirective*> get_stream_casters();
2019-04-28 01:08:05 +00:00
// Get whether the specified stream_caster is enabled.
2018-01-01 11:39:57 +00:00
virtual bool get_stream_caster_enabled(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the engine of stream_caster, the caster config.
2018-01-01 11:39:57 +00:00
virtual std::string get_stream_caster_engine(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the output rtmp url of stream_caster, the output config.
2018-01-01 11:39:57 +00:00
virtual std::string get_stream_caster_output(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the listen port of stream caster.
2018-01-01 11:39:57 +00:00
virtual int get_stream_caster_listen(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the min udp port for rtp of stream caster rtsp.
2018-01-01 11:39:57 +00:00
virtual int get_stream_caster_rtp_port_min(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the max udp port for rtp of stream caster rtsp.
2018-01-01 11:39:57 +00:00
virtual int get_stream_caster_rtp_port_max(SrsConfDirective* conf);
2020-03-31 14:30:57 +00:00
virtual srs_utime_t get_stream_caster_gb28181_rtp_idle_timeout(SrsConfDirective* conf);
virtual srs_utime_t get_stream_caster_gb28181_ack_timeout(SrsConfDirective* conf);
virtual srs_utime_t get_stream_caster_gb28181_keepalive_timeout(SrsConfDirective* conf);
virtual bool get_stream_caster_gb28181_audio_enable(SrsConfDirective* conf);
virtual std::string get_stream_caster_gb28181_host(SrsConfDirective* conf);
virtual std::string get_stream_caster_gb28181_serial(SrsConfDirective* conf);
virtual std::string get_stream_caster_gb28181_realm(SrsConfDirective* conf);
virtual bool get_stream_caster_gb28181_wait_keyframe(SrsConfDirective* conf);
virtual bool get_stream_caster_gb28181_sip_enable(SrsConfDirective* conf);
virtual bool get_stream_caster_gb28181_sip_auto_play(SrsConfDirective* conf);
virtual int get_stream_caster_gb28181_sip_listen(SrsConfDirective* conf);
virtual bool get_stream_caster_gb28181_sip_invite_port_fixed(SrsConfDirective* conf);
virtual bool get_stream_caster_gb28181_auto_create_channel(SrsConfDirective* conf);
virtual srs_utime_t get_stream_caster_gb28181_sip_query_catalog_interval(SrsConfDirective* conf);
// rtc section
public:
virtual bool get_rtc_server_enabled();
virtual bool get_rtc_server_enabled(SrsConfDirective* conf);
virtual int get_rtc_server_listen();
virtual std::string get_rtc_server_candidates();
virtual std::string get_rtc_server_ip_family();
2020-04-03 07:03:09 +00:00
virtual bool get_rtc_server_ecdsa();
virtual bool get_rtc_server_encrypt();
virtual int get_rtc_server_reuseport();
2020-04-13 08:50:24 +00:00
virtual bool get_rtc_server_merge_nalus();
virtual bool get_rtc_server_perf_stat();
2020-04-27 01:35:50 +00:00
virtual bool get_rtc_server_black_hole();
virtual std::string get_rtc_server_black_hole_publisher();
2020-04-21 04:18:49 +00:00
private:
virtual int get_rtc_server_reuseport2();
2020-04-15 07:58:17 +00:00
2020-04-14 03:49:59 +00:00
public:
SrsConfDirective* get_rtc(std::string vhost);
bool get_rtc_enabled(std::string vhost);
bool get_rtc_bframe_discard(std::string vhost);
bool get_rtc_aac_discard(std::string vhost);
srs_utime_t get_rtc_stun_timeout(std::string vhost);
bool get_rtc_stun_strict_check(std::string vhost);
2020-05-04 12:42:30 +00:00
bool get_rtc_nack_enabled(std::string vhost);
bool get_rtc_twcc_enabled(std::string vhost);
// vhost specified section
2013-12-14 13:19:47 +00:00
public:
2019-04-28 01:08:05 +00:00
// Get the vhost directive by vhost name.
// @param vhost, the name of vhost to get.
// @param try_default_vhost whether try default when get specified vhost failed.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_vhost(std::string vhost, bool try_default_vhost = true);
2019-04-28 01:08:05 +00:00
// Get all vhosts in config file.
virtual void get_vhosts(std::vector<SrsConfDirective*>& vhosts);
2019-04-28 01:08:05 +00:00
// Whether vhost is enabled
// @param vhost, the vhost name.
// @return true when vhost is ok; otherwise, false.
2018-01-01 11:39:57 +00:00
virtual bool get_vhost_enabled(std::string vhost);
2019-04-28 01:08:05 +00:00
// Whether vhost is enabled
// @param vhost, the vhost directive.
// @return true when vhost is ok; otherwise, false.
2018-01-01 11:39:57 +00:00
virtual bool get_vhost_enabled(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Whether gop_cache is enabled of vhost.
// gop_cache used to cache last gop, for client to fast startup.
// @return true when gop_cache is ok; otherwise, false.
// @remark, default true.
2018-01-01 11:39:57 +00:00
virtual bool get_gop_cache(std::string vhost);
2019-04-28 01:08:05 +00:00
// Whether debug_srs_upnode is enabled of vhost.
// debug_srs_upnode is very important feature for tracable log,
// but some server, for instance, flussonic donot support it.
// @see https://github.com/ossrs/srs/issues/160
// @return true when debug_srs_upnode is ok; otherwise, false.
// @remark, default true.
2018-01-01 11:39:57 +00:00
virtual bool get_debug_srs_upnode(std::string vhost);
2019-04-28 01:08:05 +00:00
// Whether atc is enabled of vhost.
// atc always use encoder timestamp, SRS never adjust the time.
// @return true when atc is ok; otherwise, false.
// @remark, default false.
2018-01-01 11:39:57 +00:00
virtual bool get_atc(std::string vhost);
2019-04-28 01:08:05 +00:00
// Whether atc_auto is enabled of vhost.
// atc_auto used to auto enable atc, when metadata specified the bravo_atc.
// @return true when atc_auto is ok; otherwise, false.
// @remark, default true.
2018-01-01 11:39:57 +00:00
virtual bool get_atc_auto(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the time_jitter algorithm.
// @return the time_jitter algorithm, defined in SrsRtmpJitterAlgorithm.
// @remark, default full.
2018-01-01 11:39:57 +00:00
virtual int get_time_jitter(std::string vhost);
2019-04-28 01:08:05 +00:00
// Whether use mix correct algorithm to ensure the timestamp
// monotonically increase.
2018-01-01 11:39:57 +00:00
virtual bool get_mix_correct(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the cache queue length, in srs_utime_t.
// when exceed the queue length, drop packet util I frame.
// @remark, default 10s.
virtual srs_utime_t get_queue_length(std::string vhost);
2019-04-28 01:08:05 +00:00
// Whether the refer hotlink-denial enabled.
2018-01-01 11:39:57 +00:00
virtual bool get_refer_enabled(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the refer hotlink-denial for all type.
// @return the refer, NULL for not configed.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_refer_all(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the refer hotlink-denial for play.
// @return the refer, NULL for not configed.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_refer_play(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the refer hotlink-denial for publish.
// @return the refer, NULL for not configed.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_refer_publish(std::string vhost);
// Get the input default ack size, which is generally set by message from peer.
2018-01-01 11:39:57 +00:00
virtual int get_in_ack_size(std::string vhost);
// Get the output default ack size, to notify the peer to send acknowledge to server.
2018-01-01 11:39:57 +00:00
virtual int get_out_ack_size(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the chunk size of vhost.
// @param vhost, the vhost to get the chunk size. use global if not specified.
// empty string to get the global.
// @remark, default 60000.
2018-01-01 11:39:57 +00:00
virtual int get_chunk_size(std::string vhost);
2019-04-28 01:08:05 +00:00
// Whether parse the sps when publish stream to SRS.
2018-01-01 11:39:57 +00:00
virtual bool get_parse_sps(std::string vhost);
2019-04-28 01:08:05 +00:00
// Whether mr is enabled for vhost.
// @param vhost, the vhost to get the mr.
2018-01-01 11:39:57 +00:00
virtual bool get_mr_enabled(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the mr sleep time in srs_utime_t for vhost.
// @param vhost, the vhost to get the mr sleep time.
// TODO: FIXME: add utest for mr config.
2019-04-09 01:20:44 +00:00
virtual srs_utime_t get_mr_sleep(std::string vhost);
// Get the mw_latency, mw sleep time in srs_utime_t for vhost.
2019-04-28 01:08:05 +00:00
// @param vhost, the vhost to get the mw sleep time.
// TODO: FIXME: add utest for mw config.
virtual srs_utime_t get_mw_sleep(std::string vhost, bool is_rtc = false);
// Get the mw_msgs, mw wait time in packets for vhost.
// @param vhost, the vhost to get the mw sleep msgs.
// TODO: FIXME: add utest for mw config.
virtual int get_mw_msgs(std::string vhost, bool is_realtime, bool is_rtc = false);
2019-04-28 01:08:05 +00:00
// Whether min latency mode enabled.
// @param vhost, the vhost to get the min_latency.
// TODO: FIXME: add utest for min_latency.
virtual bool get_realtime_enabled(std::string vhost, bool is_rtc = false);
2019-04-28 01:08:05 +00:00
// Whether enable tcp nodelay for all clients of vhost.
2018-01-01 11:39:57 +00:00
virtual bool get_tcp_nodelay(std::string vhost);
2019-04-28 01:08:05 +00:00
// The minimal send interval in srs_utime_t.
virtual srs_utime_t get_send_min_interval(std::string vhost);
2019-04-28 01:08:05 +00:00
// Whether reduce the sequence header.
2018-01-01 11:39:57 +00:00
virtual bool get_reduce_sequence_header(std::string vhost);
2019-04-28 01:08:05 +00:00
// The 1st packet timeout in srs_utime_t for encoder.
virtual srs_utime_t get_publish_1stpkt_timeout(std::string vhost);
2019-04-28 01:08:05 +00:00
// The normal packet timeout in srs_utime_t for encoder.
virtual srs_utime_t get_publish_normal_timeout(std::string vhost);
private:
2019-04-28 01:08:05 +00:00
// Get the global chunk size.
2018-01-01 11:39:57 +00:00
virtual int get_global_chunk_size();
2017-03-25 09:21:39 +00:00
// forward section
2014-07-18 02:50:02 +00:00
public:
2019-04-28 01:08:05 +00:00
// Whether the forwarder enabled.
2018-01-01 11:39:57 +00:00
virtual bool get_forward_enabled(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the forward directive of vhost.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_forwards(std::string vhost);
2020-01-11 15:05:10 +00:00
public:
// Whether the srt sevice enabled
virtual bool get_srt_enabled();
// Get the srt service listen port
virtual unsigned short get_srt_listen_port();
// Get the srt SRTO_MAXBW, max bandwith, default is -1.
virtual int get_srto_maxbw();
// Get the srt SRTO_MSS, Maximum Segment Size, default is 1500.
virtual int get_srto_mss();
// Get the srt SRTO_LATENCY, latency, default is 0 which means peer/recv latency is 120ms.
virtual int get_srto_latency();
// Get the srt SRTO_RCVLATENCY, recv latency, default is 120ms.
virtual int get_srto_recv_latency();
// Get the srt SRTO_PEERLATENCY, peer latency, default is 0..
virtual int get_srto_peer_latency();
2020-03-07 08:15:36 +00:00
// Get the srt h264 sei filter, default is on, it will drop h264 sei packet.
virtual bool get_srt_sei_filter();
// Get the srt SRTO_TLPKDROP, Too-late Packet Drop, default is true.
virtual bool get_srto_tlpkdrop();
// Get the srt SRTO_CONNTIMEO, connection timeout, default is 3000ms.
virtual int get_srto_conntimeout();
// Get the srt SRTO_SNDBUF, send buffer, default is 8192 × (1500-28).
virtual int get_srto_sendbuf();
// Get the srt SRTO_RCVBUF, recv buffer, default is 8192 × (1500-28).
virtual int get_srto_recvbuf();
// SRTO_PAYLOADSIZE
virtual int get_srto_payloadsize();
// Get the default app.
virtual std::string get_default_app_name();
// Get the mix_correct
virtual bool get_srt_mix_correct();
2020-01-11 15:05:10 +00:00
// http_hooks section
private:
2019-04-28 01:08:05 +00:00
// Get the http_hooks directive of vhost.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_vhost_http_hooks(std::string vhost);
2014-07-18 02:50:02 +00:00
public:
2019-04-28 01:08:05 +00:00
// Whether vhost http-hooks enabled.
// @remark, if not enabled, donot callback all http hooks.
2018-01-01 11:39:57 +00:00
virtual bool get_vhost_http_hooks_enabled(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the on_connect callbacks of vhost.
// @return the on_connect callback directive, the args is the url to callback.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_vhost_on_connect(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the on_close callbacks of vhost.
// @return the on_close callback directive, the args is the url to callback.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_vhost_on_close(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the on_publish callbacks of vhost.
// @return the on_publish callback directive, the args is the url to callback.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_vhost_on_publish(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the on_unpublish callbacks of vhost.
// @return the on_unpublish callback directive, the args is the url to callback.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_vhost_on_unpublish(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the on_play callbacks of vhost.
// @return the on_play callback directive, the args is the url to callback.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_vhost_on_play(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the on_stop callbacks of vhost.
// @return the on_stop callback directive, the args is the url to callback.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_vhost_on_stop(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the on_dvr callbacks of vhost.
// @return the on_dvr callback directive, the args is the url to callback.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_vhost_on_dvr(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the on_hls callbacks of vhost.
// @return the on_hls callback directive, the args is the url to callback.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_vhost_on_hls(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the on_hls_notify callbacks of vhost.
// @return the on_hls_notify callback directive, the args is the url to callback.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_vhost_on_hls_notify(std::string vhost);
// bwct(bandwidth check tool) section
2014-04-04 09:01:34 +00:00
public:
2019-04-28 01:08:05 +00:00
// Whether bw check enabled for vhost.
// If enabled, serve all clients with bandwidth check services.
// oterwise, serve all cleints with stream.
2018-01-01 11:39:57 +00:00
virtual bool get_bw_check_enabled(std::string vhost);
2019-04-28 01:08:05 +00:00
// The key of server, if client key mot match, reject.
2018-01-01 11:39:57 +00:00
virtual std::string get_bw_check_key(std::string vhost);
2019-04-28 01:08:05 +00:00
// The check interval, in srs_utime_t.
// If the client request check in very short time(in the interval),
// SRS will reject client.
// @remark this is used to prevent the bandwidth check attack.
virtual srs_utime_t get_bw_check_interval(std::string vhost);
2019-04-28 01:08:05 +00:00
// The max kbps that user can test,
// If exceed the kbps, server will slowdown the send-recv.
// @remark this is used to protect the service bandwidth.
2018-01-01 11:39:57 +00:00
virtual int get_bw_check_limit_kbps(std::string vhost);
// vhost cluster section
2014-04-25 07:27:50 +00:00
public:
2019-04-28 01:08:05 +00:00
// Whether vhost is edge mode.
// For edge, publish client will be proxyed to upnode,
// For edge, play client will share a connection to get stream from upnode.
2018-01-01 11:39:57 +00:00
virtual bool get_vhost_is_edge(std::string vhost);
2019-04-28 01:08:05 +00:00
// Whether vhost is edge mode.
// For edge, publish client will be proxyed to upnode,
// For edge, play client will share a connection to get stream from upnode.
2018-01-01 11:39:57 +00:00
virtual bool get_vhost_is_edge(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the origin config of edge,
// specifies the origin ip address, port.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_vhost_edge_origin(std::string vhost);
2019-04-28 01:08:05 +00:00
// Whether edge token tranverse is enabled,
// If true, edge will send connect origin to verfy the token of client.
// For example, we verify all clients on the origin FMS by server-side as,
// all clients connected to edge must be tranverse to origin to verify.
2018-01-01 11:39:57 +00:00
virtual bool get_vhost_edge_token_traverse(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the transformed vhost for edge,
// @see https://github.com/ossrs/srs/issues/372
2018-01-01 11:39:57 +00:00
virtual std::string get_vhost_edge_transform_vhost(std::string vhost);
2019-04-28 01:08:05 +00:00
// Whether enable the origin cluster.
// @see https://github.com/ossrs/srs/wiki/v3_EN_OriginCluster
virtual bool get_vhost_origin_cluster(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the co-workers of origin cluster.
// @see https://github.com/ossrs/srs/wiki/v3_EN_OriginCluster
virtual std::vector<std::string> get_vhost_coworkers(std::string vhost);
// vhost security section
public:
2019-04-28 01:08:05 +00:00
// Whether the secrity of vhost enabled.
2018-01-01 11:39:57 +00:00
virtual bool get_security_enabled(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the security rules.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_security_rules(std::string vhost);
// vhost transcode section
2014-04-04 09:01:34 +00:00
public:
2019-04-28 01:08:05 +00:00
// Get the transcode directive of vhost in specified scope.
// @param vhost, the vhost name to get the transcode directive.
// @param scope, the scope, empty to get all. for example, user can transcode
// the app scope stream, by config with app:
// transcode live {...}
// when the scope is "live", this directive is matched.
// the scope can be: empty for all, app, app/stream.
// @remark, please see the samples of full.conf, the app.transcode.srs.com
// and stream.transcode.srs.com.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_transcode(std::string vhost, std::string scope);
2019-04-28 01:08:05 +00:00
// Whether the transcode directive is enabled.
2018-01-01 11:39:57 +00:00
virtual bool get_transcode_enabled(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the ffmpeg tool path of transcode.
2018-01-01 11:39:57 +00:00
virtual std::string get_transcode_ffmpeg(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the engines of transcode.
2018-01-01 11:39:57 +00:00
virtual std::vector<SrsConfDirective*> get_transcode_engines(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Whether the engine is enabled.
2018-01-01 11:39:57 +00:00
virtual bool get_engine_enabled(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the perfile of engine
virtual std::vector<std::string> get_engine_perfile(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the iformat of engine
2018-01-01 11:39:57 +00:00
virtual std::string get_engine_iformat(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the vfilter of engine,
// The video filter set before the vcodec of FFMPEG.
virtual std::vector<std::string> get_engine_vfilter(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the vcodec of engine,
// The codec of video, can be vn, copy or libx264
2018-01-01 11:39:57 +00:00
virtual std::string get_engine_vcodec(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the vbitrate of engine,
// The bitrate in kbps of video, for example, 800kbps
2018-01-01 11:39:57 +00:00
virtual int get_engine_vbitrate(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the vfps of engine.
// The video fps, for example, 25fps
2018-01-01 11:39:57 +00:00
virtual double get_engine_vfps(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the vwidth of engine,
// The video width, for example, 1024
2018-01-01 11:39:57 +00:00
virtual int get_engine_vwidth(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the vheight of engine,
// The video height, for example, 576
2018-01-01 11:39:57 +00:00
virtual int get_engine_vheight(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the vthreads of engine,
// The video transcode libx264 threads, for instance, 8
2018-01-01 11:39:57 +00:00
virtual int get_engine_vthreads(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the vprofile of engine,
// The libx264 profile, can be high,main,baseline
2018-01-01 11:39:57 +00:00
virtual std::string get_engine_vprofile(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the vpreset of engine,
// The libx264 preset, can be ultrafast,superfast,veryfast,faster,fast,medium,slow,slower,veryslow,placebo
2018-01-01 11:39:57 +00:00
virtual std::string get_engine_vpreset(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the additional video params.
virtual std::vector<std::string> get_engine_vparams(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the acodec of engine,
// The audio codec can be an, copy or libfdk_aac
2018-01-01 11:39:57 +00:00
virtual std::string get_engine_acodec(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the abitrate of engine,
// The audio bitrate in kbps, for instance, 64kbps.
2018-01-01 11:39:57 +00:00
virtual int get_engine_abitrate(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the asample_rate of engine,
// The audio sample_rate, for instance, 44100HZ
2018-01-01 11:39:57 +00:00
virtual int get_engine_asample_rate(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the achannels of engine,
// The audio channel, for instance, 1 for mono, 2 for stereo.
2018-01-01 11:39:57 +00:00
virtual int get_engine_achannels(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the aparams of engine,
// The audio additional params.
virtual std::vector<std::string> get_engine_aparams(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the oformat of engine
2018-01-01 11:39:57 +00:00
virtual std::string get_engine_oformat(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the output of engine, for example, rtmp://localhost/live/livestream,
// @remark, we will use some variable, for instance, [vhost] to substitude with vhost.
2018-01-01 11:39:57 +00:00
virtual std::string get_engine_output(SrsConfDirective* conf);
// vhost exec secion
private:
2019-04-28 01:08:05 +00:00
// Get the exec directive of vhost.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_exec(std::string vhost);
public:
2019-04-28 01:08:05 +00:00
// Whether the exec is enabled of vhost.
2018-01-01 11:39:57 +00:00
virtual bool get_exec_enabled(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get all exec publish directives of vhost.
2018-01-01 11:39:57 +00:00
virtual std::vector<SrsConfDirective*> get_exec_publishs(std::string vhost);
2017-03-25 09:21:39 +00:00
// vhost ingest section
2014-04-07 03:57:24 +00:00
public:
2019-04-28 01:08:05 +00:00
// Get the ingest directives of vhost.
2014-07-18 03:46:29 +00:00
virtual std::vector<SrsConfDirective*> get_ingesters(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get specified ingest.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_ingest_by_id(std::string vhost, std::string ingest_id);
2019-04-28 01:08:05 +00:00
// Whether ingest is enalbed.
2018-01-01 11:39:57 +00:00
virtual bool get_ingest_enabled(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the ingest ffmpeg tool
2018-01-01 11:39:57 +00:00
virtual std::string get_ingest_ffmpeg(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the ingest input type, file or stream.
2018-01-01 11:39:57 +00:00
virtual std::string get_ingest_input_type(SrsConfDirective* conf);
2019-04-28 01:08:05 +00:00
// Get the ingest input url.
2018-01-01 11:39:57 +00:00
virtual std::string get_ingest_input_url(SrsConfDirective* conf);
// log section
public:
2019-04-28 01:08:05 +00:00
// Whether log to file.
2018-01-01 11:39:57 +00:00
virtual bool get_log_tank_file();
2019-04-28 01:08:05 +00:00
// Get the log level.
2018-01-01 11:39:57 +00:00
virtual std::string get_log_level();
2019-04-28 01:08:05 +00:00
// Get the log file path.
2018-01-01 11:39:57 +00:00
virtual std::string get_log_file();
2019-04-28 01:08:05 +00:00
// Whether ffmpeg log enabled
2020-02-05 04:15:44 +00:00
virtual bool get_ff_log_enabled();
2019-04-28 01:08:05 +00:00
// The ffmpeg log dir.
// @remark, /dev/null to disable it.
2020-02-05 04:15:44 +00:00
virtual std::string get_ff_log_dir();
// The ffmpeg log level.
virtual std::string get_ff_log_level();
// The MPEG-DASH section.
2017-02-11 13:14:28 +00:00
private:
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_dash(std::string vhost);
2017-02-11 13:14:28 +00:00
public:
// Whether DASH is enabled.
2018-01-01 11:39:57 +00:00
virtual bool get_dash_enabled(std::string vhost);
// Get the duration of segment in srs_utime_t.
2019-04-08 01:02:39 +00:00
virtual srs_utime_t get_dash_fragment(std::string vhost);
// Get the period to update MPD in srs_utime_t.
virtual srs_utime_t get_dash_update_period(std::string vhost);
2019-04-08 01:20:02 +00:00
// Get the depth of timeshift buffer in srs_utime_t.
virtual srs_utime_t get_dash_timeshift(std::string vhost);
2017-02-26 12:40:33 +00:00
// Get the base/home dir/path for dash, into which write files.
2018-01-01 11:39:57 +00:00
virtual std::string get_dash_path(std::string vhost);
2017-02-26 12:40:33 +00:00
// Get the path for DASH MPD, to generate the MPD file.
2018-01-01 11:39:57 +00:00
virtual std::string get_dash_mpd_file(std::string vhost);
// hls section
2013-12-14 13:19:47 +00:00
private:
2019-04-28 01:08:05 +00:00
// Get the hls directive of vhost.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_hls(std::string vhost);
2013-12-14 13:19:47 +00:00
public:
2019-04-28 01:08:05 +00:00
// Whether HLS is enabled.
2018-01-01 11:39:57 +00:00
virtual bool get_hls_enabled(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the HLS m3u8 list ts segment entry prefix info.
2018-01-01 11:39:57 +00:00
virtual std::string get_hls_entry_prefix(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the HLS ts/m3u8 file store path.
2018-01-01 11:39:57 +00:00
virtual std::string get_hls_path(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the HLS m3u8 file path template.
2018-01-01 11:39:57 +00:00
virtual std::string get_hls_m3u8_file(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the HLS ts file path template.
2018-01-01 11:39:57 +00:00
virtual std::string get_hls_ts_file(std::string vhost);
2019-04-28 01:08:05 +00:00
// Whether enable the floor(timestamp/hls_fragment) for variable timestamp.
2018-01-01 11:39:57 +00:00
virtual bool get_hls_ts_floor(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the hls fragment time, in srs_utime_t.
2019-04-16 00:14:12 +00:00
virtual srs_utime_t get_hls_fragment(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the hls td(target duration) ratio.
2018-01-01 11:39:57 +00:00
virtual double get_hls_td_ratio(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the hls aof(audio overflow) ratio.
2018-01-01 11:39:57 +00:00
virtual double get_hls_aof_ratio(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the hls window time, in srs_utime_t.
// a window is a set of ts, the ts collection in m3u8.
// @remark SRS will delete the ts exceed the window.
2019-04-16 00:20:32 +00:00
virtual srs_utime_t get_hls_window(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the hls hls_on_error config.
// The ignore will ignore error and disable hls.
// The disconnect will disconnect publish connection.
// @see https://github.com/ossrs/srs/issues/264
2018-01-01 11:39:57 +00:00
virtual std::string get_hls_on_error(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the HLS default audio codec.
2018-01-01 11:39:57 +00:00
virtual std::string get_hls_acodec(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the HLS default video codec.
2018-01-01 11:39:57 +00:00
virtual std::string get_hls_vcodec(std::string vhost);
2019-04-28 01:08:05 +00:00
// Whether cleanup the old ts files.
2018-01-01 11:39:57 +00:00
virtual bool get_hls_cleanup(std::string vhost);
2019-04-28 01:08:05 +00:00
// The timeout in srs_utime_t to dispose the hls.
virtual srs_utime_t get_hls_dispose(std::string vhost);
2019-04-28 01:08:05 +00:00
// Whether reap the ts when got keyframe.
2018-01-01 11:39:57 +00:00
virtual bool get_hls_wait_keyframe(std::string vhost);
2019-04-28 01:08:05 +00:00
// encrypt ts or not
2018-03-25 04:05:52 +00:00
virtual bool get_hls_keys(std::string vhost);
2019-04-28 01:08:05 +00:00
// how many fragments can one key encrypted.
2018-03-25 04:05:52 +00:00
virtual int get_hls_fragments_per_key(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the HLS key file path template.
2018-03-25 04:05:52 +00:00
virtual std::string get_hls_key_file(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the HLS key file store path.
2018-03-25 04:05:52 +00:00
virtual std::string get_hls_key_file_path(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the HLS key file url which will be put in m3u8
2018-03-25 04:05:52 +00:00
virtual std::string get_hls_key_url(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the size of bytes to read from cdn network, for the on_hls_notify callback,
// that is, to read max bytes of the bytes from the callback, or timeout or error.
2018-01-01 11:39:57 +00:00
virtual int get_vhost_hls_nb_notify(std::string vhost);
// Whether turn the FLV timestamp to TS DTS.
virtual bool get_vhost_hls_dts_directly(std::string vhost);
// hds section
2015-03-11 05:34:58 +00:00
private:
2019-04-28 01:08:05 +00:00
// Get the hds directive of vhost.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_hds(const std::string &vhost);
2015-03-11 05:34:58 +00:00
public:
2019-04-28 01:08:05 +00:00
// Whether HDS is enabled.
2018-01-01 11:39:57 +00:00
virtual bool get_hds_enabled(const std::string &vhost);
2019-04-28 01:08:05 +00:00
// Get the HDS file store path.
2018-01-01 11:39:57 +00:00
virtual std::string get_hds_path(const std::string &vhost);
2019-04-28 01:08:05 +00:00
// Get the hds fragment time, in srs_utime_t.
virtual srs_utime_t get_hds_fragment(const std::string &vhost);
2019-04-28 01:08:05 +00:00
// Get the hds window time, in srs_utime_t.
// a window is a set of hds fragments.
virtual srs_utime_t get_hds_window(const std::string &vhost);
// dvr section
2014-04-17 08:06:49 +00:00
private:
2019-04-28 01:08:05 +00:00
// Get the dvr directive.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_dvr(std::string vhost);
2014-04-17 08:06:49 +00:00
public:
2019-04-28 01:08:05 +00:00
// Whether dvr is enabled.
2018-01-01 11:39:57 +00:00
virtual bool get_dvr_enabled(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the filter of dvr to apply to.
// @remark user can use srs_config_apply_filter(conf, req):bool to check it.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_dvr_apply(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the dvr path, the flv file to save in.
2018-01-01 11:39:57 +00:00
virtual std::string get_dvr_path(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the plan of dvr, how to reap the flv file.
2018-01-01 11:39:57 +00:00
virtual std::string get_dvr_plan(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the duration of dvr flv.
virtual srs_utime_t get_dvr_duration(std::string vhost);
2019-04-28 01:08:05 +00:00
// Whether wait keyframe to reap segment.
2018-01-01 11:39:57 +00:00
virtual bool get_dvr_wait_keyframe(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the time_jitter algorithm for dvr.
2018-01-01 11:39:57 +00:00
virtual int get_dvr_time_jitter(std::string vhost);
// http api section
2014-03-27 04:14:04 +00:00
private:
2019-04-28 01:08:05 +00:00
// Whether http api enabled
2018-01-01 11:39:57 +00:00
virtual bool get_http_api_enabled(SrsConfDirective* conf);
2014-07-18 04:12:25 +00:00
public:
2019-04-28 01:08:05 +00:00
// Whether http api enabled.
2018-01-01 11:39:57 +00:00
virtual bool get_http_api_enabled();
2019-04-28 01:08:05 +00:00
// Get the http api listen port.
2018-01-01 11:39:57 +00:00
virtual std::string get_http_api_listen();
2019-04-28 01:08:05 +00:00
// Whether enable crossdomain for http api.
2018-01-01 11:39:57 +00:00
virtual bool get_http_api_crossdomain();
2019-04-28 01:08:05 +00:00
// Whether enable the HTTP RAW API.
2018-01-01 11:39:57 +00:00
virtual bool get_raw_api();
2019-04-28 01:08:05 +00:00
// Whether allow rpc reload.
2018-01-01 11:39:57 +00:00
virtual bool get_raw_api_allow_reload();
2019-04-28 01:08:05 +00:00
// Whether allow rpc query.
2018-01-01 11:39:57 +00:00
virtual bool get_raw_api_allow_query();
2019-04-28 01:08:05 +00:00
// Whether allow rpc update.
2018-01-01 11:39:57 +00:00
virtual bool get_raw_api_allow_update();
// http stream section
2014-03-27 04:14:04 +00:00
private:
2019-04-28 01:08:05 +00:00
// Whether http stream enabled.
2018-01-01 11:39:57 +00:00
virtual bool get_http_stream_enabled(SrsConfDirective* conf);
2014-07-18 04:12:25 +00:00
public:
2019-04-28 01:08:05 +00:00
// Whether http stream enabled.
// TODO: FIXME: rename to http_static.
2018-01-01 11:39:57 +00:00
virtual bool get_http_stream_enabled();
2019-04-28 01:08:05 +00:00
// Get the http stream listen port.
2018-01-01 11:39:57 +00:00
virtual std::string get_http_stream_listen();
2019-04-28 01:08:05 +00:00
// Get the http stream root dir.
2018-01-01 11:39:57 +00:00
virtual std::string get_http_stream_dir();
2019-04-28 01:08:05 +00:00
// Whether enable crossdomain for http static and stream server.
2018-01-01 11:39:57 +00:00
virtual bool get_http_stream_crossdomain();
2014-04-04 10:55:21 +00:00
public:
2019-04-28 01:08:05 +00:00
// Get whether vhost enabled http stream
2018-01-01 11:39:57 +00:00
virtual bool get_vhost_http_enabled(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the http mount point for vhost.
// For example, http://vhost/live/livestream
2018-01-01 11:39:57 +00:00
virtual std::string get_vhost_http_mount(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the http dir for vhost.
// The path on disk for mount root of http vhost.
2018-01-01 11:39:57 +00:00
virtual std::string get_vhost_http_dir(std::string vhost);
// flv live streaming section
2015-01-18 10:00:40 +00:00
public:
2019-04-28 01:08:05 +00:00
// Get whether vhost enabled http flv live stream
2018-01-01 11:39:57 +00:00
virtual bool get_vhost_http_remux_enabled(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the fast cache duration for http audio live stream.
virtual srs_utime_t get_vhost_http_remux_fast_cache(std::string vhost);
2019-04-28 01:08:05 +00:00
// Get the http flv live stream mount point for vhost.
// used to generate the flv stream mount path.
2018-01-01 11:39:57 +00:00
virtual std::string get_vhost_http_remux_mount(std::string vhost);
// http heartbeart section
2014-05-19 09:39:01 +00:00
private:
2019-04-28 01:08:05 +00:00
// Get the heartbeat directive.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_heartbeart();
2014-05-19 09:39:01 +00:00
public:
2019-04-28 01:08:05 +00:00
// Whether heartbeat enabled.
2018-01-01 11:39:57 +00:00
virtual bool get_heartbeat_enabled();
2019-04-28 01:08:05 +00:00
// Get the heartbeat interval, in srs_utime_t.
virtual srs_utime_t get_heartbeat_interval();
2019-04-28 01:08:05 +00:00
// Get the heartbeat report url.
2018-01-01 11:39:57 +00:00
virtual std::string get_heartbeat_url();
2019-04-28 01:08:05 +00:00
// Get the device id of heartbeat, to report to server.
2018-01-01 11:39:57 +00:00
virtual std::string get_heartbeat_device_id();
2019-04-28 01:08:05 +00:00
// Whether report with summaries of http api: /api/v1/summaries.
2018-01-01 11:39:57 +00:00
virtual bool get_heartbeat_summaries();
// stats section
private:
2019-04-28 01:08:05 +00:00
// Get the stats directive.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_stats();
public:
2019-04-28 01:08:05 +00:00
// Get the network device index, used to retrieve the ip of device,
// For heartbeat to report to server, or to get the local ip.
// For example, 0 means the eth0 maybe.
2018-01-01 11:39:57 +00:00
virtual int get_stats_network();
2019-04-28 01:08:05 +00:00
// Get the disk stat device name list.
// The device name configed in args of directive.
// @return the disk device name to stat. NULL if not configed.
2018-01-01 11:39:57 +00:00
virtual SrsConfDirective* get_stats_disk_device();
};
2014-08-02 14:18:39 +00:00
#endif