package media type MasterPlaylist struct { VideoFeeds []VideoPlaylist AudioFeeds []AudioPlaylist } func NewMasterPlaylist(videoFeeds []VideoPlaylist, audioFeeds []AudioPlaylist) *MasterPlaylist { return &MasterPlaylist{ VideoFeeds: videoFeeds, AudioFeeds: audioFeeds, } } func (m *MasterPlaylist) SelectBestQualityStreams() (*VideoPlaylist, *AudioPlaylist) { if len(m.VideoFeeds) == 0 { return nil, nil } bestVideo := m.VideoFeeds[0] maxPixels := ResolutionToPixels(bestVideo.Resolution) for _, video := range m.VideoFeeds { pixels := ResolutionToPixels(video.Resolution) if video.Bandwidth > bestVideo.Bandwidth || pixels > maxPixels { bestVideo = video maxPixels = pixels } } return &bestVideo, m.FindAudioFeedByGroup(bestVideo.AudioGroup) } func (m *MasterPlaylist) FindAudioFeedByGroup(groupID string) *AudioPlaylist { for _, audio := range m.AudioFeeds { if audio.GroupID == groupID { return &audio } } return nil }