1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

DASH: Fix number mode bug to make it run. v5.0.96 (#3240)

* Add utc time utility
* Fix calculate duration in fmp4
* Refine dash code, use segment template timeline
* Shrink m4s file and cleanup
* Support play by dash.js
* Use SegmentTemplate timeline mode with $Number$

Co-authored-by: winlin <winlin@vip.126.com>
This commit is contained in:
john 2022-11-24 18:09:50 +08:00 committed by winlin
parent e6ccd8ec9a
commit d927996890
18 changed files with 506 additions and 105 deletions

View file

@ -4912,7 +4912,7 @@ srs_error_t SrsMp4SampleManager::write(SrsMp4MovieBox* moov)
return err;
}
srs_error_t SrsMp4SampleManager::write(SrsMp4MovieFragmentBox* moof, uint64_t& dts)
srs_error_t SrsMp4SampleManager::write(SrsMp4MovieFragmentBox* moof, uint64_t dts)
{
srs_error_t err = srs_success;
@ -4936,11 +4936,12 @@ srs_error_t SrsMp4SampleManager::write(SrsMp4MovieFragmentBox* moof, uint64_t& d
entry->sample_flags = 0x01000000;
}
entry->sample_duration = (uint32_t)srs_min(100, sample->dts - dts);
if (entry->sample_duration == 0) {
entry->sample_duration = 40;
vector<SrsMp4Sample*>::iterator iter = (it + 1);
if (iter == samples.end()) {
entry->sample_duration = dts - sample->dts;
} else {
entry->sample_duration = (*iter)->dts - sample->dts;
}
dts = sample->dts;
entry->sample_size = sample->nb_data;
entry->sample_composition_time_offset = (int64_t)(sample->pts - sample->dts);
@ -6445,8 +6446,7 @@ srs_error_t SrsMp4M2tsSegmentEncoder::flush(uint64_t& dts)
uint64_t duration = 0;
if (samples && !samples->samples.empty()) {
SrsMp4Sample* first = samples->samples[0];
SrsMp4Sample* last = samples->samples[samples->samples.size() - 1];
duration = srs_max(0, last->dts - first->dts);
duration = srs_max(0, dts - first->dts);
}
SrsMp4SegmentIndexEntry entry;

View file

@ -1906,7 +1906,7 @@ public:
virtual srs_error_t write(SrsMp4MovieBox* moov);
// Write the samples info to moof.
// @param The dts is the dts of last segment.
virtual srs_error_t write(SrsMp4MovieFragmentBox* moof, uint64_t& dts);
virtual srs_error_t write(SrsMp4MovieFragmentBox* moof, uint64_t dts);
private:
virtual srs_error_t write_track(SrsFrameType track,
SrsMp4DecodingTime2SampleBox* stts, SrsMp4SyncSampleBox* stss, SrsMp4CompositionTime2SampleBox* ctts,