func AddSegmentToSchedule(s *datastore.Schedule, bs BroadcastSegment) error { playlistBlob := datastore.Blob{s.CacheKey()} if s.MediaPlaylist == nil { // If no playlist exists s.MediaPlaylist, _ = m3u8.NewMediaPlaylist(100, 100) // alloc a new one if plistData, err := playlistBlob.GetBuffer(); err == nil { s.MediaPlaylist.Decode(*plistData, false) } } err := s.MediaPlaylist.Append(bs.MediaURL, bs.TargetDuration, bs.Title) // append the item if err != nil { s.MediaPlaylist.Slide(bs.MediaURL, bs.TargetDuration, bs.Title) // or slide if playlist full } s.MediaPlaylist.SetProgramDateTime(time.Now()) if bs.Discontinuity { // If the video format is different than the last segment if err := s.MediaPlaylist.SetDiscontinuity(); err != nil { // let the player know return err } } if err := playlistBlob.Set(s.PlaylistData()); err != nil { return err } return nil }