অ্যাড স্ট্রিম বুকমার্কগুলি সংরক্ষণ করুন এবং লোড করুন, বিজ্ঞাপন স্ট্রিম বুকমার্কগুলি সংরক্ষণ করুন এবং লোড করুন, বিজ্ঞাপন স্ট্রিম বুকমার্কগুলি সংরক্ষণ করুন এবং লোড করুন, বিজ্ঞাপন স্ট্রিম বুকমার্কগুলি সংরক্ষণ করুন এবং লোড করুন

প্ল্যাটফর্ম নির্বাচন করুন: HTML5 Android iOS tvOS Roku

This guide shows how to implement bookmarking using the IMA DAI SDK when using Dynamic Ad Insertion (DAI) for video-on-demand (VOD) streams. This assumes a working IMA DAI implementation, such as the one presented in Get Started .

বুকমার্কিং বলতে কী বোঝায়?

Bookmarking is the ability to save and then return to a specific point in the content stream. Suppose a user watches five minutes of content, leaves the video stream, and then returns to it. Bookmarking saves the user's position in the stream so the stream can pick up from where it left off, providing a seamless experience to the viewer.

DAI নেপথ্যে বুকমার্কিং

When bookmarking a DAI stream, you must record the stream id and time when the user leaves the video. When the user returns, re-request the stream and seek to the saved time. Since each instance of the requested stream can have ad breaks of different durations simply saving the stream time won't work. What you really want to do is continue from the same content time .

রূপান্তর পদ্ধতি উদ্ধারে এগিয়ে আসে

IMA DAI SDK একটি নির্দিষ্ট স্ট্রিম টাইমের জন্য কন্টেন্ট টাইম এবং একটি নির্দিষ্ট কন্টেন্ট টাইমের জন্য স্ট্রিম টাইম অনুরোধ করার জন্য একজোড়া মেথড প্রদান করে। এই রূপান্তর মেথডগুলো ব্যবহার করে আপনি বুকমার্ক করা কন্টেন্ট টাইমটি সংরক্ষণ করতে পারেন এবং তারপর স্ট্রিমের নতুন ইনস্ট্যান্সে সংশ্লিষ্ট স্ট্রিম টাইমে সিক করতে পারেন। পদ্ধতিটি নিচে দেওয়া হলো, সাথে একটি নমুনা অ্যাপের লিঙ্কও রয়েছে যা একটি কার্যকর বুকমার্কিং ইমপ্লিমেন্টেশন প্রদর্শন করে।

বুকমার্ক সংরক্ষণ করা

অ্যাক্টিভিটিটি পজ করা হলে একটি বুকমার্ক সেভ করুন।

উদ্দেশ্য-সি

- (void)viewWillDisappear:(BOOL)animated {
  [super viewWillDisappear:animated];
  [self.contentPlayer pause];
  // Ignore this if we're presenting a modal view (e.g. in-app clickthrough).
  if ([self.navigationController.viewControllers indexOfObject:self] == NSNotFound) {
    // Don't save bookmark if we're playing a live stream.
    if (self.video.streamType != StreamTypeLive) {
      NSTimeInterval contentTime = [self.streamManager
          contentTimeForStreamTime:CMTimeGetSeconds(self.contentPlayer.currentTime)];
      [self.delegate videoViewController:self didReportSavedTime:contentTime forVideo:self.video];
    }

সুইফট

override func viewWillDisappear(_ animated: Bool) {
  super.viewWillDisappear(animated)
  contentPlayer.pause()
  if isMovingFromParent {
    // Only save bookmark if we're playing a VOD stream.
    if let vodStream = stream as? VODStream, let streamManager = streamManager {
      let contentTime = streamManager.contentTime(
        forStreamTime: contentPlayer.currentTime().seconds)
      if contentTime.isFinite, contentTime > 0 {
        delegate?.videoViewController(self, didReportBookmarkedTime: contentTime, for: vodStream)
      }
    }
    if trackingContent {
      removeContentPlayerObservers()
    }
    streamManager?.destroy()
    adsLoader?.contentComplete()
    streamManager = nil
    adsLoader = nil
  }
}

বুকমার্ক লোড হচ্ছে

স্ট্রিম পুনরায় অনুরোধ করার সময় বুকমার্কটি লোড করুন। এটি VideoStreamPlayer ইন্টারফেস বাস্তবায়নের একটি অংশ।

উদ্দেশ্য-সি

case kIMAAdEvent_STREAM_LOADED: {
  if (self.video.streamType == StreamTypeVOD) {
    [self addContentPlayerObservers];
    if (self.video.savedTime > 0) {
      NSTimeInterval streamTime =
          [self.streamManager streamTimeForContentTime:self.video.savedTime];
      [self.IMAVideoDisplay seekStreamToTime:streamTime];
      self.video.savedTime = 0;
    }
  }

সুইফট

case .STREAM_LOADED:
  guard let stream else { return }
  addContentPlayerObservers()
  if let vodStream = stream as? VODStream, vodStream.bookmarkTime > 0 {
    bookmarkStreamTime = streamManager.streamTime(forContentTime: vodStream.bookmarkTime)
    if let time = bookmarkStreamTime {
      pendingBookmarkSeek = true
      logMessage(
        "STREAM_LOADED: Bookmark pending for contentTime: \(String(format: "%.2f", vodStream.bookmarkTime)) (streamTime: \(String(format: "%.2f", time)))"
      )
      vodStream.bookmarkTime = 0
    }
  }

নমুনা অ্যাপ

নমুনা অ্যাপ