實施自定義機會生成器

通過實施OpportunityGenerator類,您可以實施自己的機會生成器。

  1. 實施您的自定義 ContentFactory 通過執行 ContentFactory 介面和覆蓋 retrieveGenerators

    例如:

    class MyContentFactory extends ContentFactory {
        @Override
        public List<OpportunityGenerator> retrieveGenerators(MediaPlayerItem item) {
            List<OpportunityGenerator> generators = new ArrayList<OpportunityGenerator>();
            generators.add(MyOpportunityGenerator(item));
            return generators;
        }
        ...
    }
    
  2. 註冊 ContentFactoryMediaPlayer

    例如:

    // register the custom content factory with media player
    MediaPlayerItemConfig config =  new MediaPlayerItemConfig();
    config.setAdvertisingFactory(new MyContentFactory());
    
    // this config will should be later passed while loading the resource
    mediaPlayer.replaceCurrentResource(resource, config);
    
    // OR use MediaPlayerItemLoader to pre-load a resource
    id = 23;
    itemLoader.load(resource, id, config);
    
  3. 建立一個自定義機會生成器類,用於實現 OpportunityGenerator 類。

    public class CustomOpportunityGenerator implements OpportunityGenerator
    {...}
    
    1. 在自定義業務機會生成器中,覆蓋 doConfiguredoUpdatedoCleanup:

      @Override
       public void configure(MediaPlayerItem item, Context context,
       OpportunityGeneratorClient client, AdSignalingMode mode, long playhead, TimeRange playbackRange) {
      }
      
      protected void update(long playhead, TimeRange playbackRange){
      }
      
      protected void cleanup(){
      }
      

      要獲取定時元資料,請執行以下操作:

      List<TimedMetadata> tList = getItem().getTimedMetadata();
      
    2. 每個 TimedMetadata 或組 TimedMetadata,建立具有以下屬性的商機:

      Opportunity(
        String id,                      // Can be id from timedMetadata
        Placement placementInformation, // Placement object containing Type, time, duration
        Metadata metadataSettings,      // Ad metadata with targeting params sent to the ad provider
        Metadata customParams           // Metadata for customizing resolving and/or tracking process.
      );
      
    3. 對於建立的每個機會,請撥打 resolveOpportunityGeneratorClient:getClient().resolve(opportunity);

這是一個示例自定義放置機會檢測器:

public class MyOpportunityGenerator implements OpportunityGenerator {

     @Override
      public void configure(MediaPlayerItem item, Context context,
      OpportunityGeneratorClient client, AdSignalingMode mode, long playhead, TimeRange playbackRange) {
      }

        MediaPlayerItem item = getItem();
        MediaPlayerItemConfig itemConfig = item.getConfig();

        if (itemConfig == null || itemConfig.getAdvertisingMetadata() == null) {
            // no ad metadata, no ads
            return;
        }

        AdvertisingMetadata metadata = item.getConfig().getAdvertisingMetadata();

        AdSignalingMode mode = itemConfig.getAdSignalingMode();

        if (mode == AdSignalingMode.CUSTOM_RANGES)
        {
            // don't override custom ad ranges
            return;
        }

        Placement.Type pType = (mode == AdSignalingMode.MANIFEST_CUES) ?
                  Placement.Type.PRE_ROLL : Placement.Type.SERVER_MAP;
        Placement.Mode pMode = Placement.Mode.DEFAULT;
        Placement placement = new Placement(pType, playhead,
                  Placement.UNKNOWN_DURATION, pMode);

        Opportunity opportunity = new Opportunity("initialOpportunity", placement,
                  metadata, null);

        OpportunityGeneratorClient client = getClient();
        client.resolve(opportunity);
    }

    @Override
    protected void update(long playhead, TimeRange playbackRange) {

 ...
 timedMetadataList = getItem().getTimedMetadata();
        for (TimedMetadata timedMetadata : timedMetadataList) {
         if (isOpportunity(timedMetadata)) {   // check if given timedMetadata should
                                               // be considered as an opportunity
  // create a PlacementOpportunity object and add it to the opportunities list
                Opportunity opportunity = new Opportunity("id", placement, metadata, null);
                client.resolve(opportunity)
          }
        }
    }

    @Override
    protected void cleanup() {}
}

本頁內容