라이브 SSAI와 기본 SDK가 포함된 클라이언트측 프리롤 광고

이 주제에서는 브라이트코브 네이티브 SDK를 사용하여 SSAI (서버측 광고 삽입) 가 활성화된 라이브 스트림으로 클라이언트측 프리롤 광고를 재생하는 방법을 배웁니다.

개요

SSAI (서버 측 광고 삽입)로 실시간 스트림을 제공 할 때 Live 모듈을 사용하여 미드 롤 광고 시간을 요청할 수 있습니다. 자세한 내용은네이티브 SDK와 함께 Live SSAI 사용문서.

실시간 스트림이 시작되기 전에 프리 롤 광고를 포함 할 수도 있습니다. 시청자가 참여하고 짧은 광고를보고 싶어하는 경우입니다. 이 기능을 사용하면 클라이언트 측 IMA 프리 롤 광고를 삽입 할 수 있습니다.

요구 사항

이 기능에는 다음 요구 사항이 필요합니다.

브라이트코브 네이티브 SDK 버전

  • Android 6.10.0 이상의 네이티브 SDK
  • iOS / tvOS 6.7.7 이상용 네이티브 SDK

플랫폼

  • Dynamic Delivery에 대해 활성화 된 계정

Live SSAI로 IMA 프리 롤 광고 구현

실시간 SSAI 스트림으로 IMA 프리 롤 광고를 재생하려면 다음 단계를 따르세요.

  1. 서버 측 광고 삽입 (SSAI)을 위해 활성화 된 라이브 이벤트를 생성합니다. 자세한 내용은 다음을 참조하십시오.

  2. IMA 플러그인을 사용하여 클라이언트 측 프리 롤 광고를 활성화합니다. 자세한 내용은네이티브 SDK로 클라이언트 측 광고 구현문서.

  3. 스트리밍을 시작하십시오.

안드로이드 구현

이 기능의 경우 IMA 및 SSAI의 플러그인을 모두 사용합니다.

코드 샘플

이 기능을 구현하려면 다음 예제를 검토하십시오.

다음은 Live, SSAI 및 IMA 프리 롤 광고를 결합한 코드 예입니다.

/**
 * We start by adding some variables that are focused on the CSAI integration:
 * Also make the EventEmitter a global variable, it will be needed in the setupGoogleIMA method below
 */
private EventEmitter eventEmitter;
private GoogleIMAComponent googleIMAComponent;
private String adRulesURL = "YOUR_AD_RULES_URL";

private final String AD_CONFIG_ID_QUERY_PARAM_KEY = "ad_config_id";

// Note that for live SSAI streams, the adConfigId will start with the string "live."
// Ads will be injected into a live SSAI stream using the cue point API
private final String AD_CONFIG_ID_QUERY_PARAM_VALUE = "YOUR_AD_CONFIG_ID";

private SSAIComponent plugin;

/**
 * The BasicSSAISampleApp's onCreateMethod, with the setupGoogleIMA method from the AdRulesImaSampleApp added
 */
@Override
protected void onCreate(Bundle savedInstanceState) {
    setContentView(R.layout.ssai_activity_main);
    brightcoveVideoView = (BrightcoveExoPlayerVideoView) findViewById(R.id.brightcove_video_view);
    super.onCreate(savedInstanceState);

    eventEmitter = brightcoveVideoView.getEventEmitter();

    // Here we use the same setupGoogleIMA method as found in the AdRulesImaSampleApp:
    setupGoogleIMA();

    final EventEmitter eventEmitter = brightcoveVideoView.getEventEmitter();
    Catalog catalog = new Catalog(eventEmitter, YOUR_ACCOUNT_ID, YOUR_POLICY_KEY);

    // Setup the error event handler for the SSAI plugin.
    registerErrorEventHandler();
    plugin = new SSAIComponent(this, brightcoveVideoView);

    View view = findViewById(R.id.ad_frame);
    if (view instanceof ViewGroup) {
        // Set the companion ad container,
        plugin.addCompanionContainer((ViewGroup) view);
    }

    // Set the HttpRequestConfig with the Ad Config Id configured in
    // your https://studio.brightcove.com account.
    HttpRequestConfig httpRequestConfig = new HttpRequestConfig.Builder()
            .addQueryParameter(AD_CONFIG_ID_QUERY_PARAM_KEY, AD_CONFIG_ID_QUERY_PARAM_VALUE)
            .build();

    catalog.findVideoByID("YOUR_VIDEO_ID", httpRequestConfig, new VideoListener() {
        @Override
        public void onVideo(Video video) {
            // The Video Sources will have a VMAP url which will be processed by the SSAI plugin,
            // If there is not a VMAP url, or if there are any requesting or parsing error,
            // an EventType.ERROR event will be emitted.
            plugin.processVideo(video);
        }
    });
}

// The setupGoogleIMA method, for reference:

/**
 * Setup the Brightcove IMA Plugin.
 */
private void setupGoogleIMA() {
    // Establish the Google IMA SDK factory instance.
    final ImaSdkFactory sdkFactory = ImaSdkFactory.getInstance();

    // Enable logging up ad start.
    eventEmitter.on(EventType.AD_STARTED, new EventListener() {
        @Override
        public void processEvent(Event event) {
            Log.v(TAG, event.getType());
        }
    });

    // Enable logging any failed attempts to play an ad.
    eventEmitter.on(GoogleIMAEventType.DID_FAIL_TO_PLAY_AD, new EventListener() {
        @Override
        public void processEvent(Event event) {
            Log.v(TAG, event.getType());
        }
    });

    // Enable Logging upon ad completion.
    eventEmitter.on(EventType.AD_COMPLETED, new EventListener() {
        @Override
        public void processEvent(Event event) {
            Log.v(TAG, event.getType());
        }
    });

    // Set up a listener for initializing AdsRequests. The Google
    // IMA plugin emits an ad request event as a result of
    // initializeAdsRequests() being called.
    eventEmitter.on(GoogleIMAEventType.ADS_REQUEST_FOR_VIDEO, new EventListener() {
        @Override
        public void processEvent(Event event) {
            // Create a container object for the ads to be presented.
            AdDisplayContainer container = sdkFactory.createAdDisplayContainer();
            container.setPlayer(googleIMAComponent.getVideoAdPlayer());
            container.setAdContainer(brightcoveVideoView);

            // Build an ads request object and point it to the ad
            // display container created above.
            AdsRequest adsRequest = sdkFactory.createAdsRequest();
            adsRequest.setAdTagUrl(adRulesURL);
            adsRequest.setAdDisplayContainer(container);

            ArrayList<AdsRequest> adsRequests = new ArrayList<AdsRequest>(1);
            adsRequests.add(adsRequest);

            // Respond to the event with the new ad requests.
            event.properties.put(GoogleIMAComponent.ADS_REQUESTS, adsRequests);
            eventEmitter.respond(event);
        }
    });

    // Create the Brightcove IMA Plugin and pass in the event
    // emitter so that the plugin can integrate with the SDK.
    googleIMAComponent = new GoogleIMAComponent(brightcoveVideoView, eventEmitter, true);
}

iOS 구현

이 기능의 경우 IMA 및 SSAI의 플러그인을 모두 사용합니다.

코드 샘플

이 기능을 구현하려면 다음 예제를 검토하십시오.