Order Now AdSolution Sign Up | Login » Bits on the Run Sign Up | Login »

Forums

/

Using OVA for a Custom Player

18 replies [Last post]
Reply

Hello,

I'm trying to implement OVA on our Custom Video Player.
I have read documentation & Plugin implementation for JWPlayer / Flowplayer.

Actually, our player can fetch videos from our VideoServer, and user can navigate from one video to an other one.

Our AdServer is configure to server data ( preroll, overlay..) depending on the video. To select the good data, we have to push custom parameters to the AdServer like "Program Code, User language, Custom Data..". What is the best way to push custom parameters ?

Also, the goal is to make a VAST request when user request a new video.
To do that, do I have to initialize again the VASTControler, or do I have to do an other call to the VASTControler.load function ?

Regards,
Thomas.

Reply

Hi Thomas,

At the moment the best approach is to completely re-initialise the VASTController on each new video.

I'm in the process of reworking the framework slightly so that you can initialise the VASTController once and ask it to do the ad requests "on demand" and "just in time" for each new video play. But that change is a few weeks away from release.

On the custom data, that's completely possible, but can I first ask - what type of connector are you using to make the ad call? Config wise are you doing something like:

"type": "direct",
"tag": "your-ad-server-url-in-here"

or are you using OpenX or some other type of known ad server?

Paul

Reply

PS: If it helps, you'll find a little more doc on using the framework here:

http://developer.longtailvideo.com/ova/wiki/OvaOnDemandCustomPlayer

Paul

Reply

Thanks for your reply,

I'm using an AdTech server, is that a connector ?

Also, I have an other question.
If I'm doing an new initialization of the VASTController on each new video. Do I have to add the "main" video to the stream before initialization ?
After that, I have to find a way to push parameters to the VAST request ?

If it can work like that, it's ok for me.

I'm reading documentation : OvaOnDemandCustomPlayer.
Really thanks for your fast reply !

Thomas.

Reply

I'm looking : http://www.longtailvideo.com/support/open-video-ads/13053/adtech-ova-configuration-guide

I think many answers are in this document.

Thanks for your help.

Reply

Hi Thomas,

On customising the AdTech request to add in extra parameters - I have a guide that may help:

http://www.longtailvideo.com/support/open-video-ads/13053/adtech-ova-configuration-guide

Would you mind reading that and let me know if that gives you what you need?

On the question about adding in the show clip before re-initialising the VASTController, to be honest since you are doing this a clip at a time it's not really required.

All you really want to do is give OVA a configuration for a pre-roll, initialise the VASTController, get it to load up the ad and tell you when it has it, then you can manage the individual show clip and the ad clip yourself... does that make sense?

Paul

Reply

Hi Paul,
Thanks for your help.

I failed to build a valid request to AdTech using the default requestTemplate. So I have overload the requestTemplate..
Actually, AdTech need a "vidAS" parameter to know the AdType : preroll, overlay..
An other point, vidAS need to be set with "pre_roll" and not "pre-roll".
Regarding this point, I'm not using the "position" parameter in AdSlot definition but only "zone".
Inside the AdSlot definition, I would liked to see a "key" property, but this is only available inside AdServer definition.

To sum up my point of view.
OVA is really useful. I haven't build a VAST parser, "getStreamToPlay" form VideoAd is helpful too.
The processTimeEvent function on VASTController abstract the "event" tracking system, but the "associateStreamIndex" parameter isn't easy to use. I'm not working with StreamSequence but only with VideoAdServingTemplate.. maybe the first parameter should be a VideoAd.

Other points that seemed to me difficult are the Scheduling & Playist items.
Because I have build my own Playlist concept & my own Player, I don't see this necessary. It's more a help for JWPlayer & Flowplayer, but maybe I'm wrong.

Right now, prerolls are okay, I have to work with overlay shortly..

I'll be back soon ;)

Thomas.

Reply

Hi.. thanks for the feedback - that's very useful.

It's definitely a fair comment about associateStreamIndex being difficult to use - I've been thinking the same recently.

Just following up on the "key" on the AdSlot point - just wondering - what sort of "key" would you expect to see in that property on the AdSlot?

Paul

Reply

Hi Paul,

The "key" property that I'm expected to see in AdSlot is something that AdTech - can -expect to see when doing a VAST request.
It's a method to select a specific "preroll" (or item) inside a campaign.

Placement + Campaign -> "zone".
But for a specific Placement + Campaign, you could see more than one "preroll". The "key" system is a way to select a specific preroll.
Because it's a data that is directly linked to "preroll", I think that "key" property must be in the AdSlot configuration.

Also,
I'm looking for design customization, so I'm reading the Overlay documentation ( http://www.longtailvideo.com/support/open-video-ads/ova-for-jw-player-5/13214/configuring-overlay-ad... ).
Do you have any other recommandation to customize the overlay with a custom player ?

Thanks for your help.
Thomas.

Reply

Regarding the customization part.
Do you know a way to inject our custom "AdNoticeGraphicsManager" ?

Actually, we want to be able to add a high custom Countdown, that contains specific graphic datas like other Sprite.

Regards,
Thomas.

Reply

Hi,

I think probably the best way to do that is to just configure OVA to not display an ad notice at all and then just implement your AdNoticeGraphicsManager outside of OVA.

Since you need to feed in the time information to OVA anyway telling it how far the ad is through playback, you might as well just use that same information that you pass OVA to control your AdNoticeGraphicsManager outside of OVA.

Paul

Reply

I understand, you right this is the best way.
Thanks for your help.

Reply

Hi Paul,

I'm working with Overlay.
Actually, I'm using "direct" type with specific apiAddress and not AdTech type.
I have define two AdSlot, one for "pre-roll" & the other one for "overlay". Both are using diferente apiAdress.

After calling the load function on VASTController. When the Template is loaded, I can find linearVideoAd & nonLinearVideoAd that corresponding to the pre-roll & overlay. To do that, I'm parsing the "template.ads" array and check the VideoAd.isLinear & VideoAd.isNonLinear.

First of all, this is not user-friendly, maybe an other simple way exists : template.getVideoAdUsingPosition ("overlay") ?

Secondly, how can I launch an overlay ? I can get the Ressource URL using "VideoAd ( event.template.ads[i] ).firstNonLinearVideoAd.url.url" and display it by myself, but I'm not sure that is a good things.

Do you know a simple way to display nonLineraVideoAd ? I think the VASTController.enableNonLinearAdDisplay function is a good method.
After display the overlay, I have to track the events. If the overlay is directly display by OVA, I think OVA can manage the tracking events.

Thanks for all Paul,
If you need other feed back, let me know.

Reply

Hi Thomas,

So in terms of overlays, you have to do very little actually because the OVA framework takes control of the display of overlays, the processing of click throughs and all click tracking.

To that end, pretty much scrap everything you are doing on that and start again.

Here's what you need to do:

1. Tell the OVA Framework to enable the "display" of non-linear advertising by passing it the required display information.

A typical bit of code to enable non-linear ads with OVA is as follows:

_vastController.enableNonLinearAdDisplay(
       new DisplayProperties(
            this,
            getPlayerWidth(),
            getPlayerHeight(),
            _vastController.stageDimensions.withControlsPaddingBottom,
            -1,
            -1,
            getLinearHeightAllowanceForControlBar(),
            getNonLinearHeightAllowanceForControlBar(),
            getDisplayMode(),
            getControlBarYPosition()
     )
);

"DisplayProperties" is an OVA class that contains various pieces of information about the player display. OVA uses this information to determine where and how to place the overlays as they are retrieved from the ad server.

The constructor for DisplayProperties is as follows:

DisplayProperties(
    displayObjectContainer:DisplayObjectContainer=null,
    displayWidth:int=0,
    displayHeight:int=0,
    bottomMargin:int=0,
    originalWidth:int=-1,
    originalHeight:int=-1,
    linearControlbarHeight:int=-1,
    nonLinearControlbarHeight:int=-1,
    displayMode:String=DISPLAY_NORMAL,
    controlBarY:int=-1
)

The key items to pass in are:

* displayObjectContainer - the DisplayObjectContainer on your player to which overlays are to be attached as child "sprites"
* The player display height and width
* Any margin allowance for the positioning of overlays at the bottom of the display
* The control bar height
* The state of the display - normal mode or fullscreen

2. Then as the show streams play (that you want overlay ads placed on), pass in the timing information as you do for linear ads.. e.g:

_vastController.processTimeEvent(getActiveStreamIndex(), new TimeEvent(evt.position * 1000, evt.duration));

The "getActiveStreamIndex()" method in this case passes through the index of the stream as per the stream sequence that OVA holds.

So if you have a stream sequence as follows:

0: pre-roll
1: show stream
2: show stream
3: post-roll

And you are expecting the overlay advertising to be placed on the show stream at index 1, make sure an index of 1 is passed into the "processTimeEvent()" call.

OVA will do the rest. It will look at the ad schedule, detect if an overlay is to be displayed at the time provided, if it is, display it, handle click tracking etc. and hide it when necessary.

Paul

Reply

Thanks for your answer Paul !

I have tried to do _vastController.processTimeEvent ( 1, new TimeEvent(evt.position * 1000, evt.duration)); when the main video is playing.
The overlay is correctly display.

To be clear,
I don't create any show sequence, I just do 2 VAST requests, one for pre-roll & an other one for overlay.
As I have build data on AdTech, when I receive VAST response I suppose that pre-roll & overlay are linked to the current video.
Also, If user switch to an other video, how can I flush the nonLinear screen ?

Do you think that It should be a good practice to create a sequence with only one video ?

--
Is the AdSlot "position" parameter define the sequence ?
You talk about :

0: pre-roll
1: show stream
2: show stream
3: post-roll

getActiveStreamIndex return the current item in the sequence that is currently playing.
Is the overlay are played on both show stream ?

Reply

Hi Thomas,

I think when you are relying on OVA to display the overlays, it's best that you let OVA know that you basically have:

pre-roll
video
overlays over the video

via the OVA config.

To that degree, it's easier if you actually declare the "video" (show stream) in the OVA configuration so that when OVA does it's ad scheduling, it creates a stream sequence that has:

0: pre-roll
1: show video

In it. Then when you pass the timing information, pass it with index 1 when the show stream is active so that the overlay appears and disappears according to the timing information in the OVA schedule.

You can manually hide an overlay, but you'll have to basically dig into the plumbing of OVA to get a hand to the OverlayView and hide() that.

Make sense?

Paul

Reply

Thanks Paul,

To hide the overlay, I'm using _vastController.overlayController.hideAllOverlay (). Is it a good practice ?

I'm adding a fake showStreams inside the OVA configuration.
And it work really fine !

How is that best way to create a fake showStream ?

"shows": {
      "streams": [
         {
            "file":"fake.mp4",
            "duration":"00:00:30"
         }
      ]
   },
Reply

Hiya,

Yeh, that's the easiest way to setup a dummy show stream...

And "hideAllOverlays()" is a good way to ensure that all overlays are hidden in one go ;)

Paul

Reply

Hi There,

I am currently working on a custom implementation ( as3.0 ) of OVA in a videoplayer. Everything is working fine.
JSON config is being parsed ok etc etc
i am using _vastCOntroller.streamSequence as the playlist.

The only thing is cant manage to get working is how to insert a video ad after you clicked a nonlinear ad. In this case a video from the streamsequence is alrdy playing....but how do i insert the new video and track this correctly... i use _vastController.adSchedule.getSlot( displayEvent.adSlotKey ); to get the adslot...... but how do i intergrate this in de shedule ?

Or is there another way to do it.. ?
I have read most docs but the only thing i can find on this subject is the example from flowplayer...

Any tips / help ?

thnx in advance
Rackdoll

Post new comment

  • Allowed HTML tags: <code> <blockquote> <em> <strong> <strike> <ul> <li> <ol>
  • You may post code using <code>...</code> .
  • Lines and paragraphs break automatically.
  • Web page addresses and e-mail addresses turn into links automatically.

More information about formatting options