diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..fd8ca11 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,4 @@ +modules.xml +transcoder.iml +vcs.xml +workspace.xml diff --git a/ffmpeg/config.go b/ffmpeg/config.go index 05eb7ff..bbda702 100644 --- a/ffmpeg/config.go +++ b/ffmpeg/config.go @@ -1,9 +1,12 @@ package ffmpeg +import "time" + // Config ... type Config struct { FfmpegBinPath string FfprobeBinPath string ProgressEnabled bool Verbose bool + Timeout time.Duration } diff --git a/ffmpeg/ffmpeg.go b/ffmpeg/ffmpeg.go index ea84fbc..acb20a7 100644 --- a/ffmpeg/ffmpeg.go +++ b/ffmpeg/ffmpeg.go @@ -12,9 +12,11 @@ import ( "regexp" "strconv" "strings" + "syscall" + "time" - "github.com/floostack/transcoder" - "github.com/floostack/transcoder/utils" + "github.com/C0nstantin/transcoder" + "github.com/C0nstantin/transcoder/utils" ) // Transcoder ... @@ -103,16 +105,39 @@ func (t *Transcoder) Start(opts transcoder.Options) (<-chan transcoder.Progress, } if t.config.ProgressEnabled && !t.config.Verbose { - go func() { - t.progress(stderrIn, out) - }() + if t.config.ProgressEnabled { + go func() { + t.progress(stderrIn, out) + }() + } + } + if int(t.config.Timeout) > 0 { + done := make(chan error, 1) go func() { defer close(out) - err = cmd.Wait() + done <- cmd.Wait() + }() + select { + case <-time.After(t.config.Timeout): + err = cmd.Process.Signal(syscall.SIGINT) + if err != nil { + return nil, err + } + time.Sleep(3 * time.Second) + + case err := <-done: + if err != nil { + return nil, err + } + } + } else { err = cmd.Wait() + if err != nil { + return nil, fmt.Errorf("Error ffmeg execute command %s, %w", cmd.String(), err) + } } return out, nil @@ -192,7 +217,7 @@ func (t *Transcoder) validate() error { } // GetMetadata Returns metadata for the specified input file -func (t *Transcoder) GetMetadata() ( transcoder.Metadata, error) { +func (t *Transcoder) GetMetadata() (transcoder.Metadata, error) { if t.config.FfprobeBinPath != "" { var outb, errb bytes.Buffer diff --git a/ffmpeg/metadata.go b/ffmpeg/metadata.go index 4e81910..21ef3d1 100644 --- a/ffmpeg/metadata.go +++ b/ffmpeg/metadata.go @@ -1,6 +1,6 @@ package ffmpeg -import "github.com/floostack/transcoder" +import "github.com/C0nstantin/transcoder" // Metadata ... type Metadata struct { diff --git a/go.mod b/go.mod index 4c9ade4..c5568d3 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,3 @@ -module github.com/floostack/transcoder +module github.com/C0nstantin/transcoder go 1.13