সাপোর্ট পিকচার ইন পিকচার

iOS-এর জন্য মিডিয়া অ্যাডস (IMA) SDK।

এই নির্দেশিকাটি সেইসব IMA প্রকাশকদের জন্য, যারা তাদের বিদ্যমান IMA বাস্তবায়নে পিকচার ইন পিকচার সমর্থন যোগ করতে চান।

পূর্বশর্ত

আপনার অ্যাপে পিকচার-ইন-পিকচার সাপোর্ট যোগ করা

SDK সংস্করণ 3.1.0 থেকে, IMA আইপ্যাডের জন্য অ্যাপলের পিকচার ইন পিকচার মোড সমর্থন করে। আপনার অ্যাপে পিকচার ইন পিকচার সমর্থন যোগ করতে, আপনাকে কয়েকটি সেটিংস পরিবর্তন করতে হবে এবং নীচে দেখানো অনুযায়ী কয়েকটি নতুন IMA ক্লাস প্রয়োগ করতে হবে।

ব্যাকগ্রাউন্ড প্লেব্যাক চালু করার জন্য সেটিংস আপডেট করা হচ্ছে

পিকচার ইন পিকচার মোড চালু করতে হলে আপনার অ্যাপে ব্যাকগ্রাউন্ডে মিডিয়া প্লেব্যাকের অনুমতি দিতে হবে।

  1. নিচে দেখানো অনুযায়ী অডিও, এয়ারপ্লে এবং পিকচার ইন পিকচার- এর জন্য ব্যাকগ্রাউন্ড মোডগুলো অন ( ON) করুন:

  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 অবজেক্ট তৈরি করা

পিকচার ইন পিকচার সমর্থন করার জন্য, অ্যাপল 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-কে 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;
  }
}

পিকচার-ইন-পিকচার মোডে প্রবেশ করা

আপনি যদি AVPlayerViewController ছাড়া শুধু AVPlayer ব্যবহার করেন, তাহলে আপনাকে নিজের Picture in Picture বাটন যোগ করতে হবে। আমরা আমাদের Advanced Sample- এ এটি এইভাবে তৈরি করেছি:

- (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-এর একটি লোকাল হ্যান্ডেলও বজায় রাখতে হবে।