diff --git a/ffmpeg/ffmpeg.go b/ffmpeg/ffmpeg.go index 7dfc6cc..c5e8171 100644 --- a/ffmpeg/ffmpeg.go +++ b/ffmpeg/ffmpeg.go @@ -1,10 +1,50 @@ package ffmpeg +import ( + "os/exec" + "bytes" + "strings" +) + type Configuration struct { FfmpegBin string FfprobeBin string } -func Configure(ffmpegBin, ffprobeBin string) *Configuration { - return &Configuration{ffmpegBin, ffprobeBin} +func Configure() (Configuration, error) { + var outFFmpeg bytes.Buffer + var outProbe bytes.Buffer + + cmdFFmpeg := exec.Command("/bin/sh", "-c", "which ffmpeg") + cmdProbe := exec.Command("/bin/sh", "-c", "which ffprobe") + + cmdFFmpeg.Stdout = &outFFmpeg + cmdProbe.Stdout = &outProbe + + err := cmdFFmpeg.Start() + if err != nil { + return Configuration{}, err + } + + _, err = cmdFFmpeg.Process.Wait() + if err != nil { + return Configuration{}, err + } + + err = cmdProbe.Start() + if err != nil { + return Configuration{}, err + } + + _, err = cmdProbe.Process.Wait() + if err != nil { + return Configuration{}, err + } + + ffmpeg := strings.Replace(outFFmpeg.String(), "\n", "", -1) + fprobe := strings.Replace(outProbe.String(), "\n", "", -1) + + cnf := Configuration{ffmpeg, fprobe} + + return cnf, nil } diff --git a/transcoder/transcoder.go b/transcoder/transcoder.go index cd76bdf..c0fab54 100644 --- a/transcoder/transcoder.go +++ b/transcoder/transcoder.go @@ -89,13 +89,19 @@ func (t Transcoder) GetCommand() string { /*** FUNCTIONS ***/ -func (t *Transcoder) Initialize(inputPath string, outputPath string, configuration *ffmpeg.Configuration) (error) { +func (t *Transcoder) Initialize(inputPath string, outputPath string) (error) { + + configuration, err := ffmpeg.Configure() + if err != nil { + fmt.Println(err) + return err + } if inputPath == "" { return errors.New("error: transcoder.Initialize -> inputPath missing") } - _, err := os.Stat(inputPath) + _, err = os.Stat(inputPath) if os.IsNotExist(err) { return errors.New("error: transcoder.Initialize -> input file not found") } @@ -104,24 +110,26 @@ func (t *Transcoder) Initialize(inputPath string, outputPath string, configurati cmd := exec.Command("/bin/sh", "-c", command) + fmt.Println(cmd) + var out bytes.Buffer cmd.Stdout = &out - cmdErr := cmd.Start() + err = cmd.Start() - if cmdErr != nil { - return cmdErr + if err != nil { + return err } - _, errProc := cmd.Process.Wait() - if errProc != nil { - return errProc + _, err = cmd.Process.Wait() + if err != nil { + return err } var Metadata models.Metadata - if err := json.Unmarshal([]byte(out.String()), &Metadata); err != nil { + if err = json.Unmarshal([]byte(out.String()), &Metadata); err != nil { return err } @@ -133,7 +141,7 @@ func (t *Transcoder) Initialize(inputPath string, outputPath string, configurati t.SetInputPath(inputPath) t.SetOutputPath(outputPath) t.SetMediaFile(MediaFile) - t.SetConfiguration(*configuration) + t.SetConfiguration(configuration) return nil