61 lines
1.5 KiB
Go
61 lines
1.5 KiB
Go
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 (s *StreamSet) SelectBestQualityStreams() (*VideoPlaylist, *AudioPlaylist) {
|
|
if len(s.Master.VideoFeeds) == 0 {
|
|
return nil, nil
|
|
}
|
|
|
|
bestVideo := s.Master.VideoFeeds[0]
|
|
maxPixels := ResolutionToPixels(bestVideo.Resolution)
|
|
|
|
for _, video := range s.Master.VideoFeeds {
|
|
pixels := ResolutionToPixels(video.Resolution)
|
|
if video.Bandwidth > bestVideo.Bandwidth || pixels > maxPixels {
|
|
bestVideo = video
|
|
maxPixels = pixels
|
|
}
|
|
}
|
|
|
|
return &bestVideo, s.Master.FindAudioFeedByGroup(bestVideo.AudioGroup)
|
|
}
|
|
|
|
func (m *MasterPlaylist) FindAudioFeedByGroup(groupID string) *AudioPlaylist {
|
|
for _, audio := range m.AudioFeeds {
|
|
if audio.GroupID == groupID {
|
|
return &audio
|
|
}
|
|
}
|
|
return nil
|
|
}
|