From 89e5b420e23eb76393c275be43c082e5410e7f4c Mon Sep 17 00:00:00 2001 From: Nathan Perry Date: Fri, 28 Jul 2017 19:40:56 -0400 Subject: basic playback working --- downloader/downloader.go | 45 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 9 deletions(-) (limited to 'downloader') diff --git a/downloader/downloader.go b/downloader/downloader.go index 2b3b2f1..76e9f01 100644 --- a/downloader/downloader.go +++ b/downloader/downloader.go @@ -9,8 +9,6 @@ import ( "io/ioutil" "os" - "fmt" - "github.com/mammothbane/thulani-go/wav" "github.com/op/go-logging" ) @@ -20,13 +18,40 @@ var log = logging.MustGetLogger("downloader") func getUrl(inUrl string) (string, error) { dl := exec.Command("youtube-dl", "-f", "bestaudio", "-x", "--get-url", inUrl) - b, err := dl.CombinedOutput() + outpipe, err := dl.StdoutPipe() + if err != nil { + return "", err + } + + errpipe, err := dl.StderrPipe() if err != nil { - log.Errorf("youtube-dl failed: %v", string(b)) return "", err } - tgt, err := url.Parse(string(b)) + err = dl.Start() + if err != nil { + log.Errorf("starting youtube-dl failed") + return "", err + } + + o, ierr := ioutil.ReadAll(outpipe) + if ierr != nil { + log.Errorf("unable to read from output pipe") + return "", err + } + + e, ierr := ioutil.ReadAll(errpipe) + if ierr != nil { + log.Errorf("unable to read from error pipe") + return "", err + } + + if err := dl.Wait(); err != nil { + log.Errorf("error:\n%v", string(e)) + return "", err + } + + tgt, err := url.Parse(string(o)) out := tgt.Scheme + "://" + tgt.Host + tgt.Path + "?" + tgt.Query().Encode() return out, nil @@ -61,15 +86,16 @@ func Download(inUrl string, startTime time.Duration, duration time.Duration) (<- } clearTemp := func() { + if err := file.Close(); err != nil { + log.Errorf("error closing temp file: %q", err) + } + if err := os.Remove(file.Name()); err != nil { log.Errorf("unable to remove temp file: %q", err) } } args = append(args, file.Name()) - //args = append(args, "out.wav") - - fmt.Println(args) dl := exec.Command(`ffmpeg`, args...) b, err := dl.CombinedOutput() @@ -79,7 +105,8 @@ func Download(inUrl string, startTime time.Duration, duration time.Duration) (<- return nil, err } - ch, done, err := wav.Load(file.Name()) + ch := make(chan []byte, 1024*32) + done, err := wav.Load(file.Name(), ch) if err != nil { clearTemp() return nil, err -- cgit v1.3.1