private void PreparePostRolls() { PostRoll = null; if (player.ActiveMediaPlugin != null && player.ActiveMediaPlugin.Duration != TimeSpan.Zero) { var duration = player.ActiveMediaPlugin.Duration; // save this for the MediaEnded event var scheduledPostRoll = ScheduledAds.FirstOrDefault(a => ((PackageAdTrigger)a.Trigger).StartTime == duration); if (scheduledPostRoll != null) { CleanupScheduledAd(scheduledPostRoll); PostRoll = scheduledPostRoll.Trigger as PackageAdTrigger; player.ActiveMediaPlugin.MediaEnded += ActiveMediaPlugin_MediaEnded; } } }
void player_ContentChanged(object sender, EventArgs e) { pendingMediaSource = null; PlayWhenReady = false; PostRoll = null; adSchedule = null; CleanupScheduledAds(); if (player.ActiveMediaPlugin != null) { Status = SchedulingStatus.Downloading; // block the player from starting. We need to get a video manifest first in case there is a preroll. BlockPlayback(); System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() => { object adData = null; // Disable warning on using freewheel and microsoft keys #pragma warning disable 618 if (player.ContentMetadata.ContainsKey(Key_FreeWheelUrl)) { adData = player.ContentMetadata[Key_FreeWheelUrl]; } if (player.ContentMetadata.ContainsKey(Key_MicrosoftUrl)) { adData = player.ContentMetadata[Key_MicrosoftUrl]; } #pragma warning restore 618 if (player.ContentMetadata.ContainsKey(Key_AdUrl)) { adData = player.ContentMetadata[Key_AdUrl]; } if (adData != null) { if (adData is String || adData is Stream) { try { if (adData is String) { string uri = adData as String; if (Uri.IsWellFormedUriString(uri, UriKind.RelativeOrAbsolute) == false) { uri = Uri.EscapeUriString(uri); } AdManager.GetSchedule(uri, ScheduleDownloadedHandler); } else if (adData is Stream) { AdManager.GetSchedule(adData as Stream, ScheduleDownloadedHandler); } } catch (Exception ex) { HandleManifestDownloadFailed(ex); } } else { SendLogEntry("UAC Metadata type is not supported", Microsoft.SilverlightMediaFramework.Plugins.Primitives.LogLevel.Information, "Skipping UAC ad scheduling"); } } else { if (AutoPlay || PlayWhenReady) ReleasePlayback(); Status = SchedulingStatus.Failed; SendLogEntry("UAC Metadata not found", Microsoft.SilverlightMediaFramework.Plugins.Primitives.LogLevel.Information, "Skipping UAC ad scheduling"); return; } }); } else { Status = SchedulingStatus.Disabled; } }
void PlayPostRoll() { if (PostRoll != null) { // play postroll var scheduledAd = player.ScheduleAdTrigger(PostRoll, null); ScheduledAds.Add(scheduledAd); scheduledAd.Deactivated += scheduledAd_Deactivated; PostRoll = null; } }
void IPlugin.Unload() { try { // clean up all scheduled ads CleanupScheduledAds(); PostRoll = null; ScheduledAds = null; // disconnect the player if (player != null) { player.ContentChanged -= new EventHandler(player_ContentChanged); player = null; } isLoaded = false; if (PluginUnloaded != null) PluginUnloaded(this); } catch (Exception ex) { if (PluginUnloadFailed != null) PluginUnloadFailed(this, ex); } }