28Status MultiSegmentSegmenter::FinalizeSegment(int64_t start_timestamp,
29 int64_t duration_timestamp,
31 int64_t segment_number) {
33 RETURN_IF_ERROR(Segmenter::FinalizeSegment(
34 start_timestamp, duration_timestamp, is_subsegment, segment_number));
35 if (!cluster()->Finalize())
36 return Status(error::FILE_FAILURE,
"Error finalizing segment.");
39 std::string segment_name =
40 GetSegmentName(options().segment_template, start_timestamp,
41 segment_number, options().bandwidth);
45 RETURN_IF_ERROR(writer_->Close());
47 if (!File::Copy(temp_file_name_.c_str(), segment_name.c_str()))
48 return Status(error::FILE_FAILURE,
"Failure to copy memory file.");
50 if (!File::Delete(temp_file_name_.c_str()))
51 return Status(error::FILE_FAILURE,
"Failure to delete memory file.");
55 if (muxer_listener()) {
56 const uint64_t size = cluster()->Size();
57 muxer_listener()->OnNewSegment(segment_name, start_timestamp,
58 duration_timestamp, size, segment_number);
60 VLOG(1) <<
"WEBM file '" << segment_name <<
"' finalized.";