Skip to content

Commit

Permalink
add hds reload supported.ossrs#328
Browse files Browse the repository at this point in the history
  • Loading branch information
wenjie.zhao committed Mar 12, 2015
1 parent abe0713 commit 643f18a
Show file tree
Hide file tree
Showing 9 changed files with 75 additions and 3 deletions.
13 changes: 13 additions & 0 deletions trunk/src/app/srs_app_config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -826,6 +826,19 @@ int SrsConfig::reload_vhost(SrsConfDirective* old_root)
}
srs_trace("vhost %s reload hls success.", vhost.c_str());
}

// hds reload
if (!srs_directive_equals(new_vhost->get("hds"), old_vhost->get("hds"))) {
for (it = subscribes.begin(); it != subscribes.end(); ++it) {
ISrsReloadHandler* subscribe = *it;
if ((ret = subscribe->on_reload_vhost_hds(vhost)) != ERROR_SUCCESS) {
srs_error("vhost %s notify subscribes hds failed. ret=%d", vhost.c_str(), ret);
return ret;
}
}
srs_trace("vhost %s reload hds 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) {
Expand Down
30 changes: 27 additions & 3 deletions trunk/src/app/srs_app_hds.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,7 @@ SrsHds::SrsHds(SrsSource *s)
, video_sh(NULL)
, audio_sh(NULL)
, hds_req(NULL)
, hds_enabled(false)
{

}
Expand All @@ -278,9 +279,18 @@ SrsHds::~SrsHds()

int SrsHds::on_publish(SrsRequest *req)
{
// TODO: FIXME: check whether disabled.
// TODO: FIXME: support reload.

int ret = ERROR_SUCCESS;
if (hds_enabled) {
return ret;
}

std::string vhost = req->vhost;
if (!_srs_config->get_hds_enabled(vhost)) {
hds_enabled = false;
return ret;
}
hds_enabled = true;

hds_req = req->copy();

return flush_mainfest();
Expand All @@ -290,6 +300,12 @@ int SrsHds::on_unpublish()
{
int ret = ERROR_SUCCESS;

if (!hds_enabled) {
return ret;
}

hds_enabled = false;

srs_freep(video_sh);
srs_freep(audio_sh);
srs_freep(hds_req);
Expand All @@ -313,6 +329,10 @@ int SrsHds::on_video(SrsSharedPtrMessage* msg)
{
int ret = ERROR_SUCCESS;

if (!hds_enabled) {
return ret;
}

if (SrsFlvCodec::video_is_sequence_header(msg->payload, msg->size)) {
srs_freep(video_sh);
video_sh = msg->copy();
Expand Down Expand Up @@ -361,6 +381,10 @@ int SrsHds::on_audio(SrsSharedPtrMessage* msg)
{
int ret = ERROR_SUCCESS;

if (!hds_enabled) {
return ret;
}

if (SrsFlvCodec::audio_is_sequence_header(msg->payload, msg->size)) {
srs_freep(audio_sh);
audio_sh = msg->copy();
Expand Down
1 change: 1 addition & 0 deletions trunk/src/app/srs_app_hds.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ class SrsHds
SrsSharedPtrMessage *audio_sh;

SrsRequest *hds_req;
bool hds_enabled;
};

#endif
Expand Down
5 changes: 5 additions & 0 deletions trunk/src/app/srs_app_reload.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,11 @@ int ISrsReloadHandler::on_reload_vhost_hls(string /*vhost*/)
return ERROR_SUCCESS;
}

int ISrsReloadHandler::on_reload_vhost_hds(string /*vhost*/)
{
return ERROR_SUCCESS;
}

int ISrsReloadHandler::on_reload_vhost_dvr(string /*vhost*/)
{
return ERROR_SUCCESS;
Expand Down
1 change: 1 addition & 0 deletions trunk/src/app/srs_app_reload.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ class ISrsReloadHandler
virtual int on_reload_vhost_time_jitter(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_hds(std::string vhost);
virtual int on_reload_vhost_dvr(std::string vhost);
virtual int on_reload_vhost_mr(std::string vhost);
virtual int on_reload_vhost_mw(std::string vhost);
Expand Down
20 changes: 20 additions & 0 deletions trunk/src/app/srs_app_source.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1013,6 +1013,26 @@ int SrsSource::on_reload_vhost_hls(string vhost)
return ret;
}

int SrsSource::on_reload_vhost_hds(string vhost)
{
int ret = ERROR_SUCCESS;

if (_req->vhost != vhost) {
return ret;
}

#ifdef SRS_AUTO_HDS
hds->on_unpublish();
if ((ret = hds->on_publish(_req)) != ERROR_SUCCESS) {
srs_error("hds publish failed. ret=%d", ret);
return ret;
}
srs_trace("vhost %s hds reload success", vhost.c_str());
#endif

return ret;
}

int SrsSource::on_reload_vhost_dvr(string vhost)
{
int ret = ERROR_SUCCESS;
Expand Down
1 change: 1 addition & 0 deletions trunk/src/app/srs_app_source.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -476,6 +476,7 @@ class SrsSource : public ISrsReloadHandler
virtual int on_reload_vhost_time_jitter(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_hds(std::string vhost);
virtual int on_reload_vhost_dvr(std::string vhost);
virtual int on_reload_vhost_transcode(std::string vhost);
// for the tools callback
Expand Down
6 changes: 6 additions & 0 deletions trunk/src/utest/srs_utest_reload.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,12 @@ int MockReloadHandler::on_reload_vhost_hls(string /*vhost*/)
return ERROR_SUCCESS;
}

int MockReloadHandler::on_reload_vhost_hds(string /*vhost*/)
{
vhost_hls_reloaded = true;
return ERROR_SUCCESS;
}

int MockReloadHandler::on_reload_vhost_dvr(string /*vhost*/)
{
vhost_dvr_reloaded = true;
Expand Down
1 change: 1 addition & 0 deletions trunk/src/utest/srs_utest_reload.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ class MockReloadHandler : public ISrsReloadHandler
virtual int on_reload_vhost_time_jitter(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_hds(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);
Expand Down

0 comments on commit 643f18a

Please sign in to comment.