I am trying to test a video Ad in Google HTML5 video player. However when I run the ad, the companion banner is not showing up. Here is the companion banner exert from the VAST:
<Creative id="65393060" sequence="1">
<CompanionAds>
<Companion id="65393060" width="300" height="250">
<StaticResource creativeType="image/jpeg"><![CDATA[https://upload.wikimedia.org/wikipedia/commons/2/24/Ad-MediumRectangle-300x250.jpg]]></StaticResource>
<TrackingEvents>
<Tracking event="creativeView"><![CDATA[https://googleads4.g.doubleclick.net/pcs/view?xai=AKAOjstsTn-EaW1qCpFP8ZfnnD3WA-FvBRQQqjL6Zsorvcg_b2mBA825XyOmESX3oEFPWEYsBfGOZnwFDoULoM_W2XoJotTnj5_cHibpaP0QuuKj&sig=Cg0ArKJSzHCpDSHDWEEtEAE&urlfix=1&adurl=]]></Tracking>
</TrackingEvents>
<CompanionClickThrough><![CDATA[https://adclick.g.doubleclick.net/pcs/click?xai=AKAOjstsTn-EaW1qCpFP8ZfnnD3WA-FvBRQQqjL6Zsorvcg_b2mBA825XyOmESX3oEFPWEYsBfGOZnwFDoULoM_W2XoJotTnj5_cHibpaP0QuuKj&sig=Cg0ArKJSzCLZtsCz6JLn&urlfix=1&adurl=https://www.adobe.com/marketing-cloud/customer-experience.html%3Fsdid%3D162BDWN7%26mv%3Ddisplay]]></CompanionClickThrough>
</Companion>
</CompanionAds>
</Creative>
Can anyone tell me why? I was testing this here:
https://developers.google.com/interactive-media-ads/docs/sdks/html5/vastinspector
Your Companion Ad config looks fine. I'd copied the sampel-vast.xml from google and added your Companion - so it looks like:
<VAST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vast.xsd" version="3.0">
<Ad id="...">
<InLine>
<AdSystem>...</AdSystem>
<AdTitle>...</AdTitle>
<Description>...</Description>
<Error>...</Error>
<Impression>...</Impression>
<Creatives>
<Creative id="..." sequence="1">
<Linear skipoffset="...">...</Linear>
</Creative>
<Creative id="..." sequence="1">
<CompanionAds>
<Companion id="..." width="300" height="250">
<StaticResource creativeType="image/jpeg"><![CDATA[https://upload.wikimedia.org/wikipedia/commons/2/24/Ad-MediumRectangle-300x250.jpg]]></StaticResource>
<TrackingEvents>
<Tracking event="creativeView"><![CDATA[https://googleads4.g.doubleclick.net/pcs/view?xai=AKAOjstsTn-EaW1qCpFP8ZfnnD3WA-FvBRQQqjL6Zsorvcg_b2mBA825XyOmESX3oEFPWEYsBfGOZnwFDoULoM_W2XoJotTnj5_cHibpaP0QuuKj&sig=Cg0ArKJSzHCpDSHDWEEtEAE&urlfix=1&adurl=]]></Tracking>
</TrackingEvents>
<CompanionClickThrough><![CDATA[https://adclick.g.doubleclick.net/pcs/click?xai=AKAOjstsTn-EaW1qCpFP8ZfnnD3WA-FvBRQQqjL6Zsorvcg_b2mBA825XyOmESX3oEFPWEYsBfGOZnwFDoULoM_W2XoJotTnj5_cHibpaP0QuuKj&sig=Cg0ArKJSzCLZtsCz6JLn&urlfix=1&adurl=https://www.adobe.com/marketing-cloud/customer-experience.html%3Fsdid%3D162BDWN7%26mv%3Ddisplay]]> </CompanionClickThrough>
</Companion>
</CompanionAds>
</Creative>
</Creatives>
<Extensions>...</Extensions>
</InLine>
</Ad>
</VAST>
and it works.
Potential issues could be:
Creative \ sequence missmatch (Linear part not provided in question)
Companion \ sequence needs to match Linear \ sequence
CORS resp. Access-Control-Allow-Origin problems
If you see errors in the console of your browser regarding Access-Control-Allow-Origin problems, you might want to edit your server configuration.
A fast solution would be for example to edit .htaccess file in your apache www directory - like:
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin https://imasdk.googleapis.com
Header set Access-Control-Allow-Credentials true
</IfModule>
If this wasn't helpfull at all, you will need to add some more informations to your question. Like:
browsers console output
full vast.xml
server specifics resp. which option you choosed VAST XML or VAST TAG
Have a nice day.
Related
My site uses video.js with the videojs-ima plugin, but it didn't work with hls inside VAST.
I tested the xml using the Google service https://googleads.github.io/googleads-ima-html5/vsi/ and I see the error Ad error: AdError 400: There was an error playing the video ad. Caused by: Error: Error: There was an error playing the video ad.
I tried the videojs-vast-vpaid plugin, but it throws an error about the inability to work with VAST 4.2.
I tried other free players - plur, openplayerjs, fluid player-but none of them worked with my xml.
my VAST 4.2 sample xml looking like that (Warning! NSFW content inside):
<VAST xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.iab.com/VAST" version="4.2">
<Ad id="1" adType="video">
<InLine>
<AdSystem version="1">stripcash.com</AdSystem>
<AdTitle>Naked girl get cum on face</AdTitle>
<Creatives>
<Creative sequence="1" id="1">
<Linear skipoffset="00:00:05">
<Duration>00:00:05</Duration>
<MediaFiles>
<MediaFile id="1" delivery="progressive" type="video/mp4" width="480" height="640">
<![CDATA[ https://b-hls-25.strpst.com/hls/48371204/48371204.m3u8 ]]>
</MediaFile>
</MediaFiles>
<VideoClicks>
<ClickThrough id="1">
<![CDATA[ https://go.xxxjmp.com/api/goToTheRoom?campaignId=59eb46ec7c05df0507091.......]]>
</ClickThrough>
</VideoClicks>
</Linear>
<UniversalAdId idRegistry="unknown">unknown</UniversalAdId>
</Creative>
</Creatives>
<Impression id="">
<![CDATA[ https://go.xxxjmp.com/eye.gif?campaignId=59eb46ec7c05df0507091cccc8a....... ]]>
</Impression>
</InLine>
</Ad>
</VAST>
The IMA SDK creates it's own video element to play the creative. That will only be able to formats the browser can natively support. HLS would work on Safari.
I have this manifest file below . The issue is that the player waits for the streams to download completely before to start playing which is bad for the user experience. Any idea how to fix it? I expected the player to start range requests and feed media source with partial requests instead to wait for the streams to completely download.
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="urn:mpeg:DASH:schema:MPD:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="static" mediaPresentationDuration="PT30M67.6S" minBufferTime="PT2S">
<ProgramInformation></ProgramInformation>
<Period id="0" start="PT0.0S">
<AdaptationSet id="0" contentType="video" segmentAlignment="true" bitstreamSwitching="true" lang="und">
<Representation id="0" mimeType="video/webm" codecs="vp9" bandwidth="770153" width="854" height="480" frameRate="23421/1000">
<BaseURL>https://liveradio.s3.eu-central-1.amazonaws.com/video.webm</BaseURL>
<SegmentList duration="1840613" startNumber="1">
<Initialization range="0-219"/>
<SegmentURL indexRange="220-6592"/>
</SegmentList>
</Representation>
</AdaptationSet>
<AdaptationSet id="1" contentType="audio" segmentAlignment="true" bitstreamSwitching="true" lang="und">
<Representation id="1" mimeType="audio/webm" codecs="opus" bandwidth="115412" audioSamplingRate="48000">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
<BaseURL>https://liveradio.s3.eu-central-1.amazonaws.com/audio.webm</BaseURL>
<SegmentList duration="1840641" startNumber="1">
<Initialization range="0-258"/>
<SegmentURL indexRange="259-3444"/>
</SegmentList>
</Representation>
</AdaptationSet>
</Period>
</MPD>
You seem to be using a mix of the DASH 'live' profile approach and the 'on-demand' profile one - you can see the profile in the profiles="urn:mpeg:dash:profile:isoff-live:2011" at the top of your manifest.
At a very high level the difference is:
'live' profile manifests contain a list of urls for each segment to be downloaded.
'on-demand' profile manifests contain a URL to a file and an index to where the segments can be found in the file, so the client can download chunks as it wants.
DASH is a complex specification and it may be that some players will accept some mixes of profiles and others not, and not all players support all features - for example Shaka player claims not to support 'indexRange' (or did in 2017: https://github.com/google/shaka-player/issues/765)
I'm developing a custom filter to my file format. Everything works fine when I use any of system keys from <propkey.h> like PKEY_Search_Contents.
But now I need to have my custom properties to register and use with Windows Search. Imagine:
"SELECT * FROM SystemIndex WHERE scope ='file:C:/' AND Publisher.Item.CustomProperty LIKE '%Test%'"
I saw about Property Handlers and already tested. I used the RecipePropertyHandler project from Windows 7 SDK Samples. And when I searched with this code:
// get a property store for the mp3 file
IPropertyStore* store = NULL;
HRESULT hr = SHGetPropertyStoreFromParsingName(L"SomePath",
NULL, GPS_DEFAULT, __uuidof(IPropertyStore), (void**)&store);
hr = HRESULT_FROM_WIN32(GetLastError());
PROPVARIANT variant;
store->GetValue(PKEY_Microsoft_SampleRecipe_Difficulty, &variant);
//// very important undocumented method
store->Release();
CoUninitialize();
I receive the correct answer.
But I don't understand how to union IFilter with IPropertyStore to create my custom properties. To start my IFilter, I used the example from Windows 7 SDK Samples. I'm doing something like:
chunkValue.SetTextValue(PKEY_SearchContents, filtered.c_str(),CHUNK_TEXT, 1046, 0, 0, CHUNK_EOS);
I didn't found the link anymore anymore but I read a quote of msdn about you can't implement IFilter AND IPropertyStore together. It's that true? Talking in other words, I can't create a custom property?
I saw all links from msdn, like link, link2 or any other.
I can do separate things but I don't know how to union both.
Any ideia how to implement?
EDIT
Im trying yet implement the PropertyHandler. My .propdesc file have this content:
-->
<schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.microsoft.com/windows/2006/propertydescription"
schemaVersion="1.0">
<propertyDescriptionList publisher="Microsoft" product="SampleRecipe">
<propertyDescription name="Microsoft.SampleRecipe.Difficulty" formatID="{1794C9FE-74A9-497f-9C69-B31F03CE7EF9}" propID="100">
<description>This property indicates the preparation difficulty of a recipe.</description>
<searchInfo inInvertedIndex="true" isColumn="true" />
<typeInfo type="String" multipleValues="false" isViewable="true" />
<labelInfo label="Recipe difficulty" invitationText="Specify recipe difficulty" />
<displayInfo displayType="Enumerated" >
<editControl control="DropList"/>
<enumeratedList>
<enum value="Easy" text="Easy" />
<enum value="Medium" text="Medium" />
<enum value="Hard" text="Hard" />
</enumeratedList>
</displayInfo>
</propertyDescription>
<propertyDescription name="Microsoft.SampleRecipe.Keywords" formatID="{16D19FCB-7654-48AB-8057-DF8E51CC0755}" propID="100">
<description>This property indicates the preparation difficulty of a recipe.</description>
<searchInfo inInvertedIndex="true" isColumn="True"/>
<typeInfo type="String" multipleValues="true" isViewable="true" />
<labelInfo label="Recipe Keywords" invitationText="Specify recipe keyword" />
</propertyDescription>
</propertyDescriptionList>
</schema>
On Windows Properties:
I receive all informations from file... but when I try to search with Windows Search like:
SELECT Microsoft.SampleRecipe.Keywords FROM SystemIndex
Where directory='somedirectory'
I receive all lines empty... Any ideias why?
EDIT
I can see my properties on PropSchema:
I can use my Microsoft.SampleRecipe.DifficultyV2 on my WSSQL Query like:
SELECT Microsoft.SampleRecipe.KeywordsV2 FROM SystemIndex WHERE directory='C:\users\step\documents\rvffilter\'
But all the contents are empty
I am trying to develop a wirecloud operator but I don't know how to include a javascript library (i.e. jquery) on the config.xml except the main.js file. I tried to include the jquery library on the config.xml just like the main.js way, using different wire:index, but it did not work.
Is there any way to include a second JS library?
Yes, you can have more than one javascript file in operators. I think your problem is related to the RDF syntax that is a bit weird. Anyway, the following snippet is an example of how to include jquery and a main.js file using RDF/XML:
<usdl:utilizedResource>
<usdl:Resource rdf:about="js/jquery.min.js">
<wire:index>0</wire:index>
</usdl:Resource>
</usdl:utilizedResource>
<usdl:utilizedResource>
<usdl:Resource rdf:about="js/main.js">
<wire:index>1</wire:index>
</usdl:Resource>
</usdl:utilizedResource>
Alternatively, if you are using the Mashup portal at FIWARE Lab, you can make use of the new XML format that is going to be available on WireCloud 0.7.0 (currently the Mashup portal is running release candidate of that version). This is an example of the new format:
<?xml version='1.0' encoding='UTF-8'?>
<operator xmlns="http://wirecloud.conwet.fi.upm.es/ns/macdescription/1" vendor="CoNWeT" name="ngsi-source" version="3.0">
<details>
<title>NGSI source</title>
<homepage>https://github.com/wirecloud-fiware/ngsi-source</homepage>
<authors>Álvaro Arranz García <aarranz#conwet.com></authors>
<email>aarranz#conwet.com</email>
<image>images/catalogue.png</image>
<description>Retrieve Orion Context Broker entities and their updates in real time.</description>
<longdescription>DESCRIPTION.md</longdescription>
<license>AGPLv3+ w/linking exception</license>
<licenseurl>http://www.gnu.org/licenses/agpl-3.0.html</licenseurl>
<doc>doc/userguide.md</doc>
<changelog>doc/changelog.md</changelog>
</details>
<requirements>
<feature name="NGSI"/>
</requirements>
<preferences>
<preference name="ngsi_server" type="text" label="NGSI server URL" description="URL of the Orion Context Broker to use for retrieving entity information" default="http://orion.lab.fi-ware.org:10026/"/>
<preference name="ngsi_proxy" type="text" label="NGSI proxy URL" description="URL of the Orion Context Broker proxy to use for receiving notifications about changes" default="http://mashup.lab.fi-ware.org:3000/"/>
<preference name="ngsi_entities" type="text" label="NGSI entity types" description="A comma separated list of entity types to use for filtering entities from the Orion Context broker. Thies field cannot be empty." default="Node, AMMS, Regulator"/>
<preference name="ngsi_id_filter" type="text" label="Id pattern" description="Id pattern for filtering entities. This preference can be empty, in that case, entities won't be filtered by id." default=""/>
<preference name="ngsi_update_attributes" type="text" label="Monitored NGSI Attributes" description="Attributes to monitor for updates. Currently, the Orion Context Broker requires a list of attributes to monitor for changes, so this field cannot be empty." default="Latitud, Longitud, presence, batteryCharge, illuminance, ActivePower, ReactivePower, electricPotential, electricalCurrent"/>
</preferences>
<wiring>
<outputendpoint name="entityOutput" type="text" label="Provide entity" description="Every change over each entity fires an event" friendcode="entity"/>
</wiring>
<scripts>
<script src="js/other.dependency.js"/>
<script src="js/main.js"/>
</scripts>
</operator>
You can found more documentation about this new format at this link.
Finally, I came off to include other JS files using RDF/XML on a wirecloud operator. Firstly, I use the following code on the config.xml file:
<usdl-core:utilizedResource rdf:about="js/jquery-1.10.2.min.js">
<wire:index>0</wire:index>
</usdl-core:utilizedResource>
<usdl-core:utilizedResource rdf:about="js/main.js">
<wire:index>1</wire:index>
</usdl-core:utilizedResource>
Also, the included JS files have to be declared as follows:
<wire:Operator rdf:about="http://wirecloud.conwet.fi.upm.es/ns/widget#Operator">
...
<usdl-core:utilizedResource rdf:resource="js/jquery-1.10.2.min.js"/>
<usdl-core:utilizedResource rdf:resource="js/main.js"/>
....
</wire:Operator>
We are developing a site for a client. We were getting a number of 404 requests for /browserconfig.xml. Then I read over here : http://msdn.microsoft.com/en-us/library/ie/dn320426(v=vs.85).aspx that if you do not want to support a browserconfig request you could add meta name="msapplication-config" content="none" in the head section.
However, even after adding the above meta tag still I am getting 404's for /browserconfig.xml.
Any pointers on this?
Adding a meta tag might or might not work. We also added this tag, but we still received 404 errors for browserconfig.xml requests all the time. At the end we decided to do a simple browserconfig.xml and after that we had no problems.
Our browserconfig.xml looks like this and basically it just tells where 4 images are located.
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square70x70logo src="/mstile-70x70.png"/>
<square150x150logo src="/mstile-150x150.png"/>
<wide310x150logo src="/mstile-310x150.png"/>
<square310x310logo src="/mstile-310x310.png"/>
<TileColor>#8bc53f</TileColor>
<TileImage src="/mstile-150x150.png" />
</tile>
</msapplication>
</browserconfig>