StreamRecorder/pkg/media/master_playlist.go

42 lines
967 B
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 (m *MasterPlaylist) FindAudioFeedByGroup(groupID string) *AudioPlaylist {
for _, audio := range m.AudioFeeds {
if audio.GroupID == groupID {
return &audio
}
}
return nil
}