Selecciona la solución de DAI que te interesa
DAI de publicación de grupos de anuncios
Los SDK de IMA simplifican la integración de los anuncios multimedia en sus sitios web y aplicaciones.
Los SDK de IMA pueden solicitar anuncios de cualquier Compatible con VAST servidor de anuncios y administrar la reproducción de anuncios en tus apps.
Con los SDK de DAI de IMA, las aplicaciones realizan una solicitud de transmisión de anuncios y videos de contenido para ya sea VOD o contenido en vivo. Luego, el SDK devuelve una transmisión de video por Internet combinada, que no tiene que administrar el cambio entre los anuncios y los videos de contenido en sus .
En esta guía, se muestra cómo reproducir una transmisión de DAI Pod Serving en vivo con la IMA SDK de DAI para CAF.
Antes de usar esta guía, familiarízate con el Receptor web del framework de la aplicación de Chromecast protocolo. En esta guía, se supone que tienes conocimientos básicos de los conceptos de los receptores de CAF, como, por ejemplo, interceptores de mensajes y mediaInformation los objetos y familiaridad con el uso de la herramienta Comando y control de Cast, para emular un emisor de CAF.
Para usar la publicación de grupos de anuncios de la DAI de IMA, debes trabajar con un socio de entrega de grupos de anuncios debe tener un Ad Manager 360 Advanced de servicio predeterminada. Si tienes una cuenta de Ad Manager, comunícate con tu administrador de cuentas para obtener más detalles. Para obtener información sobre cómo registrarte en Ad Manager, visita la Centro de ayuda de Ad Manager.
Para obtener información sobre la integración con otras plataformas o el uso de IMA Para obtener más información sobre los SDKs del cliente, consulta SDK de anuncios multimedia interactivos.
Descripción general de la publicación de grupos de anuncios de DAI de IMA
La implementación de la entrega de grupos de anuncios con el SDK de DAI para CAF de IMA implica dos componentes principales: que se demuestran en esta guía:
StreamRequest
: Es un objeto que define una solicitud de transmisión a los servidores de publicidad de Google. Las solicitudes especifican un código de red, una clave de activo personalizada y una clave de API opcional. así como otros parámetros opcionales.StreamManager
: Un objeto que controla la comunicación entre la transmisión de video por Internet y la DAI de IMA como activar pings de seguimiento y reenviar eventos de transmisión al publicador.
Requisitos previos
- Una cuenta de Play Console con para dispositivos de prueba registrados.
- Un receptor web alojado App que se registrados en tu Consola para desarrolladores de Cast y que se pueden modificar para alojar el código proporcionado en esta guía.
- Una app de envío que esté configurada para usar tu app de receptor web Para el para este ejemplo, usa el comando de Comando y control de Cast tool como tu remitente.
Configurar los objetos MediaInfo del remitente
Primero, configura la configuración de la app
Objeto MediaInfo
incluir los siguientes campos:
Campo | Contenido | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
contentId
|
Es un identificador único para este elemento multimedia.
CONTENT_ID |
||||||||||
contentUrl
|
Opcional. URL de transmisión de copia de seguridad para reproducir si no se puede cargar la transmisión de DAI.
BACKUP_STREAM_URL |
||||||||||
contentType
|
Opcional. Tipo MIME de las transmisiones de copias de seguridad de contenido. Solo es necesario para la forma de pago DASH
transmisiones continuas.
CONTENT_STREAM_MIMETYPE |
||||||||||
streamType
|
El literal de string o la constante que se usa para este valor varía según el remitente plataforma. | ||||||||||
customData
|
El campo customData contiene un almacén de pares clave-valor de claves
campos obligatorios.
|
A continuación, se incluyen algunas muestras de código que te ayudarán a comenzar:
Web
Para configurar estos valores en un remitente web de transmisión, primero crea un
MediaInfo
objeto con los datos requeridos, realiza una carga
de entrada al receptor web.
// Create mediaInfo object
const mediaInfo = new chrome.cast.media.MediaInfo("CONTENT_ID");
mediaInfo.contentUrl = "BACKUP_STREAM_URL";
mediaInfo.contentType = "CONTENT_STREAM_MIMETYPE";
mediaInfo.streamType = chrome.cast.media.StreamType.LIVE;
mediaInfo.customData = {
manifestUrl: "MANIFEST_URL",
networkCode: "NETWORK-CODE",
customAssetKey: "CUSTOM_ASSET_KEY",
apiKey: "API_KEY"
};
// Make load request to cast web receiver
const castSession = cast.framework.CastContext.getInstance().getCurrentSession();
const request = new chrome.cast.media.LoadRequest(mediaInfo);
castSession.loadMedia(request).then(
() => { console.log('Load succeed'); },
(errorCode) => { console.log('Error code: ' + errorCode); });
Android
Para configurar estos valores en un remitente web de transmisión, primero crea un Objeto MediaInfo con los datos requeridos y, luego, solicitud de carga a la Web receptor.
JSONObject customData = new JSONObject()?
.put("manifestUrl", "MANIFEST_URL")
.put("networkCode", "NETWORK-CODE")
.put("customAssetKey", "CUSTOM_ASSET_KEY")
.put("apiKey", "API_KEY");
MediaInfo mediaInfo = MediaInfo.Builder("CONTENT_ID")
.setContentUrl("BACKUP_STREAM_URL")
.setContentType("CONTENT_STREAM_MIMETYPE")
.setStreamType(MediaInfo.STREAM_TYPE_LIVE)
.setCustomData(customData)
.build();
RemoteMediaClient remoteMediaClient = mCastSession.getRemoteMediaClient();
remoteMediaClient.load(new MediaLoadRequestData.Builder().setMediaInfo(mediaInfo).build());
iOS (Obj-C)
Para configurar estos valores en un remitente web de transmisión, primero crea un
GCKMediaInformation
objeto con los datos requeridos, realiza una carga
de entrada al receptor web.
NSURL url = [NSURL URLWithString:@"BACKUP_STREAM_URL"];
NSDictionary *customData = @{
@"manifestUrl": @"MANIFEST_URL",
@"networkCode": @"NETWORK-CODE",
@"customAssetKey": @"CUSTOM_ASSET_KEY",
@"apiKey": @"API_KEY"};
mediaInfoBuilder.customData = customData;
GCKMediaInformationBuilder *mediaInfoBuilder =
[[GCKMediaInformationBuilder alloc] initWithContentID: @"CONTENT_ID"];
mediaInfoBuilder.contentURL = url;
mediaInfoBuilder.contentType = @"CONTENT_STREAM_MIMETYPE";
mediaInfoBuilder.streamType = GCKMediaStreamTypeLive;
mediaInfoBuilder.customData = customData;
self.mediaInformation = [mediaInfoBuilder build];
GCKRequest *request = [self.sessionManager.currentSession.remoteMediaClient loadMedia:self.mediaInformation];
if (request != nil) {
request.delegate = self;
}
iOS (Swift)
Para configurar estos valores en un remitente web de transmisión, primero crea un
GCKMediaInformation
objeto con los datos requeridos, realiza una carga
de entrada al receptor web.
let url = URL.init(string: "BACKUP_STREAM_URL")
guard let mediaURL = url else {
print("invalid mediaURL")
return
}
let customData = [
"liveConfigID": "MANIFEST_URL",
"networkCode": "NETWORK-CODE",
"customAssetKey": "CUSTOM_ASSET_KEY",
"region": "API_KEY"
]
let mediaInfoBuilder = GCKMediaInformationBuilder.init(contentId: "CONTENT_ID")
mediaInfoBuilder.contentURL = mediaUrl
mediaInfoBuilder.contentType = @"CONTENT_STREAM_MIMETYPE"
mediaInfoBuilder.streamType = GCKMediaStreamType.Live
mediaInfoBuilder.customData = customData
mediaInformation = mediaInfoBuilder.build()
guard let mediaInfo = mediaInformation else {
print("invalid mediaInformation")
return
}
if let request = sessionManager.currentSession?.remoteMediaClient?.loadMedia
(mediaInfo) {
request.delegate = self
}
Herramienta CAC
Para configurar estos valores en el Comando y control de Cast , haz clic en la pestaña Cargar contenido multimedia y configura personalizado tipo de solicitud de carga en LOAD. Luego, reemplaza los datos JSON en el área de texto por este JSON:
{
"media": {
"contentId": "CONTENT_ID",
"contentUrl": "BACKUP_STREAM_URL",
"contentType": ""CONTENT_STREAM_MIMETYPE"",
"streamType": "LIVE",
"customData": {
"liveConfigID": "MANIFEST_URL",
"networkCode": "NETWORK-CODE",
"customAssetKey": "CUSTOM_ASSET_KEY",
"oAuthToken": "API_KEY"
}
}
}
Esta solicitud de carga personalizada se puede enviar al receptor para probar el resto del pasos.
Cómo crear un receptor CAF básico
Crear un receptor web personalizado, como se ve en el Receptor web personalizado del SDK de CAF guía.
El código de tu receptor debería verse de la siguiente manera:
<html>
<head>
<script
src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js">
</script>
</head>
<body>
<cast-media-player></cast-media-player>
<script>
// ...
</script>
</body>
</html>
Importa el SDK de IMA de DAI y obtén el Administrador del reproductor
Agregue una etiqueta de secuencia de comandos para importar el SDK de IMA de DAI para CAF a su receptor web. después de que la secuencia de comandos carga el CAF. En la etiqueta de la secuencia de comandos, almacena el contexto del receptor y como constantes antes de iniciar el receptor.
<html>
<head>
<script
src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
<script src="//imasdk.googleapis.com/js/sdkloader/cast_dai.js"></script>
</head>
<body>
<cast-media-player></cast-media-player>
<script>
const castContext = cast.framework.CastReceiverContext.getInstance();
const playerManager = castContext.getPlayerManager();
castContext.start();
</script>
</body>
</html>
Inicializa IMA Stream Manager
Inicializa IMA Stream Manager.
<html>
<head>
<script type="text/javascript"
src="//www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js"></script>
<script src="//imasdk.googleapis.com/js/sdkloader/cast_dai.js"></script>
</head>
<body>
<cast-media-player></cast-media-player>
<script>
const castContext = cast.framework.CastReceiverContext.getInstance();
const playerManager = castContext.getPlayerManager();
const streamManager = new google.ima.cast.dai.api.StreamManager();
castContext.start();
</script>
</body>
</html>
Crea el Interceptor de carga de Stream Manager
Antes de que tus elementos multimedia se pasen a CAF, crea la solicitud de transmisión en un CARGAR mensaje un interceptor.
const castContext = cast.framework.CastReceiverContext.getInstance();
const playerManager = castContext.getPlayerManager();
const streamManager = new google.ima.cast.dai.api.StreamManager();
/**
* Creates a livestream request object for a pod serving stream.
* @param {!LoadRequestData} castRequest The request object from the cast sender
* @return {StreamRequest} an IMA stream request
*/
const createStreamRequest = (castRequest) => { /* ... */};
/**
* Initates a DAI stream request for the final stream manifest.
* @param {!LoadRequestData} castRequest The request object from the cast sender
* @return {Promise<LoadRequestData>} a promise that resolves to an updated castRequest, containing the DAI stream manifest
*/
const createDAICastRequest = (castRequest) => {
return streamManager.requestStream(castRequest, createStreamRequest(castRequest))
.then((castRequestWithPodStreamData) => {
console.log('Successfully made DAI stream request.');
// ...
return castRequestWithPodStreamData;
})
.catch((error) => {
console.log('Failed to make DAI stream request.');
// CAF will automatically fallback to the content URL
// that it can read from the castRequest object.
return castRequest;
});
};
playerManager.setMessageInterceptor(
cast.framework.messages.MessageType.LOAD, createDAICastRequest);
castContext.start();
Crea la solicitud de transmisión
Completa la función createStreamRequest
para crear una transmisión de entrega de grupos de anuncios basada en
en la solicitud de carga de CAF.
/**
* Creates a livestream request object for a pod serving stream.
* @param {!LoadRequestData} castRequest The request object from the cast sender
* @return {StreamRequest} an IMA stream request
*/
const createStreamRequest = (castRequest) => {
const streamRequest = new google.ima.cast.dai.api.PodStreamRequest();
const customData = castRequest.media.customData;
streamRequest.customAssetKey = customData.customAssetKey;
streamRequest.networkCode = customData.networkCode;
streamRequest.apiKey = customData.apiKey;
return streamRequest;
};
Reemplaza la URL de contenido por la URL del manifiesto y el ID de transmisión
Si se realiza correctamente la solicitud de transmisión, usa streamManager.getStreamId()
para
recuperar el ID de la transmisión e insertarlo en la manifestUrl, reemplazando
[[STREAMID]]
Luego, reemplaza el contentUrl
existente por el nuevo.
manifestUrl
para que CAF reproduzca la transmisión en vivo con los grupos de anuncios unidos.
/**
* Initates a DAI stream request for the final stream manifest.
* @param {!LoadRequestData} castRequest The request object from the cast sender
* @return {Promise<LoadRequestData>} a promise that resolves to an updated castRequest, containing the DAI stream manifest
*/
const createDAICastRequest = (castRequest) => {
return streamManager.requestStream(castRequest, createStreamRequest(castRequest))
.then((castRequestWithPodStreamData) => {
console.log('Successfully made DAI stream request.');
const media = castRequestWithPodStreamData.media;
const manifestUrl = media.customData.manifestUrl || "";
if (manifestUrl) {
console.log('Replacing the contentURL with the manifest URL and stream ID');
const streamId = streamManager.getStreamId();
castRequestWithPodStreamData.media.contentUrl = manifestUrl.replace('[[STREAMID]]', streamId);
return castRequestWithPodStreamData;
})
.catch((error) => {
console.log('Failed to make DAI stream request.');
// CAF will automatically fallback to the content URL
// that it can read from the castRequest object.
return castRequest;
});
};
Ahora puedes solicitar y reproducir transmisiones de entrega de Pods con la aplicación de transmisión y el SDK de DAI de IMA para CAF.