Exemplo n.º 1
0
        /// <summary>
        /// Adds custom attributes to the quality level.
        /// </summary>
        /// <param name="reader">The xml reader.</param>
        /// <param name="qualityLevel">The quality level.</param>
        private static void AddCustomAttributes(XmlReader reader, QualityLevel qualityLevel)
        {
            if (!reader.IsEmptyElement)
            {
                while (reader.Read())
                {
                    if (reader.Name == "CustomAttributes" && reader.NodeType == XmlNodeType.Element)
                    {
                        while (reader.Read())
                        {
                            if ((reader.Name == "Attribute") && (reader.NodeType == XmlNodeType.Element))
                            {
                                string attribute = reader.GetAttribute("Name");

                                if (!string.IsNullOrEmpty(attribute))
                                {
                                    qualityLevel.AddCustomAttribute(attribute, reader.GetAttribute("Value"));
                                }
                            }

                            if ((reader.Name == "CustomAttributes") && (reader.NodeType == XmlNodeType.EndElement))
                            {
                                return;
                            }
                        }
                    }

                    if (reader.Name == "QualityLevel" && reader.NodeType == XmlNodeType.EndElement)
                    {
                        return;
                    }
                }
            }
        }
Exemplo n.º 2
0
 /// <summary>
 /// Adds attributes to the quality level.
 /// </summary>
 /// <param name="reader">The xml reader.</param>
 /// <param name="qualityLevel">The quality level.</param>
 private static void AddAttributes(XmlReader reader, QualityLevel qualityLevel)
 {
     if (reader.HasAttributes && reader.MoveToFirstAttribute())
     {
         do
         {
             qualityLevel.AddAttribute(reader.Name, reader.Value);
         }while (reader.MoveToNextAttribute());
         reader.MoveToElement();
     }
 }
Exemplo n.º 3
0
        /// <summary>
        /// Creates a clone instance of this QualityLevel object.
        /// </summary>
        /// <returns>A copy of the QualityLevel object.</returns>
        public QualityLevel Clone()
        {
            QualityLevel clone = new QualityLevel();

            foreach (KeyValuePair <string, string> attributeValuePair in this.Attributes)
            {
                clone.AddAttribute(attributeValuePair.Key, attributeValuePair.Value);
            }

            foreach (KeyValuePair <string, string> customAttributeValuePair in this.CustomAttributes)
            {
                clone.AddCustomAttribute(customAttributeValuePair.Key, customAttributeValuePair.Value);
            }

            return(clone);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Parses the manifest stream.
        /// </summary>
        /// <param name="manifestStream">The manifest stream being parsed.</param>
        private void ParseManifest(Stream manifestStream)
        {
            using (XmlReader reader = XmlReader.Create(manifestStream))
            {
                if (reader.Read() && reader.IsStartElement(ManifestSmoothStreamingMediaElement))
                {
                    int  majorVersion = reader.GetValueAsInt(ManifestMajorVersionAttribute).GetValueOrDefault();
                    int  minorVersion = reader.GetValueAsInt(ManifestMinorVersionAttribute).GetValueOrDefault();
                    bool isLive       = reader.GetValueAsBool(ManifestIsLiveAttribute).GetValueOrDefault();

                    int lookAheadFragmentCount = 0;
                    int dvrWindowLength        = 0;

                    if (isLive)
                    {
                        lookAheadFragmentCount = reader.GetValueAsInt(ManifestLookAheadFragmentCountAttribute).GetValueOrDefault();
                        dvrWindowLength        = reader.GetValueAsInt(ManifestDvrWindowLengthAttribute).GetValueOrDefault();
                    }
                    ulong  Timescale        = reader.GetValueAsULong(TimeScaleAttribute).GetValueOrDefault(TicksPerSecond);
                    ulong  manifestDuration = reader.GetValueAsULong(ManifestDurationAttribute).GetValueOrDefault();
                    Guid   protectionGuid   = Guid.Empty;
                    string protectionData   = string.Empty;

                    List <StreamInfo> streams = new List <StreamInfo>();

                    while (reader.Read())
                    {
                        if (reader.Name == ManifestProtectionElement && reader.NodeType == XmlNodeType.Element)
                        {
                            reader.Read();
                            if (reader.Name == ManifestProtectionHeaderElement && reader.NodeType == XmlNodeType.Element)
                            {
                                protectionGuid = new Guid(reader.GetValue(ManifestProtectionSystemIDElement));
                                protectionData = reader.ReadElementContentAsString();
                            }
                        }
                        if (reader.Name == ManifestStreamIndexElement && reader.NodeType == XmlNodeType.Element)
                        {
                            string type = reader.GetValue(ManifestStreamIndexTypeAttribute);

                            StreamInfo streamInfo = new StreamInfo(type);

                            AddAttributes(reader, streamInfo);

                            while (reader.Read())
                            {
                                if (reader.Name == ManifestStreamIndexElement && reader.NodeType == XmlNodeType.EndElement)
                                {
                                    break;
                                }

                                if ((reader.Name == "QualityLevel") && (reader.NodeType == XmlNodeType.Element))
                                {
                                    QualityLevel qualityLevel = new QualityLevel();

                                    AddAttributes(reader, qualityLevel);

                                    AddCustomAttributes(reader, qualityLevel);

                                    streamInfo.QualityLevels.Add(qualityLevel);
                                }

                                if ((reader.Name == "c") && (reader.NodeType == XmlNodeType.Element))
                                {
                                    int?   chunkId     = reader.GetValueAsInt("n");
                                    UInt64?time        = reader.GetValueAsUInt64("t");
                                    ulong? duration    = reader.GetValueAsULong("d");
                                    ulong? repetitions = reader.GetValueAsULong("r");

                                    for (ulong i = 0; i < (repetitions.HasValue ? repetitions.Value : 1); i++)
                                    {
                                        Chunk chunk = new Chunk(chunkId, i == 0 ? time : null, duration);

                                        if (((!reader.IsEmptyElement && reader.Read()) && (reader.IsStartElement("f") && reader.Read())) && (reader.NodeType == XmlNodeType.Text))
                                        {
                                            chunk.Value = reader.Value;
                                        }

                                        streamInfo.Chunks.Add(chunk);
                                    }
                                }
                            }

                            streams.Add(streamInfo);
                        }
                    }

                    streams.ToArray();

                    if (!isLive)
                    {
                        this.ManifestInfo = new ManifestInfo(majorVersion, minorVersion, manifestDuration, streams, protectionGuid, protectionData, Timescale);
                    }
                    else
                    {
                        this.ManifestInfo = new ManifestInfo(majorVersion, minorVersion, manifestDuration, isLive, lookAheadFragmentCount, dvrWindowLength, streams, protectionGuid, protectionData, Timescale);
                    }
                }
            }
        }