/// <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;
		}
Example #2
0
		/// <summary>
		/// Adds stream
		/// </summary>
		/// <param name="stream">stream</param>
		internal void AddStream(MediaStreamInfo stream) {
			streams.Add(stream);
		}