static bool IsYesNo(M3U8TagInstance tag, M3U8ValueAttribute<string> attribute, bool defaultValue = false) { var attr = tag.Attribute(attribute); if (null == attr || string.IsNullOrWhiteSpace(attr.Value)) return defaultValue; return 0 == string.CompareOrdinal("YES", attr.Value.ToUpperInvariant()); }
static void AddMedia(Uri playlist, M3U8TagInstance gt, Dictionary<string, MediaGroup> audioStreams) { var groupId = gt.Attribute(ExtMediaSupport.AttrGroupId).Value; var urlAttribute = gt.AttributeObject(ExtMediaSupport.AttrUri); Uri playlistUrl = null; if (null != urlAttribute) playlistUrl = new Uri(playlist, new Uri(urlAttribute, UriKind.RelativeOrAbsolute)); var language = gt.AttributeObject(ExtMediaSupport.AttrLanguage); var audioStream = new PlaylistSubStream { Type = gt.AttributeObject(ExtMediaSupport.AttrType), Name = groupId, Playlist = playlistUrl, IsAutoselect = IsYesNo(gt, ExtMediaSupport.AttrAutoselect), Language = null == language ? null : language.Trim().ToLower() }; MediaGroup mediaGroup; if (!audioStreams.TryGetValue(groupId, out mediaGroup)) { mediaGroup = new MediaGroup { Default = audioStream }; audioStreams[groupId] = mediaGroup; } var isDefault = IsYesNo(gt, ExtMediaSupport.AttrDefault); if (isDefault) mediaGroup.Default = audioStream; var name = gt.Attribute(ExtMediaSupport.AttrName).Value; mediaGroup.Streams[name] = audioStream; }