private static MediaFile CreateMediaFile(FWCreative creative, FWCreativeRendition rendition, FWAsset asset)
        {
            Uri uri;
            if (Uri.TryCreate(asset.Url, UriKind.RelativeOrAbsolute, out uri))
            {
                var mediaFile = new MediaFile();

                mediaFile.Value = uri;
                mediaFile.Width = rendition.Width;
                mediaFile.Height = rendition.Height;
                mediaFile.Codec = rendition.ContentType ?? asset.ContentType;
                mediaFile.Type = asset.MimeType;
                mediaFile.Id = asset.Id;
                mediaFile.Bitrate = (long)(asset.Bytes / creative.Duration.GetValueOrDefault(TimeSpan.FromSeconds(30)).TotalSeconds / 1000 * 8);
                if (rendition.CreativeApi != FWCreativeApi.none)
                {
                    mediaFile.ApiFramework = rendition.CreativeApi.ToString().ToUpperInvariant();
                }

                return mediaFile;
            }
            else return null;
        }
        internal static FWCreative LoadCreative(XElement element)
        {
            var result = new FWCreative();

            result.RedirectUrl = (string)element.Attribute("redirectUrl");
            result.AdUnit = (string)element.Attribute("adUnit");
            result.BaseUnit = (FWBaseUnit)Enum.Parse(typeof(FWBaseUnit), ((string)element.Attribute("baseUnit")).Replace("-", "_"), true);
            var durationString = (string)element.Attribute("duration");
            if (!string.IsNullOrEmpty(durationString))
            {
                result.Duration = TimeSpan.FromSeconds(float.Parse(durationString));
            }
            result.Id = (string)element.Attribute("creativeId");

            var creativeRenditionsXml = element.Element("creativeRenditions");
            if (creativeRenditionsXml != null)
            {
                foreach (var creativeRenditionXml in creativeRenditionsXml.Elements("creativeRendition"))
                {
                    result.CreativeRenditions.Add(LoadCreativeRendition(creativeRenditionXml));
                }
            }

            var parametersXml = element.Element("parameters");
            if (parametersXml != null)
            {
                foreach (var parameterXml in parametersXml.Elements("parameter"))
                {
                    result.Parameters.Add(LoadParameter(parameterXml));
                }
            }

            return result;
        }