diff options
Diffstat (limited to 'soundbox/url.go')
-rw-r--r-- | soundbox/url.go | 45 |
1 files changed, 2 insertions, 43 deletions
diff --git a/soundbox/url.go b/soundbox/url.go index 4ad9908..6fed442 100644 --- a/soundbox/url.go +++ b/soundbox/url.go @@ -2,39 +2,14 @@ package soundbox import ( "context" - "errors" - "io" "net" "os/exec" - "time" ) -// streamingPort is the default network port a soundbox is listening to for -// incoming audio stream data. -const streamingPort = 5316 - -const bufferSize = 20 - -const writeTimeout = 1 * time.Second - // StreamURLContext streams audio from a given URL to one or multiple soundbox // devices. The devices are referenced via their MAC addresses given by the // targets argument. The ctx argument is passed to cancel the streaming. func StreamURLContext(ctx context.Context, url string, targets []net.HardwareAddr) error { - conns := make([]net.Conn, 0) - for _, target := range targets { - conn, err := dialContext(ctx, target) - if err != nil { - return err - } - conns = append(conns, conn) - } - defer func() { - for _, conn := range conns { - conn.Close() - } - }() - cmd := exec.CommandContext( ctx, "ffmpeg", @@ -47,6 +22,7 @@ func StreamURLContext(ctx context.Context, url string, targets []net.HardwareAdd "ogg", "-", ) + stdout, err := cmd.StdoutPipe() if err != nil { return err @@ -57,24 +33,7 @@ func StreamURLContext(ctx context.Context, url string, targets []net.HardwareAdd return err } - for { - buffer := make([]byte, bufferSize) - i, err := stdout.Read(buffer) - if err != nil { - if errors.Is(err, io.EOF) { - break - } else { - return err - } - } - for _, conn := range conns { - conn.SetDeadline(time.Now().Add(writeTimeout)) - _, err = conn.Write(buffer[:i]) - if err != nil { - return err - } - } - } + streamContext(ctx, stdout, targets) return cmd.Wait() } |