コード例 #1
0
 public PriorityCriteriaEnum CheckSupport(ICreativeSource AdSource, IAdTarget AdTarget)
 {
     if (!(AdTarget is HtmlElementAdTarget)) 
         return PriorityCriteriaEnum.NotSupported;
     else
         return PriorityCriteriaEnum.Static;
 }
コード例 #2
0
        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);
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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;
            }
        }
コード例 #6
0
        /// <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);
 }
コード例 #8
0
 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);
 }
コード例 #9
0
        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));
        }
コード例 #10
0
 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;
 }
コード例 #11
0
 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);
     }
 }
コード例 #12
0
 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);
     }
 }
コード例 #13
0
 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);
     }
 }
コード例 #17
0
 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;
            }
        }
コード例 #23
0
        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;
            }
        }
コード例 #24
0
        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 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);
        }
コード例 #30
0
        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;
 }
コード例 #34
0
 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);
        }
コード例 #39
0
        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);
        }
コード例 #40
0
 internal ImageAdPlayerXbox(ICreativeSource Source, IAdTarget Target, IDvrPlayer Host)
     : base(Source, Target, Host.ActiveMediaPlugin)
 {
     AdHost = Host;
 }
コード例 #41
0
 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);
 }
コード例 #47
0
 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));
 }
コード例 #49
0
 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));
 }
コード例 #52
0
 public virtual IVpaid GetVpaidPlayer(ICreativeSource AdSource, IAdTarget AdTarget)
 {
     return new ProgressiveVideoAdPlayer(AdSource, AdTarget, player.ActiveMediaPlugin);
 }
コード例 #53
0
        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);
        }
コード例 #54
0
 public ActiveCreative(IVpaid Player, ICreativeSource Source, IAdTarget Target)
 {
     this.Player = Player;
     this.Source = Source;
     this.Target = Target;
 }
コード例 #55
0
 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);
 }