Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Playing ads on AppleTV with kaltura-player-rn #66

Open
attilakiss323 opened this issue May 19, 2023 · 3 comments
Open

Playing ads on AppleTV with kaltura-player-rn #66

attilakiss323 opened this issue May 19, 2023 · 3 comments

Comments

@attilakiss323
Copy link

Description
I am using the PlayKit_IMA plugin to play pre-roll ads in our React Native TVos project with kaltura-player-rn. The first time I open the video player the ad loads as expected, however if I then exit the player and open it again the ad does not load anymore. AdEvents.AD_REQUESTED is fired, but AdEvents.STARTED is not.

Setup

 player
      .setup(PLAYER_TYPE.OTT, JSON.stringify(playerOptions), partnerId)
      .then(() => {
         // ... Check if component is already mounted and destroy the player if it is
        player
          .loadMedia(assetId, JSON.stringify(mediaAsset))
          .then(() => {
              // ...
          })
          .catch((error: KalturaError) => {
              // ... Set the error to a global redux state
          })
      })
      .catch((error) => {
        // ... Set the error to a global redux state
      })

Where the initial config looks like this:

 const playerOptions = {
     serverUrl,
     ks,
     autoplay: true,
     plugins: {
       ima: {
         adTagUrl: getPreRollAdUrl(adBreaks),
         alwaysStartWithPreroll: true,
      }
    }
  }

Not sure if it is relevant for the config, but we are playing DRM protected videos.

Versions

 "react-native": "npm:[email protected]",
 "kaltura-player-rn": "0.4.2",

Gemfile:

ruby '3.0.0'
gem 'cocoapods', '~> 1.11', '>= 1.11.0'

Observation
As far as I can tell the issue is that in IMAPlugin.swift when the ad is loaded it is immediately discarded as well, but I haven't been able to figure out why.

      case .LOADED:
             // This if condition triggers when the player is opened for the second time
            if shouldDiscard(ad: event.ad, currentState: currentState) {
                self.discardAdBreak(adsManager: adsManager)
            } else {
                var adEvent = AdEvent.AdLoaded()
                
                if let ad = event.ad {
                    let adInfo = PKAdInfo(ad: ad,
                                          podCount: adsManager.adCuePoints.count,
                                          adPlayHead: .nan)
                    self.pkAdInfo = adInfo
                    adEvent = AdEvent.AdLoaded(adInfo: adInfo)
                }
                
                self.notify(event: adEvent)
                
                // if we have more than one ad don't start the manager, it will be handled in `AD_BREAK_READY`
                guard adsManager.adCuePoints.count == 0 else { return }
                guard canPlayAd(forState: currentState) else { return }
                self.start(adsManager: adsManager)
            }

Any suggestion would be highly appreciated.
Thank you!

@giladna
Copy link
Contributor

giladna commented May 23, 2023

Please check it on our samples if you see the same

https://github.com/kaltura/kaltura-player-ios-samples

@attilakiss323
Copy link
Author

@giladna
Thanks for the reply! We have looked into the examples as you suggested, but we haven't managed to find a solution so far.

Do you maybe have an example implementation with pre-roll ads for react-native-tvos ?

I will try to provide some more context to the errors that we are getting:

  • We get the following error when we open the player for the second time: [Error] [IMAPlugin.swift:403] adsLoader(_:failedWith:) > Ads cannot be requested because the IMAAdDisplayContainer's adContainerViewController property is nil.
    Opening the player for the first time works with the pre-roll ad playing as expected. However, then if we navigate away (and destroy the player), and open the player again it throws the above mentioned error.

  • We also noticed that there are three requests for the pre-roll ads. The first request constantly fails with the following error: TypeError: undefined is not an object (evaluating 'google.ima.NativeBridge.receiveMessage').

Do you have an idea what could the issue be?

And my last question is could you point us towards a documentation on how to add mid-roll ads? Ideally with the PlayKit_IMA plugin.

@x-NR-x
Copy link
Collaborator

x-NR-x commented Jun 22, 2023

Hi @attilakiss323,

Sorry for the late reply.
On which iOS version are you testing and getting theses errors?
If you are using Xcode then I would like to get the version for that as well please.
I'm asking because we are facing the "TypeError: undefined is not an object" in other places as well.

Thanks,
Nilit Danan

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

3 participants