पिक्चर में पिक्चर की सुविधा का इस्तेमाल करना

iOS के लिए मीडिया विज्ञापन (IMA) SDK टूल.

यह गाइड उन IMA पब्लिशर के लिए है जो IMA को लागू करने के मौजूदा तरीके में, 'पिक्चर में पिक्चर' मोड की सुविधा जोड़ना चाहते हैं.

ज़रूरी शर्तें

अपने ऐप्लिकेशन में पिक्चर-इन-पिक्चर मोड की सुविधा जोड़ना

एसडीके के वर्शन 3.1.0 के बाद से, IMA, iPad के लिए Apple के Picture in Picture मोड के साथ काम करता है. अपने ऐप्लिकेशन में Picture in Picture मोड की सुविधा जोड़ने के लिए, आपको कुछ सेटिंग में बदलाव करना होगा. साथ ही, यहां दिखाई गई कुछ नई IMA क्लास लागू करनी होंगी.

बैकग्राउंड में वीडियो चलाने की अनुमति देने के लिए सेटिंग अपडेट करना

पिक्चर में पिक्चर मोड का इस्तेमाल करने के लिए, आपको अपने ऐप्लिकेशन में बैकग्राउंड में मीडिया चलाने की अनुमति देनी होगी.

  1. नीचे दिए गए तरीके से, ऑडियो, AirPlay, और Picture in Picture के लिए, बैकग्राउंड मोड को चालू पर सेट करें:

  2. बैकग्राउंड में वीडियो चलाने की सुविधा के लिए, AVAudioSession प्रॉपर्टी सेट करें. साथ ही, IMASettings में बैकग्राउंड में वीडियो चलाने की सुविधा चालू करें:

    ...
    – (void)viewDidLoad {
     [super viewDidLoad];
    
     self.playButton.layer.zPosition = MAXFLOAT;
    
     [[AVAudioSession sharedInstance] setActive:YES error:nil];
     [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
    
     [self setupAdsLoader];
     [self setUpContentPlayer];
    }
    
    – (void)setupAdsLoader {
     IMASettings *settings = [[IMASettings alloc] init];
     settings.enableBackgroundPlayback = YES;
     self.adsLoader = [[IMAAdsLoader alloc] initWithSettings:settings];
     self.adsLoader.delegate = self;
    }

पिक्चर में पिक्चर मोड के लिए, नए iOS और IMA ऑब्जेक्ट बनाना

पिक्चर में पिक्चर की सुविधा के लिए, Apple ने AVPictureInPictureController और AVPictureinPictureControllerDelegate क्लास जोड़ी हैं. IMA ने IMAPictureInPictureProxy को जोड़ा है. इन क्लास को अपने प्रोजेक्ट में शामिल करने के लिए, अपने कोड में ये स्टेटमेंट जोड़ें:

...
@interface VideoViewController () <AVPictureInPictureControllerDelegate,
                                   IMAAdsLoaderDelegate,
                                   IMAAdsManagerDelegate,
                                   UIAlertViewDelegate>
...
// PiP objects.
@property(nonatomic, strong) IMAPictureInPictureProxy *pictureInPictureProxy;
@property(nonatomic, strong) AVPictureInPictureController *pictureInPictureController;
...
@end

- (void)setUpContentPlayer {
  ...
  self.pictureInPictureProxy =
      [[IMAPictureInPictureProxy alloc] initWithAVPictureInPictureControllerDelegate:self];
  self.pictureInPictureController =
      [[AVPictureInPictureController alloc] initWithPlayerLayer:self.contentPlayerLayer];
  self.pictureInPictureController.delegate = self.pictureInPictureProxy;
}

विज्ञापन अनुरोध में बदलाव करना

एक और नया ऑब्जेक्ट बनाना है: IMAAVPlayerVideoDisplay. इसे आपके IMAAdsRequest कंस्ट्रक्टर को पास किया जाता है. इससे SDK टूल को, Picture in Picture मोड में वीडियो चलाने के दौरान, PiP विंडो में विज्ञापन डालने की अनुमति मिलती है:

...
- (void)requestAdsWithTag:(NSString *)adTagUrl {
  [self logMessage:@"Requesting ads"];
  // Create an ad request with our ad tag, display container, and optional user context.
  IMAAdsRequest *request = [[IMAAdsRequest alloc]
           initWithAdTagUrl:adTagUrl
         adDisplayContainer:[self createAdDisplayContainer]
       avPlayerVideoDisplay:[[IMAAVPlayerVideoDisplay alloc] initWithAVPlayer:self.contentPlayer]
      pictureInPictureProxy:self.pictureInPictureProxy
                userContext:nil];
  [self.adsLoader requestAdsWithRequest:request];
}

विज्ञापन दिखाना शुरू करना

IMA SDK विज्ञापनों को पिक्चर में पिक्चर मोड के दौरान शुरू नहीं किया जा सकता. इसलिए, आपको यह पक्का करना होगा कि [adsManager start] को सिर्फ़ तब कॉल किया जाए, जब आपका वीडियो स्टैंडर्ड प्लेबैक मोड में हो:

...
- (void)adsManager:(IMAAdsManager *)adsManager didReceiveAdEvent:(IMAAdEvent *)event {
  [self logMessage:@"AdsManager event (%s).", AdEventNames[event.type]];
  // When the SDK notified you that ads have been loaded, play them.
  switch (event.type) {
    case kIMAAdEvent_LOADED:
      if (![self.pictureInPictureController isPictureInPictureActive]) {
        [adsManager start];
      }
      break;
    ...
    default:
      break;
  }
}

पिक्चर में पिक्चर मोड चालू करना

अगर AVPlayer का इस्तेमाल AVPlayerViewController के बिना किया जा रहा है, तो आपको अपना Picture in Picture बटन जोड़ना होगा. हमने अपने ऐडवांस सैंपल में इस तरह से एक लागू किया है:

- (IBAction)onPipButtonClicked:(id)sender {
  if ([self.pictureInPictureController isPictureInPictureActive]) {
    [self.pictureInPictureController stopPictureInPicture];
  } else {
    [self.pictureInPictureController startPictureInPicture];
  }
}

अक्सर पूछे जाने वाले सवाल

वीडियो को पिक्चर में पिक्चर मोड में देखने के दौरान विज्ञापन कैसे दिखाए जाएं?
वीडियो को पिक्चर में पिक्चर मोड में देखने के दौरान विज्ञापन नहीं दिखाए जा सकते. विज्ञापन सिर्फ़ स्टैंडर्ड प्लेबैक मोड में दिखाए जा सकते हैं.
मेरे मौजूदा Picture in Picture इंटिग्रेशन को मेरी क्लास के लिए self.pictureInPictureController.delegate सेट करना होगा. मैं Picture in Picture मोड में IMA विज्ञापन कैसे लागू करूं और डेलिगेट के तौर पर काम करना जारी रखूं?
IMA SDK को भी AVPictureinPictureControllerDelegate मैसेज मिलने चाहिए, ताकि वह Picture in Picture मोड में विज्ञापन चला सके. इसलिए, हम आपसे AVPictureinPictureController के लिए डेलिगेट को IMAPictureInPicturyProxy के किसी इंस्टेंस पर सेट करने के लिए कहते हैं. यह प्रॉक्सी ऑब्जेक्ट, आपके ऐप्लिकेशन को सभी AVPictureinPictureControllerDelegate मैसेज फ़ॉरवर्ड करता है. साथ ही, यह IMA को कॉल भी फ़ॉरवर्ड करता है, ताकि Picture in Picture मोड की सुविधा चालू की जा सके. ध्यान दें कि आपको अपने AVPlayerLayer के लिए, लोकल हैंडल भी बनाए रखना होगा.