पिक्चर में पिक्चर

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

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

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

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

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

पिक्चर में पिक्चर मोड के लिए ज़रूरी है कि आप अपने ऐप्लिकेशन में बैकग्राउंड मीडिया में वीडियो चलाएं.

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

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

    ...
    – (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 टूल को पीआईपी विंडो में विज्ञापन दिखाने की अनुमति देता है:

...
- (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;
  }
}

पिक्चर में पिक्चर मोड चालू किया जा रहा है

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

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

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

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