示例#1
0
文件: render.go 项目: omarqazi/guide
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
}