개요
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 프리 롤 광고를 재생하려면 다음 단계를 따르세요.
-
서버 측 광고 삽입 (SSAI)을 위해 활성화 된 라이브 이벤트를 생성합니다. 자세한 내용은 다음을 참조하십시오.
-
IMA 플러그인을 사용하여 클라이언트 측 프리 롤 광고를 활성화합니다. 자세한 내용은네이티브 SDK로 클라이언트 측 광고 구현문서.
- 스트리밍을 시작하십시오.
안드로이드 구현
이 기능의 경우 IMA 및 SSAI의 플러그인을 모두 사용합니다.
코드 샘플
이 기능을 구현하려면 다음 예제를 검토하십시오.
- Android SDK ( LiveSampleApp )
- Android SDK ( BasicSsaiSampleApp )
- Android SDK ( AdRulesIMASampleApp )
예
다음은 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의 플러그인을 모두 사용합니다.
코드 샘플
이 기능을 구현하려면 다음 예제를 검토하십시오.
- iOS 용 Live SSAI가 포함 된 IMA 프리 롤 ( SLS_IMA 플레이어 )
- tvOS 용 Live SSAI가 포함 된 IMA 프리 롤 ( SLS_IMA-tvOSPlayer )