public PriorityCriteriaEnum CheckSupport(ICreativeSource AdSource, IAdTarget AdTarget) { if (!(AdTarget is HtmlElementAdTarget)) return PriorityCriteriaEnum.NotSupported; else return PriorityCriteriaEnum.Static; }
public virtual PriorityCriteriaEnum CheckSupport(ICreativeSource AdSource, IAdTarget AdTarget) { #if !WINDOWS_PHONE && !OOB if (AdTarget is HtmlElementAdTarget) { return(PriorityCriteriaEnum.NotSupported); } #endif if (AdSource.MimeType == null) { return(PriorityCriteriaEnum.NotSupported); } #if HTTP_ONLY if (!AdSource.MediaSource.StartsWith("http", StringComparison.OrdinalIgnoreCase)) { return(PriorityCriteriaEnum.NotSupported); } #endif switch (AdSource.MimeType.ToLower()) { case "video/mp4": case "video/x-ms-wmv": return(PriorityCriteriaEnum.Dynamic | PriorityCriteriaEnum.Native | PriorityCriteriaEnum.Progressive); default: return(PriorityCriteriaEnum.NotSupported); } }
public PriorityCriteriaEnum CheckSupport(ICreativeSource AdSource, IAdTarget AdTarget) { if (AdSource.MimeType == null) { return(PriorityCriteriaEnum.NotSupported); } switch (AdSource.MimeType.ToLower()) { case "application/x-shockwave-flash": if (HtmlPage.Document.GetElementById("FlashPlayer") != null) { return(PriorityCriteriaEnum.Dynamic | PriorityCriteriaEnum.Interactive); } else { return(PriorityCriteriaEnum.NotSupported); } case "video/mp4": case "video/x-flv": if (HtmlPage.Document.GetElementById("FlashPlayer") != null) { return(PriorityCriteriaEnum.Dynamic | (AdSource.IsStreaming ? PriorityCriteriaEnum.Adaptive : PriorityCriteriaEnum.Progressive)); } else { return(PriorityCriteriaEnum.NotSupported); } default: return(PriorityCriteriaEnum.NotSupported); } }
public IVpaid GetVpaidPlayer(ICreativeSource AdSource, IAdTarget AdTarget) { if (!(AdTarget is HtmlElementAdTarget)) throw new ArgumentException("Target must be of type HtmlElementAdTarget"); return new HtmlAdPlayer(AdSource, AdTarget as HtmlElementAdTarget); }
public virtual PriorityCriteriaEnum CheckSupport(ICreativeSource AdSource, IAdTarget AdTarget) { if (!IsScheduleClipEnabled) return PriorityCriteriaEnum.NotSupported; if (AdSource.MimeType == null) return PriorityCriteriaEnum.NotSupported; if (AdSource.Type != CreativeSourceType.Linear) return PriorityCriteriaEnum.NotSupported; if (AdTarget.TargetSource == null || AdTarget.TargetSource.Region != TargetRegions.VideoArea) return PriorityCriteriaEnum.NotSupported; if (!(player.ActiveMediaPlugin is IAdaptiveMediaPlugin) || !player.ActiveMediaPlugin.SupportsAdScheduling) return PriorityCriteriaEnum.NotSupported; #if HTTP_ONLY if (!AdSource.MediaSource.StartsWith("http", StringComparison.OrdinalIgnoreCase)) { return PriorityCriteriaEnum.NotSupported; } #endif switch (AdSource.MimeType.ToLower()) { case "video/mp4": case "video/x-ms-wmv": return PriorityCriteriaEnum.Dynamic | PriorityCriteriaEnum.Native | PriorityCriteriaEnum.Progressive | PriorityCriteriaEnum.InPlayer; case "text/xml": return PriorityCriteriaEnum.Dynamic | PriorityCriteriaEnum.Native | PriorityCriteriaEnum.Adaptive | PriorityCriteriaEnum.InPlayer; default: return PriorityCriteriaEnum.NotSupported; } }
/// <summary> /// Filters a list of creatives based on target dependencies. /// If one creative uses a target that has a dependency on another target, only permit the creative if the dependency target was used. /// </summary> /// <param name="Creatives">The list of creatives to filter.</param> /// <returns>The filtered list of creatives.</returns> protected override IEnumerable <Creative> GetAllowedCreatives(IEnumerable <Creative> Creatives) { var usedTargets = Creatives.OfType <VastCreative>().Select(c => c.ActiveCreative.Target.TargetSource).ToList(); foreach (var Creative in Creatives) { // only run creatives that have successfull dependency targets if (Creative is VastCreative) { var vastCreative = Creative as VastCreative; IAdTarget target = vastCreative.ActiveCreative.Target; bool dependencyFailure = false; foreach (var targetSource in target.TargetDependencies) { if (!usedTargets.Contains(targetSource)) { dependencyFailure = true; break; } } if (!dependencyFailure) { yield return(Creative); } } else { yield return(Creative); } } }
public XapAdPlayer(ICreativeSource AdSource, IAdTarget AdTarget) { this.AdSource = AdSource; this.Dimensions = AdSource.Dimensions; this.ExpandedDimensions = AdSource.ExpandedDimensions; this.Scalable = AdSource.IsScalable; this.Linear = (AdSource.Type == CreativeSourceType.Linear); }
public IVpaid GetVpaidPlayer(ICreativeSource AdSource, IAdTarget AdTarget) { if (!(AdTarget is HtmlElementAdTarget)) { throw new ArgumentException("Target must be of type HtmlElementAdTarget"); } return(new HtmlAdPlayer(AdSource, AdTarget as HtmlElementAdTarget)); }
public override PriorityCriteriaEnum CheckSupport(ICreativeSource AdSource, IAdTarget AdTarget) { var result = base.CheckSupport(AdSource, AdTarget); if (result != PriorityCriteriaEnum.NotSupported) { result = result | PriorityCriteriaEnum.Trump; // adding Trump to boost priority over the base class } return result; }
public ImageAdPlayer(ICreativeSource Source, IAdTarget Target, IMediaPlugin ActiveMediaPlugin) : base(Source.Dimensions, Source.IsScalable, Source.Type == CreativeSourceType.Linear) { this.ActiveMediaPlugin = ActiveMediaPlugin; AdTarget = Target; AdSource = Source; if (AdSource.ClickUrl != null) { this.NavigateUri = new Uri(AdSource.ClickUrl, UriKind.RelativeOrAbsolute); } }
public PriorityCriteriaEnum CheckSupport(ICreativeSource AdSource, IAdTarget AdTarget) { if (!(AdTarget is HtmlElementAdTarget)) { return(PriorityCriteriaEnum.NotSupported); } else { return(PriorityCriteriaEnum.Static); } }
public ProgressiveVideoAdPlayer(ICreativeSource AdSource, IAdTarget AdTarget, IMediaPlugin ActiveMediaPlugin) : base(AdSource.Dimensions, AdSource.IsScalable, AdSource.Type == CreativeSourceType.Linear) { this.ActiveMediaPlugin = ActiveMediaPlugin; this.AdSource = AdSource; this.AdTarget = AdTarget; if (AdSource.ClickUrl != null) { this.NavigateUri = new Uri(AdSource.ClickUrl, UriKind.RelativeOrAbsolute); } }
public AdaptiveVideoAdPlayer(ICreativeSource AdSource, IAdTarget AdTarget, IMediaPlugin ActiveMediaPlugin) : base(AdSource.Dimensions, AdSource.IsScalable, AdSource.Type == CreativeSourceType.Linear) { this.ActiveMediaPlugin = ActiveMediaPlugin; this.AdSource = AdSource; this.AdTarget = AdTarget; if (AdSource.ClickUrl != null) { this.NavigateUri = new Uri(AdSource.ClickUrl, UriKind.RelativeOrAbsolute); } }
internal AdClipLinearAdPlayer(ICreativeSource AdSource, IAdTarget AdTarget, IPlayer AdHost) : base(AdSource.Dimensions, AdSource.IsScalable, true) { this.AdSource = AdSource; this.AdTarget = AdTarget; this.ActiveMediaPlugin = AdHost.ActiveMediaPlugin; this.AdHost = AdHost; if (AdSource.ClickUrl != null) { this.NavigateUri = new Uri(AdSource.ClickUrl, UriKind.RelativeOrAbsolute); } }
public PriorityCriteriaEnum CheckSupport(ICreativeSource AdSource, IAdTarget AdTarget) { if (AdTarget is HtmlElementAdTarget) return PriorityCriteriaEnum.NotSupported; if (AdSource.MimeType == null) return PriorityCriteriaEnum.NotSupported; switch (AdSource.MimeType.ToLower()) { case "application/x-silverlight-app": return PriorityCriteriaEnum.Interactive | PriorityCriteriaEnum.Dynamic | PriorityCriteriaEnum.Native; default: return PriorityCriteriaEnum.NotSupported; } }
public ActiveCreative GetCompanionCreative(VastAdPod AdPod, VASTADInLine InlineAd, Companion_type Companion) { ICreativeSource PayloadSource = new CompanionSource(InlineAd, Companion); IAdTarget target = VastAdHandler.FindTarget(AdPod.AdUnit.Source, PayloadSource); if (target == null) { return(null); } else { return(GetCompanionCreative(PayloadSource, target)); } }
public ActiveCreative GetLinearCreative(VASTADInLine inline, VASTADInLineCreative Creative, VASTADInLineCreativeLinear linear, IAdSource AdSource) { //get the target. In this case because it is a linear ad, it will aways be the player's main adcontainer IAdTarget target = VastAdHandler.FindTarget(AdSource, new LinearSource(inline, null, linear, new VASTADWrapper[] { })); if (target == null) { return(null); } else { return(GetLinearCreative(linear, target, inline)); } }
public ActiveCreative GetNonLinearCreative(VASTADInLine InlineAd, VASTADInLineCreativeNonLinearAds nonLinears, NonLinear_type nl, IAdSource AdSource) { var PayloadSource = new NonLinearSource(InlineAd, nonLinears, nl); //get the target. In this case because it is a nonlinear ad, it will aways be the player's main adcontainer IAdTarget target = VastAdHandler.FindTarget(AdSource, PayloadSource); if (target == null) { return(null); } else { return(GetNonLinearCreative(PayloadSource, target)); } }
public virtual PriorityCriteriaEnum CheckSupport(ICreativeSource AdSource, IAdTarget AdTarget) { #if !WINDOWS_PHONE && !OOB if (AdTarget is HtmlElementAdTarget) return PriorityCriteriaEnum.NotSupported; #endif if (AdSource.MimeType == null) return PriorityCriteriaEnum.NotSupported; switch (AdSource.MimeType.ToLower()) { case "text/xml": return PriorityCriteriaEnum.Dynamic | PriorityCriteriaEnum.Native | PriorityCriteriaEnum.Adaptive; default: return PriorityCriteriaEnum.NotSupported; } }
public virtual PriorityCriteriaEnum CheckSupport(ICreativeSource AdSource, IAdTarget AdTarget) { #if !WINDOWS_PHONE && !OOB if (AdTarget is HtmlElementAdTarget) return PriorityCriteriaEnum.NotSupported; #endif if (AdSource.MimeType == null) return PriorityCriteriaEnum.NotSupported; switch (AdSource.MimeType.ToLower()) { case "image/jpg": case "image/jpeg": case "image/png": return PriorityCriteriaEnum.Native | PriorityCriteriaEnum.Static; default: return PriorityCriteriaEnum.NotSupported; } }
internal protected ActiveCreative GetCreative(ICreativeSource adSource, IAdTarget adTarget) { IVpaid adPlayer; var vPaidFactories = GetVpaidFactories().ToList(); do { var rankedVpaidFactories = from factory in vPaidFactories let rank = factory.CheckSupport(adSource, adTarget) where rank > PriorityCriteriaEnum.NotSupported orderby rank descending select factory; var playerFactory = rankedVpaidFactories.FirstOrDefault(); if (playerFactory == null) { return(null); } adPlayer = playerFactory.GetVpaidPlayer(adSource, adTarget); // handshake with the ad player to make sure the version of VAST is OK if (adPlayer == null || !VpaidController.Handshake(adPlayer)) { // the version is no good, remove the factory from the list and try again. vPaidFactories.Remove(playerFactory); if (!vPaidFactories.Any()) { return(null); } adPlayer = null; } } while (adPlayer == null); //put companion in target if (!adTarget.AddChild(adPlayer)) { return(null); } return(new ActiveCreative(adPlayer, adSource, adTarget)); }
public PriorityCriteriaEnum CheckSupport(ICreativeSource AdSource, IAdTarget AdTarget) { if (!IsScheduleClipEnabled) { return(PriorityCriteriaEnum.NotSupported); } if (AdSource.MimeType == null) { return(PriorityCriteriaEnum.NotSupported); } if (AdSource.Type != CreativeSourceType.Linear) { return(PriorityCriteriaEnum.NotSupported); } if (AdTarget.TargetSource == null || AdTarget.TargetSource.Region != TargetRegions.VideoArea) { return(PriorityCriteriaEnum.NotSupported); } if (!(player.ActiveMediaPlugin is IAdaptiveMediaPlugin) || !player.ActiveMediaPlugin.SupportsAdScheduling) { return(PriorityCriteriaEnum.NotSupported); } #if HTTP_ONLY if (!AdSource.MediaSource.StartsWith("http", StringComparison.OrdinalIgnoreCase)) { return(PriorityCriteriaEnum.NotSupported); } #endif switch (AdSource.MimeType.ToLower()) { case "video/mp4": case "video/x-ms-wmv": return(PriorityCriteriaEnum.Dynamic | PriorityCriteriaEnum.Native | PriorityCriteriaEnum.Progressive | PriorityCriteriaEnum.InPlayer); case "text/xml": return(PriorityCriteriaEnum.Dynamic | PriorityCriteriaEnum.Native | PriorityCriteriaEnum.Adaptive | PriorityCriteriaEnum.InPlayer); default: return(PriorityCriteriaEnum.NotSupported); } }
public PriorityCriteriaEnum CheckSupport(ICreativeSource AdSource, IAdTarget AdTarget) { if (AdTarget is HtmlElementAdTarget) { return(PriorityCriteriaEnum.NotSupported); } if (AdSource.MimeType == null) { return(PriorityCriteriaEnum.NotSupported); } switch (AdSource.MimeType.ToLower()) { case "application/x-silverlight-app": return(PriorityCriteriaEnum.Interactive | PriorityCriteriaEnum.Dynamic | PriorityCriteriaEnum.Native); default: return(PriorityCriteriaEnum.NotSupported); } }
public virtual PriorityCriteriaEnum CheckSupport(ICreativeSource AdSource, IAdTarget AdTarget) { #if !WINDOWS_PHONE && !OOB if (AdTarget is HtmlElementAdTarget) { return(PriorityCriteriaEnum.NotSupported); } #endif if (AdSource.MimeType == null) { return(PriorityCriteriaEnum.NotSupported); } switch (AdSource.MimeType.ToLower()) { case "text/xml": return(PriorityCriteriaEnum.Dynamic | PriorityCriteriaEnum.Native | PriorityCriteriaEnum.Adaptive); default: return(PriorityCriteriaEnum.NotSupported); } }
public FlashVideoAdPlayer(ICreativeSource Source, IAdTarget Target) { AdTarget = Target; AdSource = Source; this.SizeChanged += new SizeChangedEventHandler(FlashVideoAdPlayer_SizeChanged); StringBuilder script = new StringBuilder(); script.Append("function flashReady(){"); script.Append("if (adPlayer) adPlayer.OnReady();"); script.AppendLine("}"); script.AppendLine("var adPlayer;"); script.Append("function setPlayer(player){"); script.Append("adPlayer = player;"); script.AppendLine("}"); script.Append("function VPAIDAdLoaded(){"); script.Append("adPlayer.OnAdLoaded();"); script.AppendLine("}"); script.Append("function VPAIDAdStarted(){"); script.Append("adPlayer.OnAdStarted();"); script.AppendLine("}"); script.Append("function VPAIDAdStopped(){"); script.Append("adPlayer.OnAdStopped();"); script.AppendLine("}"); script.Append("function VPAIDAdVideoComplete(){"); script.Append("if (adPlayer) adPlayer.OnAdVideoComplete();"); script.AppendLine("}"); InjectScript(script.ToString()); HtmlPage.Window.Invoke("setPlayer", this); }
public virtual PriorityCriteriaEnum CheckSupport(ICreativeSource AdSource, IAdTarget AdTarget) { #if !WINDOWS_PHONE && !OOB if (AdTarget is HtmlElementAdTarget) return PriorityCriteriaEnum.NotSupported; #endif if (AdSource.MimeType == null) return PriorityCriteriaEnum.NotSupported; #if HTTP_ONLY if (!AdSource.MediaSource.StartsWith("http", StringComparison.OrdinalIgnoreCase)) { return PriorityCriteriaEnum.NotSupported; } #endif switch (AdSource.MimeType.ToLower()) { case "video/mp4": case "video/x-ms-wmv": return PriorityCriteriaEnum.Dynamic | PriorityCriteriaEnum.Native | PriorityCriteriaEnum.Progressive; default: return PriorityCriteriaEnum.NotSupported; } }
public PriorityCriteriaEnum CheckSupport(ICreativeSource AdSource, IAdTarget AdTarget) { if (AdSource.MimeType == null) return PriorityCriteriaEnum.NotSupported; switch (AdSource.MimeType.ToLower()) { case "application/x-shockwave-flash": if (HtmlPage.Document.GetElementById("FlashPlayer") != null) return PriorityCriteriaEnum.Dynamic | PriorityCriteriaEnum.Interactive; else return PriorityCriteriaEnum.NotSupported; case "video/mp4": case "video/x-flv": if (HtmlPage.Document.GetElementById("FlashPlayer") != null) { return PriorityCriteriaEnum.Dynamic | (AdSource.IsStreaming ? PriorityCriteriaEnum.Adaptive : PriorityCriteriaEnum.Progressive); } else return PriorityCriteriaEnum.NotSupported; default: return PriorityCriteriaEnum.NotSupported; } }
public virtual PriorityCriteriaEnum CheckSupport(ICreativeSource AdSource, IAdTarget AdTarget) { #if !WINDOWS_PHONE && !OOB if (AdTarget is HtmlElementAdTarget) { return(PriorityCriteriaEnum.NotSupported); } #endif if (AdSource.MimeType == null) { return(PriorityCriteriaEnum.NotSupported); } switch (AdSource.MimeType.ToLower()) { case "image/jpg": case "image/jpeg": case "image/png": return(PriorityCriteriaEnum.Native | PriorityCriteriaEnum.Static); default: return(PriorityCriteriaEnum.NotSupported); } }
public ActiveCreative(IVpaid Player, ICreativeSource Source, IAdTarget Target) { this.Player = Player; this.Source = Source; this.Target = Target; }
public override IVpaid GetVpaidPlayer(ICreativeSource AdSource, IAdTarget AdTarget) { return new AdClipLinearAdPlayerXbox(AdSource, AdTarget, player); }
public ActiveCreative GetCompanionCreative(ICreativeSource adSource, IAdTarget adTarget) { return(vastAdHandler.GetCreative(adSource, adTarget)); }
public ActiveCreative GetNonLinearCreative(ICreativeSource adSource, IAdTarget adTarget) { return(vastAdHandler.GetCreative(adSource, adTarget)); }
public IVpaid GetVpaidPlayer(ICreativeSource AdSource, IAdTarget AdTarget) { return(new AdClipLinearAdPlayer(AdSource, AdTarget, player)); }
public ActiveCreative GetLinearCreative(VASTADInLineCreativeLinear linear, IAdTarget adTarget, VASTADInLine ad, params VASTADWrapper[] wrappers) { IVpaid adPlayer; ICreativeSource adSource; var vPaidFactories = VastAdHandler.GetVpaidFactories().ToList(); do { // get a list of all eligible media files var mediaAdSources = linear.MediaFiles.ToDictionary(m => m, m => new LinearSource(ad, m, linear, wrappers)); var rankedMedia = (from mediaAdSource in mediaAdSources let vPaidFactoryAndPriority = vPaidFactories.ToDictionary(f => f, f => f.CheckSupport(mediaAdSource.Value, adTarget)) where vPaidFactoryAndPriority.Values.Any(v => v > PriorityCriteriaEnum.NotSupported) let BestVpaidFactoryAndPriority = vPaidFactoryAndPriority.OrderByDescending(kvp => kvp.Value).First() let rank = BestVpaidFactoryAndPriority.Value orderby rank descending select new { MediaFile = mediaAdSource.Key, AdSource = mediaAdSource.Value, VpaidFactory = BestVpaidFactoryAndPriority.Key, Rank = rank, }).ToList(); if (rankedMedia.Any()) { // get all media with the best rankings var topRank = rankedMedia.First().Rank; var bestMedia = rankedMedia.Where(m => m.Rank == topRank); // favor adaptive media var adaptiveMedia = bestMedia.Where(m => m.MediaFile.delivery == VASTADInLineCreativeLinearMediaFileDelivery.streaming); if (adaptiveMedia.Any()) bestMedia = adaptiveMedia; double targetBitrateKbps = (double)VastAdHandler.AdHost.PlaybackBitrate / 1024; if (targetBitrateKbps == 0.0) { // progressive videos won't have a bitrate. Therefore, target based on the one in the middle targetBitrateKbps = rankedMedia.Where(m => m.MediaFile.bitrate.ToInt64().HasValue).Average(m => m.MediaFile.bitrate.ToInt64().Value); } // get the media with the closest bitrate var bitrateMedia = bestMedia .Where(m => m.MediaFile.bitrate.ToInt64().HasValue) .GroupBy(m => Math.Abs(m.MediaFile.bitrate.ToInt64().Value)) .OrderBy(m => m.Key <= MaxBitrateKbps ? 0 : m.Key - MaxBitrateKbps) .ThenBy(m => Math.Abs(m.Key - targetBitrateKbps)) .FirstOrDefault(); if (bitrateMedia != null && bitrateMedia.Any()) bestMedia = bitrateMedia; //// get the media with the closest bitrate //var selectedMedia = bestMedia // .Where(m => !string.IsNullOrEmpty(m.MediaFile.bitrate)) // .OrderBy(m => Math.Abs(long.Parse(m.MediaFile.bitrate) - VastAdHandler.AdHost.PlaybackBitrate)) // .FirstOrDefault(); // get the media with the closest size var sizedMedia = from m in bestMedia where m.MediaFile.height.ToInt64().HasValue && m.MediaFile.width.ToInt64().HasValue let x = VastAdHandler.AdHost.VideoArea.ActualHeight - m.MediaFile.height.ToInt64().Value let y = VastAdHandler.AdHost.VideoArea.ActualWidth - m.MediaFile.width.ToInt64().Value let delta = x + y orderby delta select new { Media = m, DeltaX = x, DeltaY = y }; // try to get the one with the closest size but both dimensions are within the current size var selectedMedia = sizedMedia.Where(sm => sm.DeltaX >= 0 && sm.DeltaY >= 0).Select(sm => sm.Media).FirstOrDefault(); if (selectedMedia == null) // couldn't find one, instead get one with the closest size where only one dimension is over the current size selectedMedia = sizedMedia.Where(sm => sm.DeltaX >= 0 || sm.DeltaY >= 0).Select(sm => sm.Media).FirstOrDefault(); if (selectedMedia == null) // couldn't find one, instead get one with the closest size selectedMedia = sizedMedia.Select(sm => sm.Media).LastOrDefault(); // see if there were any bitrates, if not grab which ever one was first in the VAST file if (selectedMedia == null) selectedMedia = bestMedia.First(); //finally, get the ad player adSource = selectedMedia.AdSource; adPlayer = selectedMedia.VpaidFactory.GetVpaidPlayer(adSource, adTarget); if (adPlayer == null) { //Log.Output(OutputType.Error, "Error - cannot find player to support video ad content. "); // this should never happen and is the result of a bad VPaid plugin. throw new Exception("VpaidFactory agreed to accept AdSource and then returned null during call to GetVPaidPlugin."); } // handshake with the ad player to make sure the version of VAST is OK if (adPlayer == null || !vastAdHandler.VpaidController.Handshake(adPlayer)) { // the version is no good, remove the factory from the list and try again. vPaidFactories.Remove(selectedMedia.VpaidFactory); if (!vPaidFactories.Any()) { return null; } adPlayer = null; } } else { return null; } } while (adPlayer == null); //put video in target if (!adTarget.AddChild(adPlayer)) { return null; } return new ActiveCreative(adPlayer, adSource, adTarget); }
internal protected ActiveCreative GetCreative(ICreativeSource adSource, IAdTarget adTarget) { IVpaid adPlayer; var vPaidFactories = GetVpaidFactories().ToList(); do { var rankedVpaidFactories = from factory in vPaidFactories let rank = factory.CheckSupport(adSource, adTarget) where rank > PriorityCriteriaEnum.NotSupported orderby rank descending select factory; var playerFactory = rankedVpaidFactories.FirstOrDefault(); if (playerFactory == null) return null; adPlayer = playerFactory.GetVpaidPlayer(adSource, adTarget); // handshake with the ad player to make sure the version of VAST is OK if (adPlayer == null || !VpaidController.Handshake(adPlayer)) { // the version is no good, remove the factory from the list and try again. vPaidFactories.Remove(playerFactory); if (!vPaidFactories.Any()) { return null; } adPlayer = null; } } while (adPlayer == null); //put companion in target if (!adTarget.AddChild(adPlayer)) { return null; } return new ActiveCreative(adPlayer, adSource, adTarget); }
internal ImageAdPlayerXbox(ICreativeSource Source, IAdTarget Target, IDvrPlayer Host) : base(Source, Target, Host.ActiveMediaPlugin) { AdHost = Host; }
internal AdClipLinearAdPlayerXbox(ICreativeSource AdSource, IAdTarget AdTarget, IPlayer AdHost) : base(AdSource, AdTarget, AdHost) { ((Microsoft.SilverlightMediaFramework.Core.SMFPlayer)AdHost).PreBack += new EventHandler(OnAdUserClose); }
public virtual IVpaid GetVpaidPlayer(ICreativeSource AdSource, IAdTarget AdTarget) { return(new AdaptiveVideoAdPlayer(AdSource, AdTarget, player.ActiveMediaPlugin)); }
public IVpaid GetVpaidPlayer(ICreativeSource AdSource, IAdTarget AdTarget) { return new FlashVideoAdPlayer(AdSource, AdTarget as HtmlElementAdTarget); }
public IVpaid GetVpaidPlayer(ICreativeSource AdSource, IAdTarget AdTarget) { return new XapAdPlayer(AdSource, AdTarget); }
public ActiveCreative GetCompanionCreative(ICreativeSource adSource, IAdTarget adTarget) { return vastAdHandler.GetCreative(adSource, adTarget); }
public ActiveCreative GetNonLinearCreative(ICreativeSource adSource, IAdTarget adTarget) { return vastAdHandler.GetCreative(adSource, adTarget); }
public override IVpaid GetVpaidPlayer(ICreativeSource AdSource, IAdTarget AdTarget) { return new AdaptiveVideoAdPlayerXbox(AdSource, AdTarget, player as IDvrPlayer); }
public IVpaid GetVpaidPlayer(ICreativeSource AdSource, IAdTarget AdTarget) { return(new FlashVideoAdPlayer(AdSource, AdTarget as HtmlElementAdTarget)); }
public virtual IVpaid GetVpaidPlayer(ICreativeSource AdSource, IAdTarget AdTarget) { return new AdClipLinearAdPlayer(AdSource, AdTarget, player); }
public ActiveCreative GetLinearCreative(VASTADInLineCreativeLinear linear, IAdTarget adTarget, VASTADInLine ad, params VASTADWrapper[] wrappers) { IVpaid adPlayer; ICreativeSource adSource; var vPaidFactories = VastAdHandler.GetVpaidFactories().ToList(); do { // get a list of all eligible media files var mediaAdSources = linear.MediaFiles.ToDictionary(m => m, m => new LinearSource(ad, m, linear, wrappers)); var rankedMedia = (from mediaAdSource in mediaAdSources let vPaidFactoryAndPriority = vPaidFactories.ToDictionary(f => f, f => f.CheckSupport(mediaAdSource.Value, adTarget)) where vPaidFactoryAndPriority.Values.Any(v => v > PriorityCriteriaEnum.NotSupported) let BestVpaidFactoryAndPriority = vPaidFactoryAndPriority.OrderByDescending(kvp => kvp.Value).First() let rank = BestVpaidFactoryAndPriority.Value orderby rank descending select new { MediaFile = mediaAdSource.Key, AdSource = mediaAdSource.Value, VpaidFactory = BestVpaidFactoryAndPriority.Key, Rank = rank, }).ToList(); if (rankedMedia.Any()) { // get all media with the best rankings var topRank = rankedMedia.First().Rank; var bestMedia = rankedMedia.Where(m => m.Rank == topRank); // favor adaptive media var adaptiveMedia = bestMedia.Where(m => m.MediaFile.delivery == VASTADInLineCreativeLinearMediaFileDelivery.streaming); if (adaptiveMedia.Any()) { bestMedia = adaptiveMedia; } double targetBitrateKbps = (double)VastAdHandler.AdHost.PlaybackBitrate / 1024; if (targetBitrateKbps == 0.0) { // progressive videos won't have a bitrate. Therefore, target based on the one in the middle targetBitrateKbps = rankedMedia.Where(m => m.MediaFile.bitrate.ToInt64().HasValue).Average(m => m.MediaFile.bitrate.ToInt64().Value); } // get the media with the closest bitrate var bitrateMedia = bestMedia .Where(m => m.MediaFile.bitrate.ToInt64().HasValue) .GroupBy(m => Math.Abs(m.MediaFile.bitrate.ToInt64().Value)) .OrderBy(m => m.Key <= MaxBitrateKbps ? 0 : m.Key - MaxBitrateKbps) .ThenBy(m => Math.Abs(m.Key - targetBitrateKbps)) .FirstOrDefault(); if (bitrateMedia != null && bitrateMedia.Any()) { bestMedia = bitrateMedia; } //// get the media with the closest bitrate //var selectedMedia = bestMedia // .Where(m => !string.IsNullOrEmpty(m.MediaFile.bitrate)) // .OrderBy(m => Math.Abs(long.Parse(m.MediaFile.bitrate) - VastAdHandler.AdHost.PlaybackBitrate)) // .FirstOrDefault(); // get the media with the closest size var sizedMedia = from m in bestMedia where m.MediaFile.height.ToInt64().HasValue&& m.MediaFile.width.ToInt64().HasValue let x = VastAdHandler.AdHost.VideoArea.ActualHeight - m.MediaFile.height.ToInt64().Value let y = VastAdHandler.AdHost.VideoArea.ActualWidth - m.MediaFile.width.ToInt64().Value let delta = x + y orderby delta select new { Media = m, DeltaX = x, DeltaY = y }; // try to get the one with the closest size but both dimensions are within the current size var selectedMedia = sizedMedia.Where(sm => sm.DeltaX >= 0 && sm.DeltaY >= 0).Select(sm => sm.Media).FirstOrDefault(); if (selectedMedia == null) // couldn't find one, instead get one with the closest size where only one dimension is over the current size { selectedMedia = sizedMedia.Where(sm => sm.DeltaX >= 0 || sm.DeltaY >= 0).Select(sm => sm.Media).FirstOrDefault(); } if (selectedMedia == null) // couldn't find one, instead get one with the closest size { selectedMedia = sizedMedia.Select(sm => sm.Media).LastOrDefault(); } // see if there were any bitrates, if not grab which ever one was first in the VAST file if (selectedMedia == null) { selectedMedia = bestMedia.First(); } //finally, get the ad player adSource = selectedMedia.AdSource; adPlayer = selectedMedia.VpaidFactory.GetVpaidPlayer(adSource, adTarget); if (adPlayer == null) { //Log.Output(OutputType.Error, "Error - cannot find player to support video ad content. "); // this should never happen and is the result of a bad VPaid plugin. throw new Exception("VpaidFactory agreed to accept AdSource and then returned null during call to GetVPaidPlugin."); } // handshake with the ad player to make sure the version of VAST is OK if (adPlayer == null || !vastAdHandler.VpaidController.Handshake(adPlayer)) { // the version is no good, remove the factory from the list and try again. vPaidFactories.Remove(selectedMedia.VpaidFactory); if (!vPaidFactories.Any()) { return(null); } adPlayer = null; } } else { return(null); } } while (adPlayer == null); //put video in target if (!adTarget.AddChild(adPlayer)) { return(null); } return(new ActiveCreative(adPlayer, adSource, adTarget)); }
public IVpaid GetVpaidPlayer(ICreativeSource AdSource, IAdTarget AdTarget) { return(new XapAdPlayer(AdSource, AdTarget)); }
public virtual IVpaid GetVpaidPlayer(ICreativeSource AdSource, IAdTarget AdTarget) { return new ProgressiveVideoAdPlayer(AdSource, AdTarget, player.ActiveMediaPlugin); }
ActiveCreative GetLinearCreative(IAdTarget adTarget, AdPackage pkgElement, bool addToTarget) { IVpaid adPlayer = null; ICreativeSource adSource = null ; var vPaidFactories = AdHandler.GetVpaidFactories().ToList(); do { // get a list of all eligible media files var mediaAdSources = pkgElement.VideoResources.ToDictionary( m => m as VideoResource, m => new AdCreativeSource(pkgElement, m)); var rankedMedia = (from mediaAdSource in mediaAdSources let vPaidFactoryAndPriority = vPaidFactories.ToDictionary(f => f, f => f.CheckSupport(mediaAdSource.Value, adTarget)) where vPaidFactoryAndPriority.Values.Any(v => v > PriorityCriteriaEnum.NotSupported) let BestVpaidFactoryAndPriority = vPaidFactoryAndPriority.OrderByDescending(kvp => kvp.Value).First() let rank = BestVpaidFactoryAndPriority.Value orderby rank descending select new { MediaFile = mediaAdSource.Key, AdSource = mediaAdSource.Value, VpaidFactory = BestVpaidFactoryAndPriority.Key, Rank = rank, }).ToList(); if (rankedMedia.Any()) { // get all media with the best rankings var topRank = rankedMedia.First().Rank; var bestMedia = rankedMedia.Where(m => m.Rank == topRank); // favor adaptive media if IsSmoothEnabled flag is set. Default is true. var adaptiveMedia = bestMedia.Where(m => m.AdSource.IsStreaming); var nonAdaptiveMedia = bestMedia.Except(adaptiveMedia); if (AdHandler.IsSmoothEnabled) { if (adaptiveMedia.Any()) bestMedia = adaptiveMedia; } else { if (nonAdaptiveMedia.Any()) bestMedia = nonAdaptiveMedia; } double targetBitrateKbps = (double)AdHandler.AdHost.PlaybackBitrate / 1024; if (targetBitrateKbps == 0.0) { // progressive videos won't have a bitrate. Therefore, target based on the one in the middle targetBitrateKbps = rankedMedia.Average(m => m.MediaFile.Bitrate); } // get the media with the closest bitrate var bitrateMedia = bestMedia .GroupBy(m => Math.Abs(m.MediaFile.Bitrate)) .OrderBy(m => m.Key <= AdHandler.MaxBitrateKbps ? 0 : m.Key - AdHandler.MaxBitrateKbps) .ThenBy(m => Math.Abs(m.Key - targetBitrateKbps)) .FirstOrDefault(); if (bitrateMedia != null && bitrateMedia.Any()) bestMedia = bitrateMedia; // get the media with the closest size var sizedMedia = from m in bestMedia let x = AdHandler.AdHost.VideoArea.ActualHeight - m.MediaFile.Height let y = AdHandler.AdHost.VideoArea.ActualWidth - m.MediaFile.Width let delta = x + y orderby delta select new { Media = m, DeltaX = x, DeltaY = y }; // try to get the one with the closest size but both dimensions are within the current size var selectedMedia = sizedMedia.Where(sm => sm.DeltaX >= 0 && sm.DeltaY >= 0).Select(sm => sm.Media).FirstOrDefault(); if (selectedMedia == null) // couldn't find one, instead get one with the closest size where only one dimension is over the current size selectedMedia = sizedMedia.Where(sm => sm.DeltaX >= 0 || sm.DeltaY >= 0).Select(sm => sm.Media).FirstOrDefault(); if (selectedMedia == null) // couldn't find one, instead get one with the closest size selectedMedia = sizedMedia.Select(sm => sm.Media).LastOrDefault(); // see if there were any bitrates, if not grab which ever one was first if (selectedMedia == null) selectedMedia = bestMedia.First(); //finally, get the ad player adSource = selectedMedia.AdSource; adPlayer = selectedMedia.VpaidFactory.GetVpaidPlayer(adSource, adTarget); if (adPlayer == null) { //Log.Output(OutputType.Error, "Error - cannot find player to support video ad content. "); // this should never happen and is the result of a bad VPaid plugin. throw new Exception("VpaidFactory agreed to accept AdSource and then returned null during call to GetVPaidPlugin."); } // handshake with the ad player to make sure the version of VPAID is OK if (adPlayer == null || !adHandler.VpaidController.Handshake(adPlayer)) { // the version is no good, remove the factory from the list and try again. vPaidFactories.Remove(selectedMedia.VpaidFactory); if (!vPaidFactories.Any()) { return null; } adPlayer = null; } } else { return null; } } while (adPlayer == null); if (addToTarget) { //put video in target if (!adTarget.AddChild(adPlayer)) { return null; } } return new ActiveCreative(adPlayer, adSource, adTarget); }
internal ProgressiveVideoAdPlayerXbox(ICreativeSource AdSource, IAdTarget AdTarget, IDvrPlayer AdHost) : base(AdSource, AdTarget, AdHost.ActiveMediaPlugin) { this.AdHost = AdHost; ((Microsoft.SilverlightMediaFramework.Core.SMFPlayer)AdHost).PreBack += new EventHandler(OnAdUserClose); }