mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-06-02 21:24:20 -04:00
Start new transcode if next segments are not ready
This commit is contained in:
parent
d630f29753
commit
43ba1bb449
@ -67,7 +67,7 @@ func (ts *Stream) run(start int32) error {
|
|||||||
// Start the transcode up to the 100th segment (or less)
|
// Start the transcode up to the 100th segment (or less)
|
||||||
// Stop at the first finished segment
|
// Stop at the first finished segment
|
||||||
end := min(start+100, int32(len(ts.file.Keyframes))-1)
|
end := min(start+100, int32(len(ts.file.Keyframes))-1)
|
||||||
ts.lock.RLock()
|
ts.lock.Lock()
|
||||||
for i := start; i < end; i++ {
|
for i := start; i < end; i++ {
|
||||||
if ts.isSegmentReady(i) {
|
if ts.isSegmentReady(i) {
|
||||||
end = i
|
end = i
|
||||||
@ -78,7 +78,7 @@ func (ts *Stream) run(start int32) error {
|
|||||||
ts.heads = append(ts.heads, start)
|
ts.heads = append(ts.heads, start)
|
||||||
// we set nil while the command has not started, this is just to reserve the index
|
// we set nil while the command has not started, this is just to reserve the index
|
||||||
ts.commands = append(ts.commands, nil)
|
ts.commands = append(ts.commands, nil)
|
||||||
ts.lock.RUnlock()
|
ts.lock.Unlock()
|
||||||
|
|
||||||
log.Printf(
|
log.Printf(
|
||||||
"Starting transcode for %s (from %d to %d out of %d segments)",
|
"Starting transcode for %s (from %d to %d out of %d segments)",
|
||||||
@ -222,6 +222,19 @@ func (ts *Stream) GetSegment(segment int32) (string, error) {
|
|||||||
distance := 0.
|
distance := 0.
|
||||||
if !ready {
|
if !ready {
|
||||||
distance = ts.getMinEncoderDistance(segment)
|
distance = ts.getMinEncoderDistance(segment)
|
||||||
|
} else {
|
||||||
|
// if the current segment is ready, check next segments are ready and if not start a transcode for them
|
||||||
|
for i := int32(1); i <= 10; i++ {
|
||||||
|
if slices.Contains(ts.heads, segment+i) {
|
||||||
|
// no need to create a new transcoder if there is already one running for this segment
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if !ts.isSegmentReady(segment + i) {
|
||||||
|
log.Printf("Creating new head for future segment (%d)", segment+i)
|
||||||
|
go ts.run(segment + i)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ts.lock.RUnlock()
|
ts.lock.RUnlock()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user