internal static async Task <IEnumerable <AssetFileMetadata> > ParseAssetFileMetadataAsync(Uri assetFileMetadataUri, IRetryPolicy retryPolicy, CancellationToken cancellationToken)
        {
            IList <AssetFileMetadata> assetFileMetadataList = new List <AssetFileMetadata>();

            try
            {
                using (var assetFileMetadataStream = new MemoryStream())
                {
                    CloudBlockBlob blob = new CloudBlockBlob(assetFileMetadataUri);
                    await blob.DownloadToStreamAsync(assetFileMetadataStream, null, new BlobRequestOptions { RetryPolicy = retryPolicy }, null, cancellationToken).ConfigureAwait(false);

                    assetFileMetadataStream.Seek(0, SeekOrigin.Begin);

                    XElement root = XElement.Load(assetFileMetadataStream);
                    foreach (XElement assetFileElement in root.Elements())
                    {
                        assetFileMetadataList.Add(AssetFileMetadata.Load(assetFileElement));
                    }
                }
            }
            catch
            {
            }

            return(assetFileMetadataList);
        }
        internal static AssetFileMetadata Load(XElement assetFileElement)
        {
            AssetFileMetadata assetFileMetadata = new AssetFileMetadata();

            assetFileMetadata.Name     = assetFileElement.GetAttributeOrDefault(AssetMetadataParser.NameAttributeName);
            assetFileMetadata.Size     = assetFileElement.GetAttributeAsLongOrDefault(AssetMetadataParser.SizeAttributeName);
            assetFileMetadata.Duration = assetFileElement.GetAttributeAsTimeSpanOrDefault(AssetMetadataParser.DurationAttributeName);

            assetFileMetadata.Sources     = ParseSources(assetFileElement.Element(AssetMetadataParser.SourcesElementName));
            assetFileMetadata.VideoTracks = ParseVideoTracks(assetFileElement.Element(AssetMetadataParser.VideoTracksElementName));
            assetFileMetadata.AudioTracks = ParseAudioTracks(assetFileElement.Element(AssetMetadataParser.AudioTracksElementName));

            return(assetFileMetadata);
        }