forked from External/mediamtx
playback: improve performance when reading big segments (#3209)
This commit is contained in:
parent
34b120fd33
commit
b5b44f4534
1 changed files with 14 additions and 0 deletions
|
|
@ -317,6 +317,7 @@ func segmentFMP4SeekAndMuxParts(
|
||||||
var tfdt *mp4.Tfdt
|
var tfdt *mp4.Tfdt
|
||||||
atLeastOnePartWritten := false
|
atLeastOnePartWritten := false
|
||||||
maxMuxerDTS := int64(0)
|
maxMuxerDTS := int64(0)
|
||||||
|
breakAtNextMdat := false
|
||||||
|
|
||||||
_, err := mp4.ReadBoxStructure(r, func(h *mp4.ReadHandle) (interface{}, error) {
|
_, err := mp4.ReadBoxStructure(r, func(h *mp4.ReadHandle) (interface{}, error) {
|
||||||
switch h.BoxInfo.Type.String() {
|
switch h.BoxInfo.Type.String() {
|
||||||
|
|
@ -361,6 +362,7 @@ func segmentFMP4SeekAndMuxParts(
|
||||||
|
|
||||||
for _, e := range trun.Entries {
|
for _, e := range trun.Entries {
|
||||||
if muxerDTS >= int64(durationMP4) {
|
if muxerDTS >= int64(durationMP4) {
|
||||||
|
breakAtNextMdat = true
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -392,6 +394,11 @@ func segmentFMP4SeekAndMuxParts(
|
||||||
if muxerDTS > maxMuxerDTS {
|
if muxerDTS > maxMuxerDTS {
|
||||||
maxMuxerDTS = muxerDTS
|
maxMuxerDTS = muxerDTS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case "mdat":
|
||||||
|
if breakAtNextMdat {
|
||||||
|
return nil, errTerminated
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil, nil
|
return nil, nil
|
||||||
})
|
})
|
||||||
|
|
@ -418,6 +425,7 @@ func segmentFMP4WriteParts(
|
||||||
var tfhd *mp4.Tfhd
|
var tfhd *mp4.Tfhd
|
||||||
var tfdt *mp4.Tfdt
|
var tfdt *mp4.Tfdt
|
||||||
maxMuxerDTS := int64(0)
|
maxMuxerDTS := int64(0)
|
||||||
|
breakAtNextMdat := false
|
||||||
|
|
||||||
_, err := mp4.ReadBoxStructure(r, func(h *mp4.ReadHandle) (interface{}, error) {
|
_, err := mp4.ReadBoxStructure(r, func(h *mp4.ReadHandle) (interface{}, error) {
|
||||||
switch h.BoxInfo.Type.String() {
|
switch h.BoxInfo.Type.String() {
|
||||||
|
|
@ -462,6 +470,7 @@ func segmentFMP4WriteParts(
|
||||||
|
|
||||||
for _, e := range trun.Entries {
|
for _, e := range trun.Entries {
|
||||||
if muxerDTS >= int64(durationMP4) {
|
if muxerDTS >= int64(durationMP4) {
|
||||||
|
breakAtNextMdat = true
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -489,6 +498,11 @@ func segmentFMP4WriteParts(
|
||||||
if muxerDTS > maxMuxerDTS {
|
if muxerDTS > maxMuxerDTS {
|
||||||
maxMuxerDTS = muxerDTS
|
maxMuxerDTS = muxerDTS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case "mdat":
|
||||||
|
if breakAtNextMdat {
|
||||||
|
return nil, errTerminated
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil, nil
|
return nil, nil
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue