|
|
@ -399,10 +399,13 @@ void SrsDvrSessionPlan::on_unpublish()
|
|
|
|
SrsDvrSegmentPlan::SrsDvrSegmentPlan()
|
|
|
|
SrsDvrSegmentPlan::SrsDvrSegmentPlan()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
segment_duration = -1;
|
|
|
|
segment_duration = -1;
|
|
|
|
|
|
|
|
sh_video = sh_audio = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SrsDvrSegmentPlan::~SrsDvrSegmentPlan()
|
|
|
|
SrsDvrSegmentPlan::~SrsDvrSegmentPlan()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
srs_freep(sh_video);
|
|
|
|
|
|
|
|
srs_freep(sh_audio);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int SrsDvrSegmentPlan::initialize(SrsSource* source, SrsRequest* req)
|
|
|
|
int SrsDvrSegmentPlan::initialize(SrsSource* source, SrsRequest* req)
|
|
|
@ -445,6 +448,26 @@ void SrsDvrSegmentPlan::on_unpublish()
|
|
|
|
dvr_enabled = false;
|
|
|
|
dvr_enabled = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int SrsDvrSegmentPlan::on_audio(SrsSharedPtrMessage* audio)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (SrsFlvCodec::audio_is_sequence_header(audio->payload, audio->size)) {
|
|
|
|
|
|
|
|
srs_freep(sh_audio);
|
|
|
|
|
|
|
|
sh_audio = audio->copy();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return SrsDvrPlan::on_audio(audio);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int SrsDvrSegmentPlan::on_video(SrsSharedPtrMessage* video)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (SrsFlvCodec::video_is_sequence_header(video->payload, video->size)) {
|
|
|
|
|
|
|
|
srs_freep(sh_video);
|
|
|
|
|
|
|
|
sh_video = video->copy();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return SrsDvrPlan::on_video(video);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int SrsDvrSegmentPlan::update_duration(SrsSharedPtrMessage* msg)
|
|
|
|
int SrsDvrSegmentPlan::update_duration(SrsSharedPtrMessage* msg)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int ret = ERROR_SUCCESS;
|
|
|
|
int ret = ERROR_SUCCESS;
|
|
|
@ -463,9 +486,18 @@ int SrsDvrSegmentPlan::update_duration(SrsSharedPtrMessage* msg)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
on_unpublish();
|
|
|
|
on_unpublish();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// open new flv file
|
|
|
|
if ((ret = open_new_segment()) != ERROR_SUCCESS) {
|
|
|
|
if ((ret = open_new_segment()) != ERROR_SUCCESS) {
|
|
|
|
return ret;
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// update sequence header
|
|
|
|
|
|
|
|
if (sh_video && (ret = SrsDvrPlan::on_video(sh_video)) != ERROR_SUCCESS) {
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (sh_audio && (ret = SrsDvrPlan::on_audio(sh_audio)) != ERROR_SUCCESS) {
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
return ret;
|
|
|
|