正在显示
9 个修改的文件
包含
75 行增加
和
3 行删除
| @@ -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(); |
| @@ -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); |
-
请 注册 或 登录 后发表评论