mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-08 02:34:16 -04:00
Cleanup segments output path
This commit is contained in:
parent
2e7e1be9f1
commit
b9a9607e9e
@ -24,8 +24,8 @@ func (t *Transcoder) NewAudioStream(file *FileStream, idx uint32) (*AudioStream,
|
|||||||
return ret, nil
|
return ret, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (as *AudioStream) getOutPath(encoder_id int) string {
|
func (as *AudioStream) getIdentifier() string {
|
||||||
return fmt.Sprintf("%s/segment-a%d-%d-%%d.ts", as.file.Out, as.index, encoder_id)
|
return fmt.Sprintf("a%d", as.index)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (as *AudioStream) getFlags() Flags {
|
func (as *AudioStream) getFlags() Flags {
|
||||||
|
@ -8,7 +8,6 @@ import (
|
|||||||
"math"
|
"math"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
|
||||||
"slices"
|
"slices"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
@ -23,9 +22,12 @@ const (
|
|||||||
Transmux Flags = 1 << 3
|
Transmux Flags = 1 << 3
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// First %d is encoder_id, second %d is segment number (escaped for ffmpeg)
|
||||||
|
const SegmentNameFormat = "%d-segment-%%d.ts"
|
||||||
|
|
||||||
type StreamHandle interface {
|
type StreamHandle interface {
|
||||||
getTranscodeArgs(segments string) []string
|
getTranscodeArgs(segments string) []string
|
||||||
getOutPath(encoder_id int) string
|
getIdentifier() string
|
||||||
getFlags() Flags
|
getFlags() Flags
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -200,8 +202,8 @@ func (ts *Stream) run(start int32) error {
|
|||||||
segments = []float64{9999999}
|
segments = []float64{9999999}
|
||||||
}
|
}
|
||||||
|
|
||||||
outpath := ts.handle.getOutPath(encoder_id)
|
outpath := fmt.Sprintf("%s/%s", ts.file.Out, ts.handle.getIdentifier())
|
||||||
err := os.MkdirAll(filepath.Dir(outpath), 0o755)
|
err := os.MkdirAll(outpath, 0o755)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -292,7 +294,7 @@ func (ts *Stream) run(start int32) error {
|
|||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
scanner := bufio.NewScanner(stdout)
|
scanner := bufio.NewScanner(stdout)
|
||||||
format := filepath.Base(outpath)
|
format := fmt.Sprintf(SegmentNameFormat, encoder_id)
|
||||||
should_stop := false
|
should_stop := false
|
||||||
|
|
||||||
for scanner.Scan() {
|
for scanner.Scan() {
|
||||||
@ -310,7 +312,7 @@ func (ts *Stream) run(start int32) error {
|
|||||||
if ts.isSegmentReady(segment) {
|
if ts.isSegmentReady(segment) {
|
||||||
// the current segment is already marked at done so another process has already gone up to here.
|
// the current segment is already marked at done so another process has already gone up to here.
|
||||||
cmd.Process.Signal(os.Interrupt)
|
cmd.Process.Signal(os.Interrupt)
|
||||||
log.Printf("Killing ffmpeg because segment %d is already ready", segment)
|
log.Printf("Killing ffmpeg %s-%d because segment %d is already ready", ts.handle.getIdentifier(), encoder_id, segment)
|
||||||
should_stop = true
|
should_stop = true
|
||||||
} else {
|
} else {
|
||||||
ts.segments[segment].encoder = encoder_id
|
ts.segments[segment].encoder = encoder_id
|
||||||
@ -320,7 +322,7 @@ func (ts *Stream) run(start int32) error {
|
|||||||
should_stop = true
|
should_stop = true
|
||||||
} else if ts.isSegmentReady(segment + 1) {
|
} else if ts.isSegmentReady(segment + 1) {
|
||||||
cmd.Process.Signal(os.Interrupt)
|
cmd.Process.Signal(os.Interrupt)
|
||||||
log.Printf("Killing ffmpeg because next segment %d is ready", segment)
|
log.Printf("Killing ffmpeg %s-%d because next segment %d is ready", ts.handle.getIdentifier(), encoder_id, segment)
|
||||||
should_stop = true
|
should_stop = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -340,11 +342,11 @@ func (ts *Stream) run(start int32) error {
|
|||||||
go func() {
|
go func() {
|
||||||
err := cmd.Wait()
|
err := cmd.Wait()
|
||||||
if exiterr, ok := err.(*exec.ExitError); ok && exiterr.ExitCode() == 255 {
|
if exiterr, ok := err.(*exec.ExitError); ok && exiterr.ExitCode() == 255 {
|
||||||
log.Printf("ffmpeg %d was killed by us", encoder_id)
|
log.Printf("ffmpeg %s-%d was killed by us", ts.handle.getIdentifier(), encoder_id)
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
log.Printf("ffmpeg %d occured an error: %s: %s", encoder_id, err, stderr.String())
|
log.Printf("ffmpeg %s-%d occured an error: %s: %s", ts.handle.getIdentifier(), encoder_id, err, stderr.String())
|
||||||
} else {
|
} else {
|
||||||
log.Printf("ffmpeg %d finished successfully", encoder_id)
|
log.Printf("ffmpeg %s-%d finished successfully", ts.handle.getIdentifier(), encoder_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
ts.lock.Lock()
|
ts.lock.Lock()
|
||||||
@ -420,7 +422,15 @@ func (ts *Stream) GetSegment(segment int32) (string, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ts.prerareNextSegements(segment)
|
ts.prerareNextSegements(segment)
|
||||||
return fmt.Sprintf(ts.handle.getOutPath(ts.segments[segment].encoder), segment), nil
|
return fmt.Sprintf(
|
||||||
|
"%s/%s/%s",
|
||||||
|
ts.file.Out,
|
||||||
|
ts.handle.getIdentifier(),
|
||||||
|
fmt.Sprintf(
|
||||||
|
fmt.Sprintf(SegmentNameFormat, ts.segments[segment].encoder),
|
||||||
|
segment,
|
||||||
|
),
|
||||||
|
), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ts *Stream) prerareNextSegements(segment int32) {
|
func (ts *Stream) prerareNextSegements(segment int32) {
|
||||||
|
@ -44,8 +44,8 @@ func (vs *VideoStream) getFlags() Flags {
|
|||||||
return VideoF
|
return VideoF
|
||||||
}
|
}
|
||||||
|
|
||||||
func (vs *VideoStream) getOutPath(encoder_id int) string {
|
func (vs *VideoStream) getIdentifier() string {
|
||||||
return fmt.Sprintf("%s/segment-%s-%d-%%d.ts", vs.file.Out, vs.quality, encoder_id)
|
return fmt.Sprintf("v%d-%s", vs.video.Index, vs.quality)
|
||||||
}
|
}
|
||||||
|
|
||||||
func closestMultiple(n int32, x int32) int32 {
|
func closestMultiple(n int32, x int32) int32 {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user