stevennick / videojs-ad-scheduler

Advertisement scheduler for video.js
http://stevennick.github.io/videojs-ad-scheduler
Other
6 stars 7 forks source link

Problem with Google DFP #4

Open ntamblyn opened 8 years ago

ntamblyn commented 8 years ago

Hello i am having problems trying to get this to work with the google DFP.

I have my VMAP file like so

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<VMAP xmlns:vmap="http://www.iab.net/vmap-1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="vast.xsd"
    xmlns:psns="http://microsoft.com/namespace/playersequencer/iabExtensions.xsd"
    version="1.0">

<vmap:AdBreak breakType="linear" breakId="mymidpod" timeOffset="start">
    <vmap:AdSource allowMultipleAds="true" followRedirects="true" id="2">
        <vmap:AdTagURI templateType="vast3">
            <![CDATA[google ad dfp url here]]>
        </vmap:AdTagURI>
    </vmap:AdSource>
    <vmap:TrackingEvents>
        <vmap:Tracking event="breakStart">
            <![CDATA[?ad/tracking/?label=breakStart]]>
        </vmap:Tracking>
        <vmap:Tracking event="breakEnd">
            <![CDATA[?ad/tracking/?label=breakEnd]]>
        </vmap:Tracking>
        <vmap:Tracking event="error">
            <![CDATA[?ad/tracking/?label=error]]>
        </vmap:Tracking>
    </vmap:TrackingEvents>
</vmap:AdBreak>

</VMAP>

So the url reference above will return a wrapper.


<Playlist>
  <Preroll>
    <Ad>
      <![CDATA[another url]]>
    </Ad>
  </Preroll>
</Playlist>

And then that url contains the VAST ad data.

However no ad is played or returned, and no errors are thrown in the debug output.

Any ideas how i can get this to work ?

stevennick commented 8 years ago

This scheduler is designed as play contents if any parse error occurs while retrieving/parsing VMAP&VAST documents. Also, since we do not want to interrupt user experiences it will not mark as error under ad scheduler (but will be an error in VMAP/DMVAST plugin). If content is just played but ads are not it most likely due to parsing VMAP&VAST failed.

Once VMAP or VAST error occurred, null will return to ad-scheduler callback. To make sure if documents are parsed correctly, check what contents that vmapCallback function received, also, trace what content that vastCallback function received are also helpful.

Please set debug = true in plugin options and check the console log can help us to identify what happened.

ntamblyn commented 8 years ago

output of debug

VIDEOJS: ad-scheduler Ordered: [{"breakType":"linear","timeOffset":0,"breakId":"mymidpod","allowMultipleAds":true,"followRedirects":false,"id":"2","templateType":"vast3","vastAdData":null,"adTagURI":"http://urlhere","isWrapper":true,"trackingEvent":{"breakStart":["?ad/tracking/?label=breakStart"],"breakEnd":["?ad/tracking/?label=breakEnd"],"error":["?ad/tracking/?label=error"]},"tracker":{"trackingEvents":{"breakStart":["?ad/tracking/?label=breakStart"],"breakEnd":["?ad/tracking/?label=breakEnd"],"error":["?ad/tracking/?label=error"]}}}]
VIDEOJS: ads adsready triggered: content-set -> ads-ready
VIDEOJS: [ad-scheduler] Preroll triggered.
VIDEOJS: [ad-scheduler] Access URL:http://adurlhere
VIDEOJS: ads play triggered: ads-ready -> preroll?
VIDEOJS: ads adtimeout triggered: preroll? -> content-playback

The vmapCallback enters the wrapper true if statement, but nothing is being returned by the vastCallback, so to me it is not making it that far.

stevennick commented 8 years ago

Wow! it looks like preroll is scheduled and the player actually enters preroll mode at that time. Since the document uses wrapper tag it will use DMVAST to directly handle VAST document.

Is web development console has any request logs for that document? It should at least have one on it. Also, could you please provide more information about the VAST parser used in the project?

The demo site is actually used some modified VAST client library that is not totally same as DailyMotion provided, this different may also cause some unexpected result.

ntamblyn commented 8 years ago

By request logs do you mean the XHR requests ? if so yes i have one.

I am using the VAST parser provided by yourself , as when i try using the DailyMotion one i get an error in the console saying to use your one.

stevennick commented 8 years ago

So by our discuss I can guess it actually has some parse error for VAST document....

Here is a hack we can check if my assumption is true:

  1. Get the test VAMP document URL and assign it as variable url.
  2. Use the following code in javascript console to see it works or not:
DMVAST.client.get(url, null, function( vast ){console.log(vast); debugger;});

After executed code, if develop console show nothing it means either VAST document has some error or has some extra attributes that current version of VAST parser can not handle. This check is also suitable for original DailyMotion VAST parser too.

In your use case, the AD scheduler does not require inline VAST document parse support, so it is safe to comment out line 81-83 in videojs-ad-scheduler.js to make Dailymotion VAST client work.

ntamblyn commented 8 years ago

it returns with no vastResponse but the xhr response responds with document which is my wrapper

<Playlist>
  <Preroll>
    <Ad>
      <![CDATA[http://actual vast playlist url herel]]>
    </Ad>
  </Preroll>
</Playlist>

The url within that wrapper contains my Vast playlist E.G

<?xml version="1.0" encoding="UTF-8"?>
<VAST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vast.xsd" version="2.0">
 <Ad id="101554019">
  <InLine>
   <AdSystem>GDFP</AdSystem>
   <AdTitle>TITLE</AdTitle>
   <Description><![CDATA[Description]]></Description>
   <Error><![CDATA[http://]]></Error>
   <Impression><![CDATA[http://]]></Impression>
   <Creatives>
    <Creative id="100704293099" sequence="1">
     <Linear>
      <Duration>00:00:30</Duration>
      <TrackingEvents>
       <Tracking event="start"><![CDATA[]]></Tracking>
       <Tracking event="firstQuartile"><![CDATA[http://]]></Tracking>
       <Tracking event="midpoint"><![CDATA[http://]]></Tracking>
       <Tracking event="thirdQuartile"><![CDATA[http://]]></Tracking>
       <Tracking event="complete"><![CDATA[http://]]></Tracking>
       <Tracking event="mute"><![CDATA[http://]]></Tracking>
       <Tracking event="unmute"><![CDATA[http://]]></Tracking>
       <Tracking event="rewind"><![CDATA[http://]]></Tracking>
       <Tracking event="pause"><![CDATA[http://]]></Tracking>
       <Tracking event="resume"><![CDATA[http://]></Tracking>
       <Tracking event="fullscreen"><![CDATA[http://]]></Tracking>
       <Tracking event="creativeView"><![CDATA[http://]]></Tracking>
       <Tracking event="acceptInvitation"><![CDATA[http://]]></Tracking>
       <Tracking event="start"><![CDATA[http://]></Tracking>
       <Tracking event="complete"><![CDATA[http://]]></Tracking>
      </TrackingEvents>
      <VideoClicks>
       <ClickThrough id="GDFP"><![CDATA[http://]]></ClickThrough>
       <ClickTracking id=""><![CDATA[http://url-here]]></ClickTracking>
      </VideoClicks>
      <MediaFiles>
       <MediaFile id="GDFP" delivery="progressive" width="1024" height="576" type="video/mp4" bitrate="2252" scalable="true" maintainAspectRatio="true"><![CDATA[http://video-clip-url-here]]></MediaFile>
      </MediaFiles>
     </Linear>
    </Creative>
   </Creatives>
   <Extensions>
    <Extension type="activeview"><CustomTracking>
 <Tracking event="viewable_impression"><![CDATA[http://[VIEWABILITY]&gv=[GOOGLE_VIEWABILITY]]]></Tracking>
 <Tracking event="abandon"><![CDATA[http://[VIEWABILITY]&gv=[GOOGLE_VIEWABILITY]]]></Tracking>
</CustomTracking>
</Extension>
    <Extension type="geo"><Country>GB</Country>
<Bandwidth>3</Bandwidth>
<BandwidthKbps>1240</BandwidthKbps>
</Extension>
<Extension type="waterfall" fallback_index="0"/></Extensions>
  </InLine>
 </Ad>
</VAST>

What i think is happening is that it is not parsing the second URL where the actual VAST Ad is. I am not sure if your plugin is capable of doing this ?