/// <summary> /// Creates MediaStreamInfo from XmlDocument /// </summary> /// <param name="xmlDoc">XmlDocument containing data for creating MediaStreamInfo object.</param> /// <returns>list of MediaStreamInfo objects</returns> public static IList<MediaStreamInfo> CreateFromXml(XmlDocument xmlDoc) { IList<MediaStreamInfo> mediaStreamInfos = new List<MediaStreamInfo>(); if (xmlDoc.DocumentElement != null) { XmlNodeList streamNodes = xmlDoc.DocumentElement.SelectNodes(STREAMS_NODE + "/" + STREAM_NODE); if (streamNodes != null) { foreach (XmlNode streamNode in streamNodes) { if (streamNode != null && streamNode.Attributes != null) { int index = 0; if (streamNode.Attributes[INDEX] != null) { try { index = Int32.Parse(streamNode.Attributes[INDEX].InnerText, CultureInfo.InvariantCulture); } catch (Exception) { index = 0; } } var codec = streamNode.Attributes[CODEC_NAME] != null ? streamNode.Attributes[CODEC_NAME].InnerText : null; MediaStreamInfo.MediaStreamType type = MediaStreamInfo.MediaStreamType.None; if (streamNode.Attributes[CODEC_TYPE] != null) { switch (streamNode.Attributes[CODEC_TYPE].InnerText) { case CODEC_TYPE_VIDEO: type = MediaStreamInfo.MediaStreamType.Video; break; case CODEC_TYPE_AUDIO: type = MediaStreamInfo.MediaStreamType.Audio; break; } } if (codec != null && type != MediaStreamInfo.MediaStreamType.None) { var mediaStreamInfo = new MediaStreamInfo(index, codec, type); if (streamNode.Attributes[CODEC_LONG_NAME] != null) { mediaStreamInfo.CodecLongName = streamNode.Attributes[CODEC_LONG_NAME].InnerText; } if (streamNode.Attributes[START_TIME] != null) { try { mediaStreamInfo.StartTime = Decimal.Parse(streamNode.Attributes[START_TIME].InnerText, CultureInfo.InvariantCulture); } catch (Exception) { mediaStreamInfo.StartTime = 0; } } if (streamNode.Attributes[DURATION] != null) { try { mediaStreamInfo.Duration = Decimal.Parse(streamNode.Attributes[DURATION].InnerText, CultureInfo.InvariantCulture); } catch (Exception) { mediaStreamInfo.Duration = 0; } } if (streamNode.Attributes[BIT_RATE] != null) { try { mediaStreamInfo.BitRate = Int32.Parse(streamNode.Attributes[BIT_RATE].InnerText, CultureInfo.InvariantCulture); } catch (Exception) { mediaStreamInfo.BitRate = 0; } } //r_frame_rate="25/1" ||"50/2" if (streamNode.Attributes[R_FRAME_RATE] != null) { mediaStreamInfo.FrameRateStr = streamNode.Attributes[R_FRAME_RATE].InnerText; } // avg_frame_rate="1000/23" || "500/21" if (streamNode.Attributes[AVG_FRAME_RATE] != null) { mediaStreamInfo.AvgFrameRateStr = streamNode.Attributes[AVG_FRAME_RATE].InnerText; } #region Video specific if (streamNode.Attributes[WIDTH] != null) { try { mediaStreamInfo.VideoWidth = Int32.Parse(streamNode.Attributes[WIDTH].InnerText, CultureInfo.InvariantCulture); } catch (Exception) { mediaStreamInfo.VideoWidth = 0; } } if (streamNode.Attributes[HEIGHT] != null) { try { mediaStreamInfo.VideoHeight = Int32.Parse(streamNode.Attributes[HEIGHT].InnerText, CultureInfo.InvariantCulture); } catch (Exception) { mediaStreamInfo.VideoHeight = 0; } } // sample_aspect_ratio="136:135" || "1:1" if (streamNode.Attributes[SAMPLE_ASPECT_RATIO] != null) { mediaStreamInfo.VideoSampleAspectRatioStr = streamNode.Attributes[SAMPLE_ASPECT_RATIO].InnerText; } //display_aspect_ratio="16:9" if (streamNode.Attributes[DISPLAY_ASPECT_RATIO] != null) { mediaStreamInfo.VideoDisplayAspectRatioStr = streamNode.Attributes[DISPLAY_ASPECT_RATIO].InnerText; } #endregion #region Audio specific if (streamNode.Attributes[CHANNELS] != null) { try { mediaStreamInfo.AudioChannels = Int32.Parse(streamNode.Attributes[CHANNELS].InnerText); } catch (Exception) { mediaStreamInfo.AudioChannels = 0; } } if (streamNode.Attributes[SAMPLE_RATE] != null) { try { mediaStreamInfo.AudioSampleRate = Int32.Parse(streamNode.Attributes[SAMPLE_RATE].InnerText, CultureInfo.InvariantCulture); } catch (Exception) { mediaStreamInfo.AudioSampleRate = 0; } } #endregion mediaStreamInfos.Add(mediaStreamInfo); } } } } } return mediaStreamInfos; }
/// <summary> /// Adds stream /// </summary> /// <param name="stream">stream</param> internal void AddStream(MediaStreamInfo stream) { streams.Add(stream); }