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

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

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

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

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

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

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

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

  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 टूल, पिक्चर में पिक्चर मोड में वीडियो चलने के दौरान, पीआईपी विंडो में विज्ञापन डाल सकता है:

...
- (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 का एक लोकल हैंडल भी बनाए रखना होगा.