Para calcular mediciones precisas, el reproductor de audio y la aplicación deben hacer las activaciones apropiadas en los servicios de streaming o pure play. Para limitar la cantidad de audio transferido por un servidor de streaming y que no se escucha, o para limitar la cantidad de audio que se escucha y no se cuenta en las mediciones de la audiencia, los creadores del reproductor y de la aplicación deben seguir estas pautas.
Tenga en cuenta que durante el proceso de implementación, Triton Digital realiza auditorías al publisher en todos los clientes WCM nuevos para poder garantizar que las redes de distribución de contenido (CDN) no están manipulando los datos y que estamos informando mediciones válidas. Triton Digital también prueba y verifica que las pautas descritas a continuación sean respetadas.
Stop vs. Pause
A menos que el servidor de streaming pueda realmente mantener el stream y pausar el contenido, la aplicación y el reproductor deben detener el stream y reanudarlo presionando nuevamente el botón Play. Esto da como resultado dos sesiones distintas y no se enviará audio mientras el oyente esté en "Stop". (Consulte también: HTML5 <audio> Consideraciones sobre los elementos: detener el audio).
Reproducción automática
La bandera indica si la sesión se ha iniciado desde la reproducción automática de un reproductor. Los valores posibles son autoplay=0 (no iniciado mediante reproducción automática) y autoplay=1 (iniciado mediante reproducción automática). No se recomienda la reproducción automática de contenido de audio: en algunos casos, los streams con reproducción automática no son audibles ya que el volumen puede estar silenciado mientras el stream sigue estando activo. Triton Digital recomienda que cualquier iniciación de reproducción de contenido de audio sea determinada por un gesto manifiesto del usuario, como por ejemplo un toque o un clic.
Iniciar y detener en el momento adecuado
La transmisión de audio solo debe iniciarse cuando el oyente presiona el botón Reproducir.
Cuando un oyente presiona el botón Detener, cierra la pestaña del navegador de un reproductor o cierra una aplicación, el audio debe detenerse para el oyente y la solicitud de detención debe llegar al servidor de streaming.
El servidor de streaming debe informar apropiadamente el tiempo. Todos los servidores de streaming deben usar el tiempo universal coordinado (UTC).
Si el reproductor o la aplicación utiliza el servicio Triton Digital Listener Tracking (LT), debería enviar un ping LT al detener. Esto permite medir el último fragmento de audio.
Ver también: Consideraciones del elemento HTML5 <audio>: precargar/prebuscar.
Silenciado/requisito de audibilidad
El reproductor o la aplicación debe tener en cuenta que la audibilidad es un requisito para medir el contenido de audio digital. Por lo tanto, cuando corresponda, el reproductor o la aplicación deben ser capaces de detectar los estados "silenciar" y "reactivar" del dispositivo y/o los eventos de "volumen cero/volumen distinto de cero" de manera similar a los eventos Stop/Play. "Volumen cero" debe tratarse igual que "silencio".
Enlaces directos en navegadores web
Los reproductores web nunca deben abrir URL MP3 o AAC de streaming directamente en los reproductores internos de los navegadores web. Aunque el navegador puede usar su reproductor interno para reproducir el contenido de audio, se sabe que estos reproductores internos pueden producir un tráfico no válido.
Sesiones largas
Desde la perspectiva del reproductor/aplicación, es una buena práctica asegurarse de que haya una interacción del usuario luego de varias horas.
Uso de ID de visitante (oyente) para la metodología LT
Como figura en la documentación de API LT, se requiere un identificador único para cada oyente a fin de poder calcular apropiadamente el CUME. Este identificador de visitante debería representar una clave única que haga referencia a una suscripción de un oyente al publisher. Triton Digital usa esa propiedad sin modificaciones y el publisher puede ofuscar la propiedad si así lo desea.
Se requiere cache-busting para la metodología LT
Se debe usar una marca de tiempo o un número aleatorio de cache-busting con la metodología LT. Este número debe ser diferente en cada nueva activación para evitar retornos almacenados en memoria caché desde un navegador o proxy. Una marca de tiempo o un número aleatorio de 32 bits se adapta perfectamente a esto.
Consideraciones sobre HTML5. Precarga/búsqueda previa
No se recomienda en lo absoluto la prebúsqueda de contenido de audio. En la mayoría de las situaciones, el oyente no escuchará la transmisión de audio y, por lo tanto, no debe contarse como una sesión válida. La mejor manera de evitar problemas de medición con la prebúsqueda es simplemente no usarlo. Las recomendaciones que se describen a continuación deberían servir para eliminar el problema.
- Preferido: el atributo de precarga del elemento <audio> debe establecerse en ninguno. Nunca debe configurarse en automático o dejarse en blanco, ya que esas opciones transfieren la decisión al propio navegador. Vea el ejemplo de código a continuación.
- Alternativamente, el atributo de precarga del elemento <audio> incluye la opción de metadatos , que recupera/precarga solo los metadatos de audio. Esto podría no causar ningún problema. Sin embargo, si elige usar preload="metadata" en lugar de preload="none", debe probar a fondo el reproductor en múltiples plataformas y navegadores para asegurarse de que realmente es necesario y se comporta como se espera.
Consideraciones sobre HTML5: detener el audio
¡Importante! El elemento HTML5 <audio> no tiene una verdadera función de "detención", solo una "pausa".Algunas transmisiones en vivo, particularmente Icecast, son vistas por el navegador como "un archivo grande para descargar" en lugar de una transmisión en vivo. En tales casos, la descarga puede continuar en segundo plano cuando el stream está pausado. Una solución para este caso es tomar medidas adicionales para detener el stream o la descarga del archivo desde la página web en la que está incrustado el reproductor, y esas medidas pueden ser diferentes según cada navegador y sistema operativo. En la mayoría de los casos, se debe indicar al elemento <audio> que realice otra acción, como "cargar otra cosa para reproducir" cuando se inicia la acción del usuario para pausar. El "algo más" ni siquiera necesita jugar realmente.
La especificación HTML5 establece:
Si se establece o cambia un atributo src de un elemento multimedia, el agente de usuario debe invocar el algoritmo de carga de elementos multimedia del elemento multimedia. (La eliminación del atributo src no hace esto, incluso si hay elementos de origen presentes).
Debido a la implementación de Apple de la especificación HTML5 en el navegador Safari en iOS y macOS, cuando un reproductor en una pestaña del navegador web Safari está en pausa, el audio deja de reproducirse, pero los datos continúan transmitiéndose en segundo plano hasta que se cierra la pestaña del navegador. Lo mismo sucede si se hace streaming a través de un reproductor web en un dispositivo iOS en Safari para iOS y el usuario presiona el botón de apagado/encendido del dispositivo para desactivar su pantalla. En el navegador Chrome en iOS, el usuario debe detener todos los streams.
Consulte el ejemplo de código 1 a continuación para ver un ejemplo de cómo el SDK de Triton Digital Web Player 2.9 implementa una solución alternativa a los problemas anteriores. Tenga en cuenta que iOS detiene el stream recién después de un minuto, excepto que se cierre la pestaña del navegador (en cuyo caso el stream se detiene inmediatamente). Esta es la alternativa de solución en Safari para iOS:
- Llame a pause() en el nodo de audio
- No borre el atributo src del nodo de audio.
Se pueden completar estas otras acciones:
- Simplemente recargar la página que contiene el reproductor. (Esta es la solución más fácil, y la que se prueba bien en todas las situaciones que hemos evaluado hasta ahora, pero podría no ser apropiada para todos. Depende de la complejidad de la página que se va a recargar).
- Reproduzca un archivo de audio válido conocido, como uno que reproduzca unos segundos de silencio.
- Cargue un valor en blanco ("") o "Acerca de:blank" en el atributo de origen.
- Cambie el origen a un montaje ficticio:
http://<YOUR-AUDIO-STREAM>/invalidmount
Vea los ejemplos de código 2 y 3 a continuación para obtener más información.
Ejemplos de código
Ejemplo de código 1: detener la reproducción de audio
El ejemplo de código de abajo detiene el audio e implementa una solución alternativa para el problema con la pausa en el navegador Safari.
stop: function () {
var context = this;
if ( fsm.is( STATE.STOPPED ) ) return;
this.audioNode = getAudioNode.call( this );
fsm.stop();
this.audioNode.pause();
if( OsPlatform.name !== 'Safari' || this.audioNode.src.indexOf('m3u8') > -1 || this.useHlsLibrary) {
setTimeout(function(){
context.audioNode.src = '';
context.url = null;
context.resetAudioNode();
}, 300);
}else{
setTimeout(function(){
context.url = null;
context.resetAudioNode();
}, 300);
}
if( OsPlatform.os.family === 'iOS' && OsPlatform.name === 'Chrome Mobile') {
window.stop();
}
if ( this.useHlsLibrary ) {
this.hls.detachMedia();
this.hls.stopLoad();
this.hls.destroy();
}
},
Ejemplo 2: recargar la página
El código de ejemplo a continuación muestra el uso de preload="none" y la recarga de la página que contiene el reproductor.
<controles de audio preload="none" height="32" width="300" onpause="location.reload();" src="<PLAYER PAGE URL>" type="audio/mpeg" />
Notas de códigos:
- Reemplace "<PLAYER PAGE URL>" por el URL real de la página de su reproductor.
- Los atributos de altura y anchura que se muestran son solo ejemplos; Utilice la altura y anchura reales de su reproductor.
Ejemplo 3: usar un archivo de audio válido conocido
El código de ejemplo a continuación muestra el uso de preload="none" y la carga de un archivo MP3 corto (un archivo de audio válido conocido) para detener la descarga del archivo en segundo plano.
<audio controls preload="none" height="32" width="300" onplay="startAudio();" onpause="stopAudio();"
src="http://download.andomedia.com/Creative/208/0/2080711_1.mp3" type="audio/mpeg" />
<script>
// -- Set audio source before playing in case the pause/stop button has cleared it
function startAudio()
{
var audio = document.getElementsByTagName("audio")[0];
if (audio.src!="http://<YOUR-AUDIO-STREAM>")
{
audio.src="<YOUR-AUDIO-STREAM>";
if(navigator.userAgent.toLowerCase().indexOf('firefox') > -1){ audio.load(); }
audio.play();
}
}
// -- Clear the audio source - this should stop the download. Pausing alone will not.
function stopAudio()
{
var audio = document.getElementsByTagName("audio")[0];
audio.src="http://download.andomedia.com/Creative/208/0/2080711_1.mp3";
if(navigator.userAgent.toLowerCase().indexOf('firefox') > -1){ audio.load(); }
}
</script>
Notas de códigos:
- Reemplazar
http://<YOUR-AUDIO-STREAM>
con la URL real de su stream de audio. - audio.src="http://download.andomedia.com/Creative/208/0/2080711_1.mp3" es un archivo de audio silencioso de tres segundos en vivo alojado por Triton Digital que puede usar mientras realiza pruebas. Si elige usar este método luego de hacer pruebas, reemplace este URL por un enlace de su propio archivo de audio silencioso. El archivo de Triton Digital podría cambiar de nombre o eliminarse en cualquier momento sin previo aviso.