Unable to seek forward on video content after ad playback complete in iOS and Android using LKQD ad serving tag

845 views
Skip to first unread message

fran...@whisper.sh

unread,
Oct 4, 2016, 2:52:58 PM10/4/16
to Interactive Media Ads SDK, Brad Charna, Harrison Botwick, Sean Acres
To get your questions answered as quickly as possible, please answer the following in your initial post:
  1. Which SDK are you using (Android, iOS, HTML5, Flash)?
    1. HTML5
  2. What ad tag are you using in your request?
    1. https://ssp.lkqd.net/ad?pid=292&sid=66904&output=vastvpaid&support=html5&execution=instream&placement=preroll&playinit=user&volume=75&width=960&height=540&dnt=0&pageurl=http%3A%2F%2F0.0.0.0%3A3000%2Ffeatures%2Fpreview%2F59766445-e851-488f-b5e5-2b636772083b%23&contentid=59766445-e851-488f-b5e5-2b636772083b&contenttitle=poo&contenturl=https%3A%2F%2Fcdn-misc.wimages.net%2Ffeatures%2F59766445-e851-488f-b5e5-2b636772083b.mp4%3Fv%3D28&rnd=147519500703396411012&c1=feature_59766445-e851-488f-b5e5-2b636772083b&c2=misc
  3. Are you able to reproduce this issue using your ad tag in the sample app (AndroidiOS) or the Video Suite Inspector (HTML5Flash)?
    1. Yes, https://googleads.github.io/videojs-ima/examples/advanced/
  4. What steps must we take to reproduce your issue?
The issue: can't fast forward video content on iOS. Can replicate in safari/chrome on mac with iOS device agent. For example, v is set to the videojs object, v.tech_.el_.currentTime = 20 // this causes the video to go to 20 seconds for a split second, then returns back to where you left off.


This behavior can be replicated by just using the google ima plugin demo site, here are the steps:


1. using iOS device agent on a mac: https://googleads.github.io/videojs-ima/examples/advanced/
2. paste into the tag field: https://ssp.lkqd.net/ad?pid=292&sid=66904&output=vastvpaid&support=html5&execution=instream&placement=preroll&playinit=user&volume=75&width=960&height=540&dnt=0&pageurl=http%3A%2F%2F0.0.0.0%3A3000%2Ffeatures%2Fpreview%2F59766445-e851-488f-b5e5-2b636772083b%23&contentid=59766445-e851-488f-b5e5-2b636772083b&contenttitle=poo&contenturl=https%3A%2F%2Fcdn-misc.wimages.net%2Ffeatures%2F59766445-e851-488f-b5e5-2b636772083b.mp4%3Fv%3D28&rnd=147519500703396411012&c1=feature_59766445-e851-488f-b5e5-2b636772083b&c2=misc
3. go to JS console and enter:


v = videojs("content_video");
v.trigger("touchend")
// content video will play right away (because no-fill, and i get 'Ad error: AdError 901: An unexpected error occurred within the VPAID creative. Refer to the inner error for more info. Caused by: Error: Error: null', which is a separate issue)
// try to advance the playhead and it will go back to where you were.

Note if you repeat these steps but use the sample tag there (http://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external/ad_rule_samples&ciu_szs=300x250&ad_rule=1&impl=s&gdfp_req=1&env=vp&output=xml_vmap1&unviewed_position_start=1&cust_params=sample_ar%3Dpremidpostpod%26deployment%3Dgmf-js&cmsid=496&vid=short_onecue&correlator=), the video content can be properly fast-forwarded. One possible culprit is http://ad.lkqd.net/vpaid/vpaid.js. The code is obfuscated so I can't make it all out, but I do see that currentTime is altered in there, and there are the strings "seeked" and "seeking" so it is quite possible this code is causing the issue.

Thank you! 

Franklin

fran...@whisper.sh

unread,
Oct 4, 2016, 2:58:55 PM10/4/16
to Interactive Media Ads SDK, bch...@whisper.sh, ha...@whisper.sh, sha...@whisper.sh
To be clear, by using the debugger, we know that imasdk.googleapis.com/js/sdkloader/ima3.js is resetting the video element’s currentTime to the time before the seek happened

Binny Patel (IMA SDK Team)

unread,
Oct 4, 2016, 5:43:55 PM10/4/16
to Interactive Media Ads SDK, bch...@whisper.sh, ha...@whisper.sh, sha...@whisper.sh
Hi Franklin,

Thanks for all the information. I have tested your Ad tag according to your steps on the Mac and actual device using both chrome and safari browsers, but unable to reproduce the issue. I want some more details regarding the device agents on Mac. So are you using a Simulator or DevTools modifying the user agent?

Thanks,
Binny Patel
IMA SDK Team

Franklin Horn

unread,
Oct 4, 2016, 6:22:47 PM10/4/16
to Interactive Media Ads SDK, bch...@whisper.sh, ha...@whisper.sh, sha...@whisper.sh
Hi Binny, 

Thanks for taking a look at our issue! We've recorded a video (sent via Dropbox, but best to download the file to get clearest resolution) that hopefully helps answer your questions. In the video, you'll see that we're using the Chrome dev tools to modify the user agent. The user agent doesn't reveal any seek controls automatically, so we enter in the console a call to display the controls. In the last part of our demo video, you'll see the cursor attempt to tap forward on the control bar to seek forward. Unfortunately, the seeking doesn't work, and we're jumped back to the point in playback before attempting the seek forward. 

The issue occurs on iphone 6 and 7 (safari). The issue does *not* occur on Android Samsung Galaxy, so we're getting expected behavior on an actual device and in dev tools imitating a Samsung. 

Thanks!
Franklin

--
You received this message because you are subscribed to a topic in the Google Groups "Interactive Media Ads SDK" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/ima-sdk/lTVG-8kTu2M/unsubscribe.
To unsubscribe from this group and all its topics, send an email to ima-sdk+u...@googlegroups.com.
To post to this group, send email to ima...@googlegroups.com.
Visit this group at https://groups.google.com/group/ima-sdk.
For more options, visit https://groups.google.com/d/optout.

Binny Patel (IMA SDK Team)

unread,
Oct 5, 2016, 9:45:30 AM10/5/16
to Interactive Media Ads SDK, bch...@whisper.sh, ha...@whisper.sh, sha...@whisper.sh
Hi Franklin,

Thanks for all the information. This is a known issue when seeking videos on a mobile Safari browser and we have a workaround for this that you can try. Let me know if that resolves your issue.

Thanks

Binny Patel
IMA SDK Team

Franklin Horn

unread,
Oct 5, 2016, 4:28:27 PM10/5/16
to Interactive Media Ads SDK, bch...@whisper.sh, ha...@whisper.sh, sha...@whisper.sh
Hi Binny, 

Thanks for your investigation! Unfortunately, we're still having the issue, despite the workaround presented. 

Our use case isn't quite the one presented in the article. We only have preroll and don't have any midroll. Is this is a known issue with just pre-roll? 

We see the issue after content playback, when the playhead immediately snaps back to where it was after the user tries to advance it. Nevertheless, we downloaded the demo code from https://github.com/googleads/googleads-ima-html5 and gave the suggestion a go (adding the this.adsManager_ = adsManagerLoadedEvent.getAdsManager(this) line in the Ads.prototype.onAdsManagerLoaded_ callback) but still no dice.

It's important to note that this bad behavior only happens with our ad tag URL and not the sample one included with the demo.

We are also able to see the exact function that causes the snapback to happen inside of http://imasdk.googleapis.com/js/sdkloader/ima3.js. Here are the steps we used to reproduce and determine that the function in the IMA SDK script causes the issue:

1. Using safari on Mac (chrome steps should be the same), open a new window and use iPhone device agent.
2. Click play and wait for ad to finish and content to start
3. After content started, click pause and open inspector
4. In console, enter $("video").currentTime to see the current time.
5. Then enter $("video").currentTime = 30. You will see that it moves to 30 second mark for a split second (or may not move at all) and then moves back to the prior current time which can be also seen by calling $("video").currentTime again
6. Now, if you pause the javascript in the debugger and then enter $("video").currentTime = 30 again, you'll see that the video stays at 30 seconds.
7. If you now step over/into enough of the obfuscated ima3.js code, eventually you'll see this function run:
   h.Ja = function(a) {
       this.b.currentTime = a
   };
8. That function receives a as an argument which is the prior time and it resets the video element's current time.

Is there anything else that can be done to resolve this issue? 

Thanks!

Franklin


Binny Patel (IMA SDK Team)

unread,
Oct 5, 2016, 5:50:05 PM10/5/16
to Interactive Media Ads SDK, bch...@whisper.sh, ha...@whisper.sh, sha...@whisper.sh
Hi Franklin,

Thanks for the feedback. Would you be able to try on the actual iOS device and with the complete VAST response? Let me know if you still continue facing the same issue.

Thanks
Binny Patel
IMA SDK Team

Franklin Horn

unread,
Oct 5, 2016, 6:28:18 PM10/5/16
to Interactive Media Ads SDK, bch...@whisper.sh, ha...@whisper.sh, sha...@whisper.sh
Hi Binny, 

Thanks for the note. We were able to try on an actual iOS device and still we've had the issue. 

Perhaps there's some confusion -- what do you mean by complete VAST response? You can see the VAST response by going to our ad tag URL, and making sure you are using iPhone as user agent when making the request because otherwise the VAST response will have an error due to invalid device type. We face the same issue on actual iPhone when going to the IMA HTML5 SDK Advanced Demo (with and without your prior suggested fix) and using our ad tag URL.

Thanks so much!

Binny Patel (IMA SDK Team)

unread,
Oct 6, 2016, 10:21:56 AM10/6/16
to Interactive Media Ads SDK, bch...@whisper.sh, ha...@whisper.sh, sha...@whisper.sh
Hi Franklin,

Thanks for the clarification. We are investigating the issues and will let you know once we have an update.

Thanks,
Binny Patel
IMA SDK Team

Tyler Sidell (IMA SDK Team)

unread,
Oct 6, 2016, 4:51:16 PM10/6/16
to Interactive Media Ads SDK, bch...@whisper.sh, ha...@whisper.sh, sha...@whisper.sh
Hi Franklin,

I have been working with Binny on this particular issue.  Having said that, I followed the steps that you provided and was not able to reproduce the issue that you are experiencing.  Some observations we can make is that the SDK is not responsible for content and it handles the insertion of ads (preroll, midroll, and postroll).  So, it seems that the issue you are experiencing is coming from the VPAID creative itself and specifically, the javascript found here. Since this code is minified, we won't exactly be able to see what is going on in that script.  I'd suggest reaching out to the publisher to see if they have any insight because it seems that something is lingering over from the ad and conflicting with the player.  Another suggestion is to call destroy() on the AdsManager when all ads are complete thus removing any ad resources and thus preventing the confliction that you are experiencing.

Thanks,
Tyler Sidell
IMA SDK Team

Franklin Horn

unread,
Oct 6, 2016, 10:52:02 PM10/6/16
to Interactive Media Ads SDK, bch...@whisper.sh, ha...@whisper.sh, sha...@whisper.sh
Hi Tyler, 

Thanks for looking into this issue with us. We think we've found a way to block the offending JS and demonstrate that the actual snapback is occurring inside fhte ima3.js.

Specifically, we used adblock to block the lkqd script you mentioned (http://ad.lkqd.net/vpaid/vpaid.js) and prepared a video. You’ll see in the video in the console that the script is successfully blocked.

The video first shows using the lkqd ad tag URL, and tries to advance the currentTime but it keeps resetting. Then we pause the javascript execution, set the currentTime and it sticks. Then, we step through enough code in ima3.js and the currentTime snaps back eventually. We didn’t do it for this video, but at an earlier point I stepped into the exact function in ima3.js that made the currentTime snap back: 
   h.Ja = function(a) {
       this.b.currentTime = a
   };

After using the lkqd ad tag URL, we use the sample ad tag URL that’s a part of the IMA HTML5 SDK Advanced Demo and we’ll see in the video that the current time does not snap back as it does with the lkqd ad tag URL. So, I realize that the sample ad tag URL does not have the bad behavior, but since the actual snapback happens in ima3.js and we know that the lkqd vpaid.js script is not executing, we are at a loss of how to proceed in fixing the issue, especially since we’re dealing with all of this obfuscated code.

We also tried your suggestion of destroying the ad manager, which didn't work and created an undesirable flash in the UX. 

Are you able to reproduce the issue as we describe it above? 

Thanks,
Franklin

Franklin Horn

unread,
Oct 7, 2016, 1:38:09 AM10/7/16
to ima...@googlegroups.com, bch...@whisper.sh, ha...@whisper.sh, sha...@whisper.sh
Apologies to be clear there is no flash in the ux when we use destroy(), it's simply not working when we use that function

- Sent from the palms of my hands via my iPhone

Tyler Sidell (IMA SDK Team)

unread,
Oct 7, 2016, 12:46:12 PM10/7/16
to Interactive Media Ads SDK, bch...@whisper.sh, ha...@whisper.sh, sha...@whisper.sh
Hi Franklin,

We've been able to narrow down the culprit even further. I was able to reproduce your issue this time following the steps provided.  Having said that, please note that the following scenarios did not give me your issue:
This leads us to the conclusion that it is creative-specific when using VideoJS.  As stated, we don't have access to the code found in vpaid.js as it is minified.  It would not be feasible for us to move forward without knowing the code that is found in vpaid.js and understanding how this creative is constructed.  I would suggest reaching out to the creator of the file itself to see if they have any insight.  As the issue seems to only be coming from VideoJS plugin, if it is an option to use a player without the plugin I'd suggest going that route as well.  Last but not least, you can post the issue on the VideoJS issue tracker.

Thanks,
Tyler Sidell
IMA SDK Team 

Franklin Horn

unread,
Oct 7, 2016, 5:11:11 PM10/7/16
to Interactive Media Ads SDK, bch...@whisper.sh, ha...@whisper.sh, sha...@whisper.sh
Hi Tyler, 

Thanks again for looking into this issue. I'm not sure we're seeing quite the same thing, we'd love to take a moment and try clarifying. 

The issue is happening in the video.js demo (https://googleads.github.io/videojs-ima/examples/advanced/) as well as the non-video.js demo (https://googleads.github.io/googleads-ima-html5/advanced/).

In the most recent video we sent (https://www.dropbox.com/s/9vrd16efr2uwjy7/ima_issue_lkqd_script_blocked_small.mov?dl=1), the demo comes from https://github.com/googleads/googleads-ima-html5/tree/master/advanced, which is the non-videojs version of the IMA HTML5 SDK Advanced Demo, so the problem cannot be related to video.js.

Also as you can see in the video, we have blocked the vpaid.js script from lkqd in Chrome, so I don’t see how this script can be causing the snapback issue. Furthermore, you can see in the video that the actual resetting of the video element’s currentTime happens in the Google ima3.js script as I step through the code. Is there a way you can use the un-obfuscated version of ima3.js to see how or why the currentTime is reset in the function mentioned earlier? 

Hope this clarifies that we see the snap back issue occur inside of ima3.js, and that we've ruled out vpaid.js and video.js. 

Thanks,

Franklin

Tyler Sidell (IMA SDK Team)

unread,
Oct 10, 2016, 11:29:18 AM10/10/16
to Interactive Media Ads SDK, bch...@whisper.sh, ha...@whisper.sh, sha...@whisper.sh
Hi Franklin,

We've originally said that it was a VideoJS issue as I was not able to reproduce the issue with our other samples with your tag.  However, when I tried your tag this morning it seems that it no longer works so I cannot test this theory again.  The tag currently returns "AdError 901: An unexpected error occurred within the VPAID creative. Refer to the inner error for more info. Caused by: Error: Error: null" even with a mobile user agent selected.  

As stated, earlier I've removed the media file node from your tag and I was not able to reproduce the issue.  Also, I've tested with other VPAID tags and did not see the issue either.  It seems to stem from the actual media file and ad parameters that we in the tag itself.  Can you please test with other tags as well to see if you are experiencing the issue?

Thanks,
Tyler Sidell
IMA SDK Team

Franklin Horn

unread,
Oct 11, 2016, 9:28:11 PM10/11/16
to Interactive Media Ads SDK, bch...@whisper.sh, ha...@whisper.sh, sha...@whisper.sh
Hi Tyler, 

Thanks for your feedback. You can see the snapback issue using iPhone user agent in the non-videojs version of the IMA HTML5 SDK Advanced demo (at http://googleads.github.io/googleads-ima-html5/advanced/) even though the error "AdError 901: An unexpected error occurred within the VPAID creative. Refer to the inner error for more info. Caused by: Error: Error: null” is thrown. This is happening because of the ad targeting, but the issue occurs whether or not a no-fill happens. I suggest refreshing a half dozen times to ensure you're seeing a creative, as there currently isn't 100% fill. 

Put in our ad tag URL, and then try to advance the content once it starts via `$("#content").pause(); $("#content").currentTime = 30`. You will see the snapback occur as it does in the video we shared. We don’t have any other ad tag URLs because that’s the one given to us by our primary video ad tag vendor, lkqd. 

Please let us know if there is anything else we can do to assist!

Thanks!
Franklin

Tyler Sidell (IMA SDK Team)

unread,
Oct 12, 2016, 11:31:10 AM10/12/16
to Interactive Media Ads SDK
Thanks Franklin,

If you can reproduce the issue with your ad tag in a non-videojs environment, then we can rule out that VideoJS is related.  We were not able to reproduce it on our end in a non-videojs player, thus providing the suggestion to check that particular use case.

Are you experiencing the issue with the following tag? This tag is another HTML5 VPAID creative which I was not able to reproduce the issue with. If you enter '$("#content").pause(); $("#content").currentTime = 30;' in the console there should be no 'snapback'. I've tried with additional VPAID creatives as well and the issue still only exists with the tag/creative combination that you provided. 
  
We'll continue to investigate on our end to see if there is anything that can be done on the IMA side to alleviate the issue but I would also suggest reaching out to lkqd to make sure that the creative is calling the correct events and firing them at the correct moments.

Regard,
Tyler Sidell 
IMA SDK Team

Iries

unread,
Mar 27, 2017, 5:52:51 AM3/27/17
to Interactive Media Ads SDK, bch...@whisper.sh, ha...@whisper.sh, sha...@whisper.sh
Hi Franklin, 

Is there any progress on this issue? I'm facing exactly the same issue. Instead of using VideoJS, I am following the HTML5 example from googleads-ima-html5 repo. 
The issue happens when "Custom Playback"(ima.AdsManager.isCustomPlaybackUsed) is being used for VPAID creatives.(For those devices that didn't support full-screen API, I guess.)

Reproduced: iPad with iOS 9.3.1, iPhone with iOS 10.2.1, both Safari and Chrome. 

Any suggestion will be appreciated!

Thanks,
Iries 



在 2016年10月12日星期三 UTC+8上午9:28:11,Franklin Horn写道:

Chris Feldman (IMA SDK Team)

unread,
Mar 27, 2017, 11:23:28 AM3/27/17
to Interactive Media Ads SDK, bch...@whisper.sh, ha...@whisper.sh, sha...@whisper.sh
Hi,

Can you share your ad tag so that we can investigate further? I'm also curious if you edited the sample, as it does not support seeking by default. Please provide detailed instructions for replicating the issue that you're seeing.

Regards,
Chris Feldman
IMA SDK Team

Franklin Horn

unread,
Mar 27, 2017, 5:24:24 PM3/27/17
to Interactive Media Ads SDK, bch...@whisper.sh, ha...@whisper.sh, sha...@whisper.sh
Hi Iries, 

For what it's worth, we changed course with our implementation and no longer work with the offending VPAID tag. We never found a solution -- good luck! 

Franklin
Franklin Horn
Product

Iries

unread,
Mar 28, 2017, 6:14:31 AM3/28/17
to Interactive Media Ads SDK, bch...@whisper.sh, ha...@whisper.sh, sha...@whisper.sh
Hey Franklin, 
Thanks for the reply, good to hear that it's no longer an issue for you. :-)

在 2017年3月28日星期二 UTC+8上午5:24:24,Franklin Horn写道:

Iries

unread,
Mar 28, 2017, 6:53:51 AM3/28/17
to Interactive Media Ads SDK, bch...@whisper.sh, ha...@whisper.sh, sha...@whisper.sh
Hi Chris,

Thank you for taking a look at it. I am testing with these VPAID creatives:
Steps to reproduce:
- Update the adTagUrl_ from this file (Line 60, https://github.com/googleads/googleads-ima-html5/blob/master/playlist/application.js) with one of vpaid above. 
- Enable the <video> controls attribute
- Load the example page with iPhone, or simulated one with desktop Chrome 
- Start the player, and wait for AD Finished or Skipped.
- Once the content video start being played, drag or tap on video player's progress bar

Issue is: It allows to seek backward, but not forward.

Any suggestion will be appreciated

Thanks,
Iries

Chris Feldman (IMA SDK Team)

unread,
Mar 28, 2017, 12:06:34 PM3/28/17
to Interactive Media Ads SDK, bch...@whisper.sh, ha...@whisper.sh, sha...@whisper.sh
Hi Iries,

I don't think this is an SDK issue. It's likely an issue with the way 'controls' is implemented. I'm testing now and simply adding the attribute as you've described doesn't allow me to interact with the control bar at all. You'll want to make sure you're there's nothing sitting on top of the controls that's blocking the interaction.

I should note that I tested the ads in our Video Suite Inspector as well and I had no problem seeking forward after ad playback. Let me know if you continue to have issues.

Regards,
Chris Feldman
IMA SDK Team

Iries

unread,
Mar 29, 2017, 4:41:46 AM3/29/17
to Interactive Media Ads SDK, bch...@whisper.sh, ha...@whisper.sh, sha...@whisper.sh
Hey Chris,

I created an example on codepen: https://codepen.io/anon/pen/aJRQvg
(You can test it with a simulated iPhone with Desktop Chrome) 

This issue only occurs with VPAID creatives on iPhone/iOS (when ima.AdsManager.isCustomPlaybackUsed return true).

Please let me know if you can reproduce with it or not.

Thanks,
Iries

Chris Feldman (IMA SDK Team)

unread,
Mar 29, 2017, 3:42:58 PM3/29/17
to Interactive Media Ads SDK, bch...@whisper.sh, ha...@whisper.sh, sha...@whisper.sh
Hi Iries,

Thank you for the CodePen. I was finally able to replicate the behavior that you're seeing. I'm going to bring this to the rest of the team so we can further investigate whether or not this is an SDK issue. At the same time, I'd suggest reaching out to your creative provider as it's also possible the VPAID ad causing the issue.

Regards,
Chris Feldman
IMA SDK Team

Iries

unread,
Apr 7, 2017, 3:46:37 AM4/7/17
to Interactive Media Ads SDK, bch...@whisper.sh, ha...@whisper.sh, sha...@whisper.sh
Thank you so much, Chris, for looking into it, also for your suggestion. I have reached out to my creative provider, he is looking on this, too.
Sorry for the delay in replying, I'm on my vacation these two weeks.

ton...@air.tv

unread,
Jun 13, 2017, 10:04:03 PM6/13/17
to Interactive Media Ads SDK
Has there been any progress on this issue? We have been having a similar problem running ads through apparently the same server as the Whisper team. In addition, they have identified another VPAID creative that is causing the same seeking gltch on iOS. I have updated Iries's CodePen with another VPAID creative that causes the glitch: https://codepen.io/tonydw/pen/yXaNed

Chris Feldman (IMA SDK Team)

unread,
Jun 14, 2017, 3:02:34 PM6/14/17
to Interactive Media Ads SDK
Hi Tony,

We're still working on this. There are no updates to report at this time, but I will get back to you as soon as I have any new information.

Regards,
Chris Feldman
IMA SDK Team

Chris Feldman (IMA SDK Team)

unread,
Jun 15, 2017, 3:30:42 PM6/15/17
to Interactive Media Ads SDK
Hi All,

We have a fix for this issue which should be released with the next version of the SDK. Keep an eye on our release notes for further updates, and let me know if you continue to have issues.

Regards,
Chris Feldman
IMA SDK Team

Iries

unread,
Aug 28, 2017, 12:59:23 AM8/28/17
to Interactive Media Ads SDK
Reply all
Reply to author
Forward
0 new messages