mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
support hls mount to vhost and reload
This commit is contained in:
parent
041040b846
commit
d81b2cb140
3 changed files with 65 additions and 24 deletions
|
@ -956,6 +956,7 @@ vhost with-hls.srs.com {
|
||||||
# [vhost], the vhost of stream.
|
# [vhost], the vhost of stream.
|
||||||
# [app], the app of stream.
|
# [app], the app of stream.
|
||||||
# [stream], the stream name of stream.
|
# [stream], the stream name of stream.
|
||||||
|
# recommend: [vhost]/[app]/[stream].m3u8
|
||||||
# default: [app]/[stream].m3u8
|
# default: [app]/[stream].m3u8
|
||||||
hls_m3u8_file [app]/[stream].m3u8;
|
hls_m3u8_file [app]/[stream].m3u8;
|
||||||
# the hls ts file name.
|
# the hls ts file name.
|
||||||
|
@ -974,6 +975,7 @@ vhost with-hls.srs.com {
|
||||||
# [seq], the sequence number of ts.
|
# [seq], the sequence number of ts.
|
||||||
# @see https://github.com/ossrs/srs/wiki/v2_CN_DVR#custom-path
|
# @see https://github.com/ossrs/srs/wiki/v2_CN_DVR#custom-path
|
||||||
# @see https://github.com/ossrs/srs/wiki/v2_CN_DeliveryHLS#hls-config
|
# @see https://github.com/ossrs/srs/wiki/v2_CN_DeliveryHLS#hls-config
|
||||||
|
# recommend: [vhost]/[app]/[stream]-[seq].ts
|
||||||
# default: [app]/[stream]-[seq].ts
|
# default: [app]/[stream]-[seq].ts
|
||||||
hls_ts_file [app]/[stream]-[seq].ts;
|
hls_ts_file [app]/[stream]-[seq].ts;
|
||||||
# whether use floor for the hls_ts_file path generation.
|
# whether use floor for the hls_ts_file path generation.
|
||||||
|
|
|
@ -206,10 +206,12 @@ int SrsVodStream::serve_mp4_stream(ISrsHttpResponseWriter* w, ISrsHttpMessage* r
|
||||||
SrsHttpStaticServer::SrsHttpStaticServer(SrsServer* svr)
|
SrsHttpStaticServer::SrsHttpStaticServer(SrsServer* svr)
|
||||||
{
|
{
|
||||||
server = svr;
|
server = svr;
|
||||||
|
_srs_config->subscribe(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsHttpStaticServer::~SrsHttpStaticServer()
|
SrsHttpStaticServer::~SrsHttpStaticServer()
|
||||||
{
|
{
|
||||||
|
_srs_config->unsubscribe(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsHttpStaticServer::initialize()
|
int SrsHttpStaticServer::initialize()
|
||||||
|
@ -227,36 +229,17 @@ int SrsHttpStaticServer::initialize()
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string vhost = conf->arg0();
|
string pmount;
|
||||||
if (!_srs_config->get_vhost_http_enabled(vhost)) {
|
string vhost = conf->arg0();
|
||||||
continue;
|
if ((ret = mount_vhost(vhost, pmount)) != ERROR_SUCCESS) {
|
||||||
}
|
|
||||||
|
|
||||||
std::string mount = _srs_config->get_vhost_http_mount(vhost);
|
|
||||||
std::string dir = _srs_config->get_vhost_http_dir(vhost);
|
|
||||||
|
|
||||||
// replace the vhost variable
|
|
||||||
mount = srs_string_replace(mount, "[vhost]", vhost);
|
|
||||||
|
|
||||||
// remove the default vhost mount
|
|
||||||
mount = srs_string_replace(mount, SRS_CONSTS_RTMP_DEFAULT_VHOST"/", "/");
|
|
||||||
|
|
||||||
// the dir mount must always ends with "/"
|
|
||||||
if (mount != "/" && !srs_string_ends_with(mount, "/")) {
|
|
||||||
mount += "/";
|
|
||||||
}
|
|
||||||
|
|
||||||
// mount the http of vhost.
|
|
||||||
if ((ret = mux.handle(mount, new SrsVodStream(dir))) != ERROR_SUCCESS) {
|
|
||||||
srs_error("http: mount dir=%s for vhost=%s failed. ret=%d", dir.c_str(), vhost.c_str(), ret);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mount == "/") {
|
if (pmount == "/") {
|
||||||
default_root_exists = true;
|
default_root_exists = true;
|
||||||
|
std::string dir = _srs_config->get_vhost_http_dir(vhost);
|
||||||
srs_warn("http: root mount to %s", dir.c_str());
|
srs_warn("http: root mount to %s", dir.c_str());
|
||||||
}
|
}
|
||||||
srs_trace("http: vhost=%s mount to %s", vhost.c_str(), mount.c_str());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!default_root_exists) {
|
if (!default_root_exists) {
|
||||||
|
@ -272,6 +255,59 @@ int SrsHttpStaticServer::initialize()
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int SrsHttpStaticServer::mount_vhost(string vhost, string& pmount)
|
||||||
|
{
|
||||||
|
int ret = ERROR_SUCCESS;
|
||||||
|
|
||||||
|
// when vhost disabled, ignore.
|
||||||
|
if (!_srs_config->get_vhost_enabled(vhost)) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
// when vhost http_static disabled, ignore.
|
||||||
|
if (!_srs_config->get_vhost_http_enabled(vhost)) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string mount = _srs_config->get_vhost_http_mount(vhost);
|
||||||
|
std::string dir = _srs_config->get_vhost_http_dir(vhost);
|
||||||
|
|
||||||
|
// replace the vhost variable
|
||||||
|
mount = srs_string_replace(mount, "[vhost]", vhost);
|
||||||
|
dir = srs_string_replace(dir, "[vhost]", vhost);
|
||||||
|
|
||||||
|
// remove the default vhost mount
|
||||||
|
mount = srs_string_replace(mount, SRS_CONSTS_RTMP_DEFAULT_VHOST"/", "/");
|
||||||
|
|
||||||
|
// the dir mount must always ends with "/"
|
||||||
|
if (mount != "/" && !srs_string_ends_with(mount, "/")) {
|
||||||
|
mount += "/";
|
||||||
|
}
|
||||||
|
|
||||||
|
// mount the http of vhost.
|
||||||
|
if ((ret = mux.handle(mount, new SrsVodStream(dir))) != ERROR_SUCCESS) {
|
||||||
|
srs_error("http: mount dir=%s for vhost=%s failed. ret=%d", dir.c_str(), vhost.c_str(), ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
srs_trace("http: vhost=%s mount to %s at %s", vhost.c_str(), mount.c_str(), dir.c_str());
|
||||||
|
|
||||||
|
pmount = mount;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int SrsHttpStaticServer::on_reload_vhost_added(string vhost)
|
||||||
|
{
|
||||||
|
int ret = ERROR_SUCCESS;
|
||||||
|
|
||||||
|
string pmount;
|
||||||
|
if ((ret = mount_vhost(vhost, pmount)) != ERROR_SUCCESS) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
int SrsHttpStaticServer::on_reload_vhost_http_updated()
|
int SrsHttpStaticServer::on_reload_vhost_http_updated()
|
||||||
{
|
{
|
||||||
int ret = ERROR_SUCCESS;
|
int ret = ERROR_SUCCESS;
|
||||||
|
|
|
@ -65,8 +65,11 @@ public:
|
||||||
virtual ~SrsHttpStaticServer();
|
virtual ~SrsHttpStaticServer();
|
||||||
public:
|
public:
|
||||||
virtual int initialize();
|
virtual int initialize();
|
||||||
|
private:
|
||||||
|
virtual int mount_vhost(std::string vhost, std::string& pmount);
|
||||||
// interface ISrsReloadHandler.
|
// interface ISrsReloadHandler.
|
||||||
public:
|
public:
|
||||||
|
virtual int on_reload_vhost_added(std::string vhost);
|
||||||
virtual int on_reload_vhost_http_updated();
|
virtual int on_reload_vhost_http_updated();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue