IMA SDK упрощают интеграцию мультимедийной рекламы на ваши веб-сайты и приложения. IMA SDK могут запрашивать рекламу с любого рекламного сервера , совместимого с VAST, и управлять воспроизведением рекламы в ваших приложениях. С помощью SDK IMA DAI приложения отправляют потоковый запрос на рекламу и видеоконтент — либо VOD, либо контент в реальном времени. Затем SDK возвращает объединенный видеопоток, поэтому вам не придется управлять переключением между рекламой и видеоконтентом в вашем приложении.
Выберите решение DAI, которое вас интересует
Полный сервис DAI
В этом руководстве показано, как интегрировать IMA DAI SDK в простое приложение видеоплеера. Если вы хотите просмотреть или проследить за завершенным примером интеграции, загрузите простой пример с GitHub.
Обзор IMA DAI
Внедрение IMA DAI SDK включает в себя два основных компонента, как показано в этом руководстве:
-
StreamRequest
— либоVODStreamRequest
, либоLiveStreamRequest
: объект, определяющий запрос потока. Запросы на потоки могут относиться как к видео по запросу, так и к прямым трансляциям. В запросах указывается идентификатор контента, а также ключ API или токен аутентификации и другие параметры. -
StreamManager
: объект, который обрабатывает потоки динамической вставки рекламы и взаимодействие с серверной частью DAI. Менеджер потоков также обрабатывает отслеживание пингов и пересылает события потока и рекламы издателю.
Предварительные условия
- Три пустых файла
- dai.html
- dai.css
- dai.js
- Python установлен на вашем компьютере или на веб-сервере, который можно использовать для тестирования.
Запустить сервер разработки
Поскольку IMA DAI SDK загружает зависимости, используя тот же протокол, что и страница, с которой он загружается, для тестирования приложения необходимо использовать веб-сервер. Быстрый способ запустить локальный сервер разработки — использовать встроенный сервер Python.
Используя командную строку, из каталога, содержащего файл
index.html
запустите:python -m http.server 8000
В веб-браузере перейдите по адресу
http://localhost:8000/
Вы также можете использовать любой другой веб-сервер, например HTTP-сервер Apache .
Создайте простой видеоплеер
Сначала измените dai.html , чтобы создать простой видеоэлемент HTML5 и элемент div, который будет использоваться для перехода по клику. Также добавьте необходимые теги для загрузки файлов dai.css и dai.js , а также для импорта видеоплеера hls.js
Затем измените dai.css , указав размер и положение элементов страницы. Наконец, в dai.js определите переменные для хранения информации запроса потока и функцию initPlayer()
которая будет запускаться при загрузке страницы.
dai.html
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
<script src="dai.js"></script>
<link rel="stylesheet" href="dai.css" type="text/css">
</head>
<body onLoad="initPlayer()">
<h2>IMA DAI SDK DAI Demo (HLS.JS)</h2>
<video id="video"></video>
<div id="ad-ui"></div>
</body>
</html>
dai.css
#video,
#ad-ui {
width: 640px;
height: 360px;
position: absolute;
top: 35px;
left: 0;
}
#ad-ui {
cursor: pointer;
}
dai.js
var BACKUP_STREAM =
'https://storage.googleapis.com/interactive-media-ads/media/bbb.m3u8'
// Livestream asset key.
var TEST_ASSET_KEY = "sN_IYUG8STe1ZzhIIE_ksA";
// VOD content source and video IDs.
var TEST_CONTENT_SOURCE_ID = "2548831";
var TEST_VIDEO_ID = "tears-of-steel";
var hls = new Hls(); // hls.js video player
var videoElement;
var adUiElement;
var isAdBreak;
function initPlayer() {
videoElement = document.getElementById('video');
adUiElement = document.getElementById('adUi');
}
Загрузите SDK IMA DAI
Затем добавьте платформу IMA, используя тег сценария в dai.html перед тегом dai.js.
dai.html
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
<script type="text/javascript" src="//imasdk.googleapis.com/js/sdkloader/ima3_dai.js"></script>
<script src="dai.js"></script>
<link rel="stylesheet" href="dai.css" type="text/css">
</head>
Инициализируйте StreamManager и сделайте запрос потока.
Чтобы запросить набор объявлений, создайте ima.dai.api.StreamManager
, который отвечает за запрос и управление потоками DAI. Конструктор принимает элемент видео, а полученный экземпляр принимает элемент пользовательского интерфейса объявления для обработки кликов по рекламе.
Затем определите функции, которые запрашивают потоки. Этот пример включает функции как для VOD, так и для прямых трансляций, которые создают экземпляры VODStreamRequest
и LiveStreamRequest
соответственно, а затем вызываютstreamManager.requestStream streamManager.requestStream()
с streamRequest
. Для прямых трансляций вам также необходимо добавить обработчик для прослушивания синхронизированных событий метаданных и пересылки событий в StreamManager
. Вы можете прокомментировать или раскомментировать код в соответствии с вашим вариантом использования. Оба метода используют дополнительный ключ API. Если вы используете защищенный поток, вам необходимо создать ключ аутентификации DAI .
Ни один из потоков в этом примере не защищен, поэтому apiKey
не используется.
dai.js
function initPlayer() {
videoElement = document.getElementById('video');
adUiElement = document.getElementById('adUi');
streamManager = new google.ima.dai.api.StreamManager(videoElement, adUiElement)
// Timed metadata is only used for LIVE streams.
hls.on(Hls.Events.FRAG_PARSING_METADATA, function(event, data) {
if (streamManager && data) {
// For each ID3 tag in the metadata, pass in the type - ID3, the
// tag data (a byte array), and the presentation timestamp (PTS).
data.samples.forEach(function(sample) {
streamManager.processMetadata('ID3', sample.data, sample.pts);
});
}
});
requestVODStream(TEST_CONTENT_SOURCE_ID, TEST_VIDEO_ID, null);
// Uncomment the line below and comment out the one above to request a
// LIVE stream instead of a VOD stream.
//requestLiveStream(TEST_ASSET_KEY, null);
}
function requestVODStream(cmsId, videoId, apiKey) {
var streamRequest = new google.ima.dai.api.VODStreamRequest();
streamRequest.contentSourceId = cmsId;
streamRequest.videoId = videoId;
streamRequest.apiKey = apiKey;
streamManager.requestStream(streamRequest);
}
function requestLiveStream(assetKey, apiKey) {
var streamRequest = new google.ima.dai.api.LiveStreamRequest();
streamRequest.assetKey = assetKey;
streamRequest.apiKey = apiKey;
streamManager.requestStream(streamRequest);
}
Обработка событий потока
Наконец, вам необходимо реализовать прослушиватели событий для основных видеособытий. В этом простом примере события LOADED
, ERROR
, AD_BREAK_STARTED
и AD_BREAK_ENDED
обрабатываются путем вызова функции onStreamEvent()
. Эта функция обрабатывает загрузку потока и ошибки, а также отключает элементы управления проигрывателем во время воспроизведения рекламы, что требуется SDK. Когда поток загружается, видеопроигрыватель загружает и воспроизводит предоставленный URL-адрес с помощью функции loadUrl()
.
Вы также можете настроить прослушиватели событий для событий pause
и start
видеоэлемента, чтобы позволить пользователю возобновить воспроизведение, когда IMA приостанавливается во время рекламных пауз.
Для работы с DAI ваш пользовательский проигрыватель должен передавать события ID3 для прямых трансляций в SDK IMA DAI, как показано в примере кода.
dai.js
var isAdBreak;
function initPlayer() {
videoElement = document.getElementById('video');
adUiElement = document.getElementById('adUi');
streamManager = new google.ima.dai.api.StreamManager(videoElement, adUiElement);
videoElement.addEventListener('pause', onStreamPause);
videoElement.addEventListener('play', onStreamPlay);
streamManager.addEventListener(
[google.ima.dai.api.StreamEvent.Type.LOADED,
google.ima.dai.api.StreamEvent.Type.ERROR,
google.ima.dai.api.StreamEvent.Type.AD_BREAK_STARTED,
google.ima.dai.api.StreamEvent.Type.AD_BREAK_ENDED],
onStreamEvent,
false);
...
function onStreamEvent(e) {
switch (e.type) {
case google.ima.dai.api.StreamEvent.Type.LOADED:
console.log('Stream loaded');
loadUrl(e.getStreamData().url);
break;
case google.ima.dai.api.StreamEvent.Type.ERROR:
console.log('Error loading stream, playing backup stream.' + e);
loadUrl(BACKUP_STREAM);
break;
case google.ima.dai.api.StreamEvent.Type.AD_BREAK_STARTED:
console.log('Ad Break Started');
isAdBreak = true;
videoElement.controls = false;
adUiElement.style.display = 'block';
break;
case google.ima.dai.api.StreamEvent.Type.AD_BREAK_ENDED:
console.log('Ad Break Ended');
isAdBreak = false;
videoElement.controls = true;
adUiElement.style.display = 'none';
break;
default:
break;
}
}
function loadUrl(url) {
console.log('Loading:' + url);
hls.loadSource(url);
hls.attachMedia(videoElement);
hls.on(Hls.Events.MANIFEST_PARSED, function() {
console.log('Video Play');
videoElement.play();
});
}
function onStreamPause() {
console.log('paused');
if (isAdBreak) {
videoElement.controls = true;
adUiElement.style.display = 'none';
}
}
function onStreamPlay() {
console.log('played');
if (isAdBreak) {
videoElement.controls = false;
adUiElement.style.display = 'block';
}
}
Вот и все! Теперь вы запрашиваете и показываете рекламу с помощью IMA DAI SDK. Чтобы узнать о более продвинутых функциях SDK, ознакомьтесь с другими руководствами или примерами на GitHub .