Implement a custom opportunity detector

You can implement your own opportunity detectors by implementing the interface PlacementOpportunityDetector.

  1. Create a custom AdvertisingFactory instance and override createOpportunityDetector. For example:

    new AdvertisingFactory() {
        ...
        @Override
        public PlacementOpportunityDetector createOpportunityDetector(MediaPlayerItem item) {
            return new CustomPlacementOpportunityDetector();
        }
        ...
    }
    
  2. Register the ad client factory to the MediaPlayer. For example:

    // register the custom advertising factory with media player
    advertisingFactory = createCustomAdvertisingFactory();
    mediaPlayer.registerAdClientFactory(advertisingFactory);
    
  3. Create a custom opportunity detector class that extends the PlacementOpportunityDetector class.

    1. In the custom opportunity detector, override this function:

      public List<PlacementOpportunity> process(List<TimedMetadata> timedMetadataList, Metadata metadata)
      

      The timedMetadataList contains the list of available TimedMetadata, which is sorted. Metadata contains the targeting parameters and the custom parameters to be sent to the ad provider.

    2. For each TimedMetadata, create a List<PlacementOpportunity>. The list can be empty, but not null. PlacementOpportunity should have the following attributes:

      PlacementOpportunity(
          String id,                                      // can be id from timedMetadata
          PlacementInformation placementInformation   // PlacementInformation object containing Type, time, duration
          Metadata metadata                           // ad metadata containing targeting params sent to the ad provider
      )
      
    3. After placement opportunities are created for all the detected timed metadata objects, simply return the PlacementOpportunity list.

This is a sample custom placement opportunity detector:

public class CustomPlacementOpportunityDetector implements PlacementOpportunityDetector {
    ...
    @Override
    public List<PlacementOpportunity> process(List<TimedMetadata> timedMetadataList, Metadata metadata) {
        ...
        List<PlacementOpportunity> opportunities = new ArrayList<PlacementOpportunity>();

        for (TimedMetadata timedMetadata : timedMetadataList) {

            if (isOpportunity(timedMetadata)) {        // check if given timedMetadata should be
                                                       // considered as an opportunity

                // create an object of PlacementOpportunity and add it to the opportunities list
                PlacementOpportunity opportunity =
                  createPlacementOpportunity(timedMetadata, airingId, metadata);
                Opportunities.add(opportunity);
            }
        }
        return opportunities;
    }
    ...
}

On this page