wenjie.zhao

add hds reload supported.#328

@@ -826,6 +826,19 @@ int SrsConfig::reload_vhost(SrsConfDirective* old_root) @@ -826,6 +826,19 @@ int SrsConfig::reload_vhost(SrsConfDirective* old_root)
826 } 826 }
827 srs_trace("vhost %s reload hls success.", vhost.c_str()); 827 srs_trace("vhost %s reload hls success.", vhost.c_str());
828 } 828 }
  829 +
  830 + // hds reload
  831 + if (!srs_directive_equals(new_vhost->get("hds"), old_vhost->get("hds"))) {
  832 + for (it = subscribes.begin(); it != subscribes.end(); ++it) {
  833 + ISrsReloadHandler* subscribe = *it;
  834 + if ((ret = subscribe->on_reload_vhost_hds(vhost)) != ERROR_SUCCESS) {
  835 + srs_error("vhost %s notify subscribes hds failed. ret=%d", vhost.c_str(), ret);
  836 + return ret;
  837 + }
  838 + }
  839 + srs_trace("vhost %s reload hds success.", vhost.c_str());
  840 + }
  841 +
829 // dvr, only one per vhost 842 // dvr, only one per vhost
830 if (!srs_directive_equals(new_vhost->get("dvr"), old_vhost->get("dvr"))) { 843 if (!srs_directive_equals(new_vhost->get("dvr"), old_vhost->get("dvr"))) {
831 for (it = subscribes.begin(); it != subscribes.end(); ++it) { 844 for (it = subscribes.begin(); it != subscribes.end(); ++it) {
@@ -267,6 +267,7 @@ SrsHds::SrsHds(SrsSource *s) @@ -267,6 +267,7 @@ SrsHds::SrsHds(SrsSource *s)
267 , video_sh(NULL) 267 , video_sh(NULL)
268 , audio_sh(NULL) 268 , audio_sh(NULL)
269 , hds_req(NULL) 269 , hds_req(NULL)
  270 + , hds_enabled(false)
270 { 271 {
271 272
272 } 273 }
@@ -278,9 +279,18 @@ SrsHds::~SrsHds() @@ -278,9 +279,18 @@ SrsHds::~SrsHds()
278 279
279 int SrsHds::on_publish(SrsRequest *req) 280 int SrsHds::on_publish(SrsRequest *req)
280 { 281 {
281 - // TODO: FIXME: check whether disabled.  
282 - // TODO: FIXME: support reload.  
283 - 282 + int ret = ERROR_SUCCESS;
  283 + if (hds_enabled) {
  284 + return ret;
  285 + }
  286 +
  287 + std::string vhost = req->vhost;
  288 + if (!_srs_config->get_hds_enabled(vhost)) {
  289 + hds_enabled = false;
  290 + return ret;
  291 + }
  292 + hds_enabled = true;
  293 +
284 hds_req = req->copy(); 294 hds_req = req->copy();
285 295
286 return flush_mainfest(); 296 return flush_mainfest();
@@ -290,6 +300,12 @@ int SrsHds::on_unpublish() @@ -290,6 +300,12 @@ int SrsHds::on_unpublish()
290 { 300 {
291 int ret = ERROR_SUCCESS; 301 int ret = ERROR_SUCCESS;
292 302
  303 + if (!hds_enabled) {
  304 + return ret;
  305 + }
  306 +
  307 + hds_enabled = false;
  308 +
293 srs_freep(video_sh); 309 srs_freep(video_sh);
294 srs_freep(audio_sh); 310 srs_freep(audio_sh);
295 srs_freep(hds_req); 311 srs_freep(hds_req);
@@ -313,6 +329,10 @@ int SrsHds::on_video(SrsSharedPtrMessage* msg) @@ -313,6 +329,10 @@ int SrsHds::on_video(SrsSharedPtrMessage* msg)
313 { 329 {
314 int ret = ERROR_SUCCESS; 330 int ret = ERROR_SUCCESS;
315 331
  332 + if (!hds_enabled) {
  333 + return ret;
  334 + }
  335 +
316 if (SrsFlvCodec::video_is_sequence_header(msg->payload, msg->size)) { 336 if (SrsFlvCodec::video_is_sequence_header(msg->payload, msg->size)) {
317 srs_freep(video_sh); 337 srs_freep(video_sh);
318 video_sh = msg->copy(); 338 video_sh = msg->copy();
@@ -361,6 +381,10 @@ int SrsHds::on_audio(SrsSharedPtrMessage* msg) @@ -361,6 +381,10 @@ int SrsHds::on_audio(SrsSharedPtrMessage* msg)
361 { 381 {
362 int ret = ERROR_SUCCESS; 382 int ret = ERROR_SUCCESS;
363 383
  384 + if (!hds_enabled) {
  385 + return ret;
  386 + }
  387 +
364 if (SrsFlvCodec::audio_is_sequence_header(msg->payload, msg->size)) { 388 if (SrsFlvCodec::audio_is_sequence_header(msg->payload, msg->size)) {
365 srs_freep(audio_sh); 389 srs_freep(audio_sh);
366 audio_sh = msg->copy(); 390 audio_sh = msg->copy();
@@ -61,6 +61,7 @@ private: @@ -61,6 +61,7 @@ private:
61 SrsSharedPtrMessage *audio_sh; 61 SrsSharedPtrMessage *audio_sh;
62 62
63 SrsRequest *hds_req; 63 SrsRequest *hds_req;
  64 + bool hds_enabled;
64 }; 65 };
65 66
66 #endif 67 #endif
@@ -140,6 +140,11 @@ int ISrsReloadHandler::on_reload_vhost_hls(string /*vhost*/) @@ -140,6 +140,11 @@ int ISrsReloadHandler::on_reload_vhost_hls(string /*vhost*/)
140 return ERROR_SUCCESS; 140 return ERROR_SUCCESS;
141 } 141 }
142 142
  143 +int ISrsReloadHandler::on_reload_vhost_hds(string /*vhost*/)
  144 +{
  145 + return ERROR_SUCCESS;
  146 +}
  147 +
143 int ISrsReloadHandler::on_reload_vhost_dvr(string /*vhost*/) 148 int ISrsReloadHandler::on_reload_vhost_dvr(string /*vhost*/)
144 { 149 {
145 return ERROR_SUCCESS; 150 return ERROR_SUCCESS;
@@ -65,6 +65,7 @@ public: @@ -65,6 +65,7 @@ public:
65 virtual int on_reload_vhost_time_jitter(std::string vhost); 65 virtual int on_reload_vhost_time_jitter(std::string vhost);
66 virtual int on_reload_vhost_forward(std::string vhost); 66 virtual int on_reload_vhost_forward(std::string vhost);
67 virtual int on_reload_vhost_hls(std::string vhost); 67 virtual int on_reload_vhost_hls(std::string vhost);
  68 + virtual int on_reload_vhost_hds(std::string vhost);
68 virtual int on_reload_vhost_dvr(std::string vhost); 69 virtual int on_reload_vhost_dvr(std::string vhost);
69 virtual int on_reload_vhost_mr(std::string vhost); 70 virtual int on_reload_vhost_mr(std::string vhost);
70 virtual int on_reload_vhost_mw(std::string vhost); 71 virtual int on_reload_vhost_mw(std::string vhost);
@@ -1013,6 +1013,26 @@ int SrsSource::on_reload_vhost_hls(string vhost) @@ -1013,6 +1013,26 @@ int SrsSource::on_reload_vhost_hls(string vhost)
1013 return ret; 1013 return ret;
1014 } 1014 }
1015 1015
  1016 +int SrsSource::on_reload_vhost_hds(string vhost)
  1017 +{
  1018 + int ret = ERROR_SUCCESS;
  1019 +
  1020 + if (_req->vhost != vhost) {
  1021 + return ret;
  1022 + }
  1023 +
  1024 +#ifdef SRS_AUTO_HDS
  1025 + hds->on_unpublish();
  1026 + if ((ret = hds->on_publish(_req)) != ERROR_SUCCESS) {
  1027 + srs_error("hds publish failed. ret=%d", ret);
  1028 + return ret;
  1029 + }
  1030 + srs_trace("vhost %s hds reload success", vhost.c_str());
  1031 +#endif
  1032 +
  1033 + return ret;
  1034 +}
  1035 +
1016 int SrsSource::on_reload_vhost_dvr(string vhost) 1036 int SrsSource::on_reload_vhost_dvr(string vhost)
1017 { 1037 {
1018 int ret = ERROR_SUCCESS; 1038 int ret = ERROR_SUCCESS;
@@ -476,6 +476,7 @@ public: @@ -476,6 +476,7 @@ public:
476 virtual int on_reload_vhost_time_jitter(std::string vhost); 476 virtual int on_reload_vhost_time_jitter(std::string vhost);
477 virtual int on_reload_vhost_forward(std::string vhost); 477 virtual int on_reload_vhost_forward(std::string vhost);
478 virtual int on_reload_vhost_hls(std::string vhost); 478 virtual int on_reload_vhost_hls(std::string vhost);
  479 + virtual int on_reload_vhost_hds(std::string vhost);
479 virtual int on_reload_vhost_dvr(std::string vhost); 480 virtual int on_reload_vhost_dvr(std::string vhost);
480 virtual int on_reload_vhost_transcode(std::string vhost); 481 virtual int on_reload_vhost_transcode(std::string vhost);
481 // for the tools callback 482 // for the tools callback
@@ -266,6 +266,12 @@ int MockReloadHandler::on_reload_vhost_hls(string /*vhost*/) @@ -266,6 +266,12 @@ int MockReloadHandler::on_reload_vhost_hls(string /*vhost*/)
266 return ERROR_SUCCESS; 266 return ERROR_SUCCESS;
267 } 267 }
268 268
  269 +int MockReloadHandler::on_reload_vhost_hds(string /*vhost*/)
  270 +{
  271 + vhost_hls_reloaded = true;
  272 + return ERROR_SUCCESS;
  273 +}
  274 +
269 int MockReloadHandler::on_reload_vhost_dvr(string /*vhost*/) 275 int MockReloadHandler::on_reload_vhost_dvr(string /*vhost*/)
270 { 276 {
271 vhost_dvr_reloaded = true; 277 vhost_dvr_reloaded = true;
@@ -91,6 +91,7 @@ public: @@ -91,6 +91,7 @@ public:
91 virtual int on_reload_vhost_time_jitter(std::string vhost); 91 virtual int on_reload_vhost_time_jitter(std::string vhost);
92 virtual int on_reload_vhost_forward(std::string vhost); 92 virtual int on_reload_vhost_forward(std::string vhost);
93 virtual int on_reload_vhost_hls(std::string vhost); 93 virtual int on_reload_vhost_hls(std::string vhost);
  94 + virtual int on_reload_vhost_hds(std::string vhost);
94 virtual int on_reload_vhost_dvr(std::string vhost); 95 virtual int on_reload_vhost_dvr(std::string vhost);
95 virtual int on_reload_vhost_transcode(std::string vhost); 96 virtual int on_reload_vhost_transcode(std::string vhost);
96 virtual int on_reload_ingest_removed(std::string vhost, std::string ingest_id); 97 virtual int on_reload_ingest_removed(std::string vhost, std::string ingest_id);