diff --git a/trunk/src/app/srs_app_config.cpp b/trunk/src/app/srs_app_config.cpp index 25a1949c7..9a5d91854 100644 --- a/trunk/src/app/srs_app_config.cpp +++ b/trunk/src/app/srs_app_config.cpp @@ -851,6 +851,17 @@ int SrsConfig::reload_vhost(SrsConfDirective* old_root) } srs_trace("vhost %s reload hls success.", vhost.c_str()); } + // dvr, only one per vhost + if (!srs_directive_equals(new_vhost->get("dvr"), old_vhost->get("dvr"))) { + for (it = subscribes.begin(); it != subscribes.end(); ++it) { + ISrsReloadHandler* subscribe = *it; + if ((ret = subscribe->on_reload_vhost_dvr(vhost)) != ERROR_SUCCESS) { + srs_error("vhost %s notify subscribes dvr failed. ret=%d", vhost.c_str(), ret); + return ret; + } + } + srs_trace("vhost %s reload hls success.", vhost.c_str()); + } // http, only one per vhost. if (!srs_directive_equals(new_vhost->get("http"), old_vhost->get("http"))) { for (it = subscribes.begin(); it != subscribes.end(); ++it) { diff --git a/trunk/src/app/srs_app_dvr.cpp b/trunk/src/app/srs_app_dvr.cpp index e5a261d5b..9e8d7fd39 100644 --- a/trunk/src/app/srs_app_dvr.cpp +++ b/trunk/src/app/srs_app_dvr.cpp @@ -364,6 +364,10 @@ int SrsDvr::on_meta_data(SrsOnMetaDataPacket* metadata) { int ret = ERROR_SUCCESS; + if (!dvr_enabled) { + return ret; + } + int size = 0; char* payload = NULL; if ((ret = metadata->encode(size, payload)) != ERROR_SUCCESS) { @@ -382,6 +386,12 @@ int SrsDvr::on_audio(SrsSharedPtrMessage* audio) { int ret = ERROR_SUCCESS; + SrsAutoFree(SrsSharedPtrMessage, audio, false); + + if (!dvr_enabled) { + return ret; + } + int32_t timestamp = audio->header.timestamp; char* payload = (char*)audio->payload; int size = (int)audio->size; @@ -396,6 +406,12 @@ int SrsDvr::on_video(SrsSharedPtrMessage* video) { int ret = ERROR_SUCCESS; + SrsAutoFree(SrsSharedPtrMessage, video, false); + + if (!dvr_enabled) { + return ret; + } + int32_t timestamp = video->header.timestamp; char* payload = (char*)video->payload; int size = (int)video->size; diff --git a/trunk/src/app/srs_app_reload.cpp b/trunk/src/app/srs_app_reload.cpp index 3da523ede..b640162d6 100644 --- a/trunk/src/app/srs_app_reload.cpp +++ b/trunk/src/app/srs_app_reload.cpp @@ -130,6 +130,11 @@ int ISrsReloadHandler::on_reload_vhost_hls(string /*vhost*/) return ERROR_SUCCESS; } +int ISrsReloadHandler::on_reload_vhost_dvr(string /*vhost*/) +{ + return ERROR_SUCCESS; +} + int ISrsReloadHandler::on_reload_vhost_transcode(string /*vhost*/) { return ERROR_SUCCESS; diff --git a/trunk/src/app/srs_app_reload.hpp b/trunk/src/app/srs_app_reload.hpp index 6198af8a4..fa7f3426c 100644 --- a/trunk/src/app/srs_app_reload.hpp +++ b/trunk/src/app/srs_app_reload.hpp @@ -60,6 +60,7 @@ public: virtual int on_reload_vhost_queue_length(std::string vhost); virtual int on_reload_vhost_forward(std::string vhost); virtual int on_reload_vhost_hls(std::string vhost); + virtual int on_reload_vhost_dvr(std::string vhost); virtual int on_reload_vhost_transcode(std::string vhost); virtual int on_reload_ingest_removed(std::string vhost, std::string ingest_id); virtual int on_reload_ingest_added(std::string vhost, std::string ingest_id); diff --git a/trunk/src/app/srs_app_source.cpp b/trunk/src/app/srs_app_source.cpp index f81b7476b..c16452bf7 100644 --- a/trunk/src/app/srs_app_source.cpp +++ b/trunk/src/app/srs_app_source.cpp @@ -605,6 +605,26 @@ int SrsSource::on_reload_vhost_hls(string vhost) return ret; } +int SrsSource::on_reload_vhost_dvr(string vhost) +{ + int ret = ERROR_SUCCESS; + + if (req->vhost != vhost) { + return ret; + } + +#ifdef SRS_AUTO_DVR + dvr->on_unpublish(); + if ((ret = dvr->on_publish(req)) != ERROR_SUCCESS) { + srs_error("dvr publish failed. ret=%d", ret); + return ret; + } + srs_trace("vhost %s dvr reload success", vhost.c_str()); +#endif + + return ret; +} + int SrsSource::on_reload_vhost_transcode(string vhost) { int ret = ERROR_SUCCESS; diff --git a/trunk/src/app/srs_app_source.hpp b/trunk/src/app/srs_app_source.hpp index 893966320..0cf8daf46 100644 --- a/trunk/src/app/srs_app_source.hpp +++ b/trunk/src/app/srs_app_source.hpp @@ -278,6 +278,7 @@ public: virtual int on_reload_vhost_queue_length(std::string vhost); virtual int on_reload_vhost_forward(std::string vhost); virtual int on_reload_vhost_hls(std::string vhost); + virtual int on_reload_vhost_dvr(std::string vhost); virtual int on_reload_vhost_transcode(std::string vhost); public: // for the SrsForwarder to callback to request the sequence headers.