package main import ( "flag" "fmt" "log" "net/http" "os" "segmento/internal/playlist" "segmento/internal/segment" ) type listener struct { } func (l *listener) OnUpdate(p playlist.Playlist) { fmt.Println("Playlist updated") fmt.Println("Playlist:") fmt.Println(p.Render()) fmt.Println("") } func main() { // TODO accept some flags with: // URL - source of stream // TargetLength - length of segments in seconds // Output // -d some_dir/ => output playlist and chunks to this directory, cleaning up old files from time to time. // -b 0.0.0.0:3000 => serve playlist and chunks from an HTTP server bound to this address var url string flag.StringVar(&url, "url", "", "URL of MP3 stream") flag.Parse() if url == "" { log.Println("Invalid arguments") flag.PrintDefaults() os.Exit(-1) } client := &http.Client{} resp, err := client.Get(url) if err != nil { log.Fatal(err) } defer resp.Body.Close() listener := listener{} playlist := playlist.NewMediaPlaylist() playlist.AddListener(&listener) segmenter := segment.NewMP3HTTPSegmenter() segments, err := segmenter.Segment(resp.Body) if err != nil { log.Fatal(err) } // Block while reading the segments into the playlist: if err = playlist.ReadSegments(segments); err != nil { log.Fatal(err) } log.Println("exiting") }