package soundbox import ( "context" "net" "os/exec" ) // 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 { cmd := exec.CommandContext( ctx, "ffmpeg", "-re", "-i", url, "-acodec", "flac", "-f", "ogg", "-", ) stdout, err := cmd.StdoutPipe() if err != nil { return err } err = cmd.Start() if err != nil { return err } streamContext(ctx, stdout, targets) return cmd.Wait() }