/// <summary> /// Extracts the media descriptions via reflection on a <see cref="Type"/>. /// </summary> /// <returns> /// It returns a <see cref="Dictionary{TMediaFormat,MediaFormatAttribute}"/> mapping all known media formats with the relative /// <see cref="MediaFormatAttribute"/>. /// </returns> /// <exception cref="ArgumentNullException"> /// Exception thrown if <paramref name="type"/> is null. /// </exception> protected void ExtractDescriptions(Type type) { if (type == null) { throw new ArgumentNullException("type"); } Dictionary <string, MediaFormatAttribute> formatDescriptions = new Dictionary <string, MediaFormatAttribute>(); FieldInfo[] mediaFormatMembers = type.GetFields(BindingFlags.Public | BindingFlags.Static); foreach (FieldInfo mediaFormatField in mediaFormatMembers) { MediaFormatAttribute mediaFormatAttribute = (MediaFormatAttribute)Attribute.GetCustomAttribute(mediaFormatField, typeof(MediaFormatAttribute)); if ((mediaFormatAttribute != null) && (mediaFormatAttribute.Abstract == false)) { formatDescriptions[(string)mediaFormatField.GetValue(null)] = mediaFormatAttribute; } } foreach (KeyValuePair <string, MediaFormatAttribute> pair in formatDescriptions) { if (mCodecDescriptions.ContainsKey(pair.Key)) { _Log.Warn("The type {0} define media {1}, but it is ignored because it is already defined elsewhere.", type, pair.Key); continue; } mCodecDescriptions.Add(pair.Key, pair.Value); } }
/// <summary> /// Gets the possible media formats from URL. /// </summary> /// <param name="url"> /// A <see cref="String"/> that specify the URL where media is located. /// </param> /// <returns> /// A <see cref="IEnumerable{TMediaFormat}"/> enumerating all possible media formats given <paramref name="url"/>. This /// method could return an empty enumeration. /// </returns> /// <exception cref='ArgumentNullException'> /// Is thrown when an argument passed to a method is invalid because it is <see langword="null" /> . /// </exception> public IEnumerable <string> GetFormatsFromUrl(string url) { if (url == null) { throw new ArgumentNullException("url"); } List <string> mediaFormats = new List <string>(); foreach (KeyValuePair <string, MediaFormatAttribute> pair in mCodecDescriptions) { MediaFormatAttribute mediaFormat = pair.Value; if (mediaFormat.MatchPattern(url)) { mediaFormats.Add(pair.Key); } } return(mediaFormats); }