mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
for #179, add dvr plan append.
This commit is contained in:
parent
95b4baee7c
commit
7077b74d03
4 changed files with 57 additions and 4 deletions
|
@ -284,6 +284,7 @@ vhost dvr.srs.com {
|
||||||
# the dvr plan. canbe:
|
# the dvr plan. canbe:
|
||||||
# session reap flv when session end(unpublish).
|
# session reap flv when session end(unpublish).
|
||||||
# segment reap flv when flv duration exceed the specified dvr_duration.
|
# segment reap flv when flv duration exceed the specified dvr_duration.
|
||||||
|
# append always append to flv file, never reap it.
|
||||||
# api reap flv when api required.
|
# api reap flv when api required.
|
||||||
# default: session
|
# default: session
|
||||||
dvr_plan session;
|
dvr_plan session;
|
||||||
|
|
|
@ -60,6 +60,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
#define SRS_CONF_DEFAULT_DVR_PATH "./objs/nginx/html"
|
#define SRS_CONF_DEFAULT_DVR_PATH "./objs/nginx/html"
|
||||||
#define SRS_CONF_DEFAULT_DVR_PLAN_SESSION "session"
|
#define SRS_CONF_DEFAULT_DVR_PLAN_SESSION "session"
|
||||||
#define SRS_CONF_DEFAULT_DVR_PLAN_SEGMENT "segment"
|
#define SRS_CONF_DEFAULT_DVR_PLAN_SEGMENT "segment"
|
||||||
|
#define SRS_CONF_DEFAULT_DVR_PLAN_APPEND "append"
|
||||||
#define SRS_CONF_DEFAULT_DVR_PLAN_API "api"
|
#define SRS_CONF_DEFAULT_DVR_PLAN_API "api"
|
||||||
#define SRS_CONF_DEFAULT_DVR_PLAN SRS_CONF_DEFAULT_DVR_PLAN_SESSION
|
#define SRS_CONF_DEFAULT_DVR_PLAN SRS_CONF_DEFAULT_DVR_PLAN_SESSION
|
||||||
#define SRS_CONF_DEFAULT_DVR_DURATION 30
|
#define SRS_CONF_DEFAULT_DVR_DURATION 30
|
||||||
|
|
|
@ -86,7 +86,7 @@ bool SrsFlvSegment::is_overflow(int64_t max_duration)
|
||||||
return duration >= max_duration;
|
return duration >= max_duration;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsFlvSegment::open()
|
int SrsFlvSegment::open(bool use_tmp_file)
|
||||||
{
|
{
|
||||||
int ret = ERROR_SUCCESS;
|
int ret = ERROR_SUCCESS;
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ int SrsFlvSegment::open()
|
||||||
}
|
}
|
||||||
|
|
||||||
// generate the tmp flv path.
|
// generate the tmp flv path.
|
||||||
if (!fresh_flv_file) {
|
if (!fresh_flv_file || !use_tmp_file) {
|
||||||
// when path exists, always append to it.
|
// when path exists, always append to it.
|
||||||
// so we must use the target flv path as output flv.
|
// so we must use the target flv path as output flv.
|
||||||
tmp_flv_file = path;
|
tmp_flv_file = path;
|
||||||
|
@ -546,8 +546,11 @@ SrsDvrPlan* SrsDvrPlan::create_plan(string vhost)
|
||||||
return new SrsDvrSegmentPlan();
|
return new SrsDvrSegmentPlan();
|
||||||
} else if (plan == SRS_CONF_DEFAULT_DVR_PLAN_SESSION) {
|
} else if (plan == SRS_CONF_DEFAULT_DVR_PLAN_SESSION) {
|
||||||
return new SrsDvrSessionPlan();
|
return new SrsDvrSessionPlan();
|
||||||
|
} else if (plan == SRS_CONF_DEFAULT_DVR_PLAN_APPEND) {
|
||||||
|
return new SrsDvrAppendPlan();
|
||||||
} else {
|
} else {
|
||||||
return new SrsDvrSessionPlan();
|
srs_error("invalid dvr plan=%s, vhost=%s", plan.c_str(), vhost.c_str());
|
||||||
|
srs_assert(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -601,6 +604,40 @@ void SrsDvrSessionPlan::on_unpublish()
|
||||||
dvr_enabled = false;
|
dvr_enabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SrsDvrAppendPlan::SrsDvrAppendPlan()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
SrsDvrAppendPlan::~SrsDvrAppendPlan()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int SrsDvrAppendPlan::on_publish()
|
||||||
|
{
|
||||||
|
int ret = ERROR_SUCCESS;
|
||||||
|
|
||||||
|
// support multiple publish.
|
||||||
|
if (dvr_enabled) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_srs_config->get_dvr_enabled(req->vhost)) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((ret = segment->open(false)) != ERROR_SUCCESS) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
dvr_enabled = true;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SrsDvrAppendPlan::on_unpublish()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
SrsDvrSegmentPlan::SrsDvrSegmentPlan()
|
SrsDvrSegmentPlan::SrsDvrSegmentPlan()
|
||||||
{
|
{
|
||||||
segment_duration = -1;
|
segment_duration = -1;
|
||||||
|
|
|
@ -113,8 +113,9 @@ public:
|
||||||
/**
|
/**
|
||||||
* open new segment file, timestamp start at 0 for fresh flv file.
|
* open new segment file, timestamp start at 0 for fresh flv file.
|
||||||
* @remark ignore when already open.
|
* @remark ignore when already open.
|
||||||
|
* @param use_tmp_file whether use tmp file if possible.
|
||||||
*/
|
*/
|
||||||
virtual int open();
|
virtual int open(bool use_tmp_file = true);
|
||||||
/**
|
/**
|
||||||
* close current segment.
|
* close current segment.
|
||||||
* @remark ignore when already closed.
|
* @remark ignore when already closed.
|
||||||
|
@ -207,6 +208,19 @@ public:
|
||||||
virtual void on_unpublish();
|
virtual void on_unpublish();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* always append to flv file, never reap it.
|
||||||
|
*/
|
||||||
|
class SrsDvrAppendPlan : public SrsDvrPlan
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SrsDvrAppendPlan();
|
||||||
|
virtual ~SrsDvrAppendPlan();
|
||||||
|
public:
|
||||||
|
virtual int on_publish();
|
||||||
|
virtual void on_unpublish();
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* segment plan: reap flv when duration exceed.
|
* segment plan: reap flv when duration exceed.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue