Configure su región
Cuando se carga el SDK, obtiene su configuración de emisora de nuestros servicios de aprovisionamiento. Para acelerar el proceso, contamos con servidores de aprovisionamiento en diversas regiones, incluidas América del Norte, Europa y Asia. Para la obtención de mejores resultados, utilice los servidores de aprovisionamiento que se encuentran más cerca de sus estaciones.
La región de aprovisionamiento predeterminada es América del Norte; para usar una de las otras regiones, especifíquela según se observa en el siguiente ejemplo, en el que se utiliza "AP" (Asia).
// Create the player settings.
Bundle settings = new Bundle();
settings.putString(TritonPlayer.SETTINGS_STATION_BROADCASTER, "Triton Digital");
settings.putString(TritonPlayer.SETTINGS_STATION_NAME, "MOBILEFM");
settings.putString(TritonPlayer.SETTINGS_STATION_MOUNT, "MOBILEFM_AACV2");
settings.putString(TritonPlayer.SettingsPlayerServicesRegion, "AP"); // AP = Asia | EU = Europe | Omit this configuration option for North America
// Create the player.
TritonPlayer player = new TritonPlayer(this, settings);
player.play();
Reproducción automática
Por motivos de medición, así como por la experiencia del usuario, se desaconseja encarecidamente el uso de la reproducción automática. La reproducción automática se define como la reproducción de la estación/stream sin que ninguna interacción del usuario inicie la reproducción. Si implementa una estrategia de reproducción automática, debe agregar la autoplay = 1
valor para el targetingParams
al llamar al objeto play
en el SDK.
// Create the player settings.
Bundle settings = new Bundle();
settings.putString(TritonPlayer.SETTINGS_STATION_BROADCASTER, "Triton Digital");
settings.putString(TritonPlayer.SETTINGS_STATION_NAME, "MOBILEFM");
settings.putString(TritonPlayer.SETTINGS_STATION_MOUNT, "MOBILEFM_AACV2");
settings.putString(TritonPlayer.SettingsPlayerServicesRegion, "AP"); // AP = Asia | EU = Europe | Omit this configuration option for North America
// Create the player.
TritonPlayer player = new TritonPlayer(this, settings);
player.play();
Enfoque de audio
Use TritonPlayer.SETTINGS_HANDLE_AUDIO_FOCUS
para habilitar o deshabilitar el manejo automático del enfoque de audio del dispositivo. En caso de que desee controlar el enfoque de audio manualmente, puede establecer esta opción en false. El valor predeterminado es true.
Requerido: No.
Opciones (booleanas):
Automático (TritonPlayer manejará cualquier cambio de enfoque de audio automáticamente):
true
Manual (TritonPlayer ignorará los cambios de enfoque de audio):
false
// Create the player settings.
Bundle settings = new Bundle();
settings.putString(TritonPlayer.SETTINGS_STATION_BROADCASTER, "Triton Digital");
settings.putString(TritonPlayer.SETTINGS_STATION_NAME, "MOBILEFM");
settings.putString(TritonPlayer.SETTINGS_STATION_MOUNT, "MOBILEFM_AACV2");
settings.putBoolean(TritonPlayer.SETTINGS_HANDLE_AUDIO_FOCUS, false); // Audio Focus handled manually
// Create the player.
TritonPlayer player = new TritonPlayer(this, settings);
player.play();
Reproducir una estación
// Create the player settings.
Bundle settings = new Bundle();
settings.putString(TritonPlayer.SETTINGS_STATION_BROADCASTER, "Triton Digital");
settings.putString(TritonPlayer.SETTINGS_STATION_NAME, "MOBILEFM");
settings.putString(TritonPlayer.SETTINGS_STATION_MOUNT, "MOBILEFM_AACV2");
// Create the player.
TritonPlayer player = new TritonPlayer(this, settings);
player.play();
Reproducir un montaje HLS específico
// Create the player settings.
Bundle settings = new Bundle();
settings.putString(TritonPlayer.SETTINGS_STATION_BROADCASTER, "Triton Digital");
settings.putString(TritonPlayer.SETTINGS_STATION_NAME, "HLS_PLAYERS");
settings.putString(TritonPlayer.SETTINGS_STATION_MOUNT, "HLS_PLAYERSAAC");
settings.putString(TritonPlayer.SETTINGS_TRANSPORT, TritonPlayer.TRANSPORT_HLS);
// Create the player.
TritonPlayer player = new TritonPlayer(this, settings);
player.play();
Cambie la estación
Para reproducir una nueva estación, debe crear un nuevo reproductor.
// Release the current player instance.
if (player != null)
{
player.release();
}
// Recreate the player with the next station settings.
player = new TritonPlayer(this, nextStationSettings);
player.play();
Dirija los anuncios de audio
En este ejemplo, se ha habilitado el rastreo de ubicación. El código postal solo se utilizará si el usuario ha deshabilitado el acceso a la ubicación en el O.S. Consulte StreamUrlBuilder en la referencia de la API para obtener más opciones de direccionamiento.
AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
// Create the targeting parameters
HashMap<String, String> targetingParams = new HashMap();
targetingParams.put(StreamUrlBuilder.COUNTRY_CODE, "US");
targetingParams.put(StreamUrlBuilder.POSTAL_CODE, "12345");
targetingParams.put(StreamUrlBuilder.GENDER, "m");
targetingParams.put(StreamUrlBuilder.YEAR_OF_BIRTH, "1990");
// Create the player settings.
Bundle settings = new Bundle();
settings.putBoolean(TritonPlayer.SETTINGS_TARGETING_LOCATION_TRACKING_ENABLED, true);
settings.putSerializable(TritonPlayer.SETTINGS_TARGETING_PARAMS, targetingParams);
settings.putString(TritonPlayer.SETTINGS_STATION_BROADCASTER, "Triton Digital");
settings.putString(TritonPlayer.SETTINGS_STATION_NAME, "MOBILEFM");
settings.putString(TritonPlayer.SETTINGS_STATION_MOUNT, "MOBILEFM_AACV2");
// Create the player.
TritonPlayer player = new TritonPlayer(this, settings);
player.play();
Ejemplo usando segmentos DMP:
//Add DMP SEGMENTS
HashMap<String, List<Integer>> dmpSegments = new HashMap();
dmpSegments.put("permutive", Arrays.asList(1234,5769));
dmpSegments.put("adobe", Arrays.asList(4321,8765));
// Create the player settings.
Bundle settings = new Bundle();
settings.putBoolean(TritonPlayer.SETTINGS_TARGETING_LOCATION_TRACKING_ENABLED, true);
settings.putSerializable(TritonPlayer.SETTINGS_TARGETING_PARAMS, targetingParams);
settings.putSerializable(TritonPlayer.SETTINGS_DMP_SEGMENTS, dmpSegments);
settings.putString(TritonPlayer.SETTINGS_STATION_BROADCASTER, "Triton Digital");
settings.putString(TritonPlayer.SETTINGS_STATION_NAME, "MOBILEFM");
settings.putString(TritonPlayer.SETTINGS_STATION_MOUNT, "MOBILEFM_AACV2");
// Create the player.
TritonPlayer player = new TritonPlayer(this, settings);
player.play();
Cambiar la velocidad de reproducción de podcasts
Para cambiar la velocidad de reproducción de un podcast, use changeSpeed
con un valor float como argumento de velocidad. Ejemplo:
tritonPlayer.changeSpeed(1.5f)
... cambiaría la reproducción a 1,5 veces la velocidad original.
Autorización de token (autofirmado)
Para poder recrear los tokens en la reconexión de trabajo, se requiere cualquiera de los siguientes parámetros:
TritonPlayer.SETTINGS_AUTH_SECRET_KEY
TritonPlayer.SETTINGS_AUTH_KEY_ID
Si se completan todos los parámetros, entonces no tiene que generar el token usted mismo (aunque puede hacerlo si lo desea).
// Create the targeting parameters
HashMap<String, String> targetingParams = new HashMap();
targetingParams.put(StreamUrlBuilder.COUNTRY_CODE, "US");
targetingParams.put(StreamUrlBuilder.POSTAL_CODE, "12345");
targetingParams.put(StreamUrlBuilder.GENDER, "m");
targetingParams.put(StreamUrlBuilder.YEAR_OF_BIRTH, "1990");
// Create the authorization token
String token = AuthUtil.createJwtToken("MySecretKey", "MySecretKeyId", true, "foo@bar.com", targetingParams);
// Create the player settings.
Bundle settings = new Bundle();
settings.putSerializable(TritonPlayer.SETTINGS_TARGETING_PARAMS, targetingParams);
settings.putString(TritonPlayer.SETTINGS_AUTH_TOKEN, token);
settings.putString(TritonPlayer.SETTINGS_STATION_BROADCASTER, "Triton Digital");
settings.putString(TritonPlayer.SETTINGS_STATION_NAME, "MOBILEFM");
settings.putString(TritonPlayer.SETTINGS_STATION_MOUNT, "MOBILEFM_AACV2");
settings.putString(TritonPlayer.SETTINGS_AUTH_SECRET_KEY, "1234566");
settings.putString(TritonPlayer.SETTINGS_AUTH_KEY_ID, "ABCDEF");
settings.putBoolean(TritonPlayer.SETTINGS_AUTH_REGISTERED_USER, true/false);
settings.putString(TritonPlayer.SETTINGS_AUTH_USER_ID, null);
// Create the player.
TritonPlayer player = new TritonPlayer(this, settings);
player.play();
Recibir puntos de referencia
// Create a cue point listener.
OnCuePointReceivedListener listener = new OnCuePointReceivedListener() {
@Override
public void onCuePointReceived(MediaPlayer player, Bundle cuePoint) {
// Handle the cue points here.
}
};
// Create the player.
TritonPlayer player = new TritonPlayer(this, settings);
player.setOnCuePointReceivedListener(listener);
player.play();
Mostrar banners de sincronización
private SyncBannerView mSyncBannerView;
@Override
protected void onPause() {
mSyncBannerView.onPause();
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
mSyncBannerView.onResume();
}
@Override
protected void onDestroy() {
mSyncBannerView.release();
super.onDestroy();
}
@Override
public void onCuePointReceived(MediaPlayer player, Bundle cuePoint) {
// Update the banner. See previous example on how to get cue points.
mSyncBannerView.loadCuePoint(cuePoint);
}
private void initBanner() {
// Get the banner from the layout and set its size.
mSyncBannerView = (SyncBannerView)findViewById(mySyncBannerId);
mSyncBannerView.setBannerSize(320, 50);
}
Reproducir un stream on demand
// Create the player settings.
Bundle settings = new Bundle();
settings.putString(TritonPlayer.SETTINGS_STREAM_URL, "https://storage.googleapis.com/automotive-media/Jazz_In_Paris.mp3");
// Create the player.
TritonPlayer player = new TritonPlayer(this, settings);
player.play();
Reproducir en dispositivos Google Cast
El SDK móvil de Triton Digital es compatible con dispositivos Google Cast para transmisiones en vivo y on demand, pero no para publicidad on demand. Hay unos pocos dispositivos que son compatibles con el protocolo Google Cast, como el reproductor Chromecast y el reproductor Nexus.
Receptor básico de medios
La aplicación de muestra en el archivo ZIP detalla cómo hacer una implementación básica.
Receptor de medios con estilo
Más complejo de implementar que el receptor básico de medios.
Enlaces útiles:
Obtener el historial de canciones de una emisora
public class SongHistoryExample extends Activity implements CuePointHistory.CuePointHistoryListener
{
private CuePointHistory mCuePointHistory;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Init the cue point history object
mCuePointHistory = new CuePointHistory();
mCuePointHistory.setListener(this);
mCuePointHistory.setCueTypeFilter(CuePoint.CUE_TYPE_VALUE_TRACK);
mCuePointHistory.setMaxItems(10);
mCuePointHistory.setMount("MOBILEFM");
// Request the track history
mCuePointHistory.request();
}
@Override
public void onCuePointHistoryReceived(CuePointHistory src, List<Bundle> cuePoints) {
// Handle history here
}
@Override
public void onCuePointHistoryFailed(CuePointHistory src, int errorCode) {
// Handle errors here
}
}
Mostrar anuncios on demand a través de la aplicación
Los anuncios intersticiales pueden ser de video o audio.
AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<activity
android:name="com.tritondigital.ads.InterstitialActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
MyActivity.java
AdRequestBuilder adRequestBuilder = new AdRequestBuilder(this)
.enableLocationTracking(true)
.setHost("http://cmod209.live.streamtheworld.com/ondemand/ars")
.addQueryParameter(AdRequestBuilder.YEAR_OF_BIRTH, 1990)
.addQueryParameter(AdRequestBuilder.GENDER, 'm')
.addQueryParameter(AdRequestBuilder.STATION_ID, "23193");
// Create the interstitial instance
Interstitial interstitial = new Interstitial(this);
//Optional if you want to display the ad countdown timer:
interstitial.setEnableCountDownDisplay(true);
// Display an interstitial ad
interstitial.showAd(adRequestBuilder);
// When exiting your activity
interstitial.release();
Mostrar anuncios on demand con UI personalizada
Esto es mucho más complejo que el uso de la clase intersticial. Hay un ejemplo en la aplicación de muestra en el archivo ZIP.
TTags personalizadas - Reproductor
TTags personalizadas (p. ej., mobile:ford
) se puede aplicar a las URL de streaming agregando una matriz al parámetro settings SETTINGS_TTAGS
.
Ejemplo de TTags personalizadas - Reproductor
// Create the player settings.
Bundle settings = new Bundle();
settings.putString(TritonPlayer.SETTINGS_STATION_BROADCASTER, "Triton Digital");
settings.putString(TritonPlayer.SETTINGS_STATION_NAME, "MOBILEFM");
settings.putString(TritonPlayer.SETTINGS_STATION_MOUNT, "MOBILEFM_AACV2");
String[] tTags = {"mobile:android","cola:diet"};
settings.putStringArray(TritonPlayer.SETTINGS_TTAGS,tTags);
// Create the player.
TritonPlayer player = new TritonPlayer(this, settings);
player.play();
TTags personalizadas - Anuncios on demand
TTags personalizadas (p. ej., mobile:ford
) se puede aplicar a las URL on demand llamando a addTTags( String[] )
en AdRequestBuilder
.
Ejemplo de TTags personalizadas - Anuncios on demand
// Optional Custom TTags
String[] tTags = { "mobile:android", "car:suv" };
AdRequestBuilder adRequestBuilder = new AdRequestBuilder(this)
.enableLocationTracking(true)
.setHost("http://cmod209.live.streamtheworld.com/ondemand/ars")
.addQueryParameter(AdRequestBuilder.YEAR_OF_BIRTH, 1990)
.addQueryParameter(AdRequestBuilder.GENDER, 'm')
.addQueryParameter(AdRequestBuilder.STATION_ID, "23193")
.addTtags(tTags);
// Create the interstitial instance
Interstitial interstitial = new Interstitial(this);
// Display an interstitial ad
interstitial.showAd(adRequestBuilder);
// When exiting your activity
interstitial.release();
ID de oyente múltiple
Proporciona una manera de enviar varios identificadores de usuario o dispositivo, además del ID de oyente principal (lsid
parámetro). Este último sigue siendo utilizado por Triton para la limitación de frecuencia, medición, etc., mientras que las otras ID se pueden proporcionar a plataformas de demanda de terceros para mejorar la monetización.
Los valores de la LISTENER_ID_TYPE
Son:
ListenerIdType.PPID
ListenerIdType.IDFA
ListenerIdType.GAID
ListenerIdType.APP
Ejemplo:
Bundle settings = new Bundle();
settings.putString(TritonPlayer.SETTINGS_STATION_BROADCASTER, "Triton Digital");
settings.putString(TritonPlayer.SETTINGS_STATION_NAME, "MOBILEFM");
settings.putString(TritonPlayer.SETTINGS_STATION_MOUNT, "MOBILEFM_AACV2");
// Add the targeting parameters
HashMap<String, String> targetingParams = new HashMap();
targetingParams.put(StreamUrlBuilder.DIST, "triton-dist-param");
targetingParams.put(StreamUrlBuilder.LISTENER_ID_TYPE, StreamUrlBuilder.ListenerIdType.PPID.getListenerIdType());
targetingParams.put(StreamUrlBuilder.LISTENER_ID_VALUE, "550e8400-e29b-41d4-a716-446655443658");
settings.putSerializable(TritonPlayer.SETTINGS_TARGETING_PARAMS, targetingParams);
// Create the player.
TritonPlayer player = new TritonPlayer(this, settings);
player.play();
Baja demora con almacenamiento adaptable
Cuando se configura en -1 / AUTO MODE
el SDK usa una pequeña ventana de búfer (dos segundos) en la conexión inicial, lo que reduce la cantidad de demora entre la reproducción y el tiempo real. (Esto resulta útil para eventos deportivos, concursos en vivo, etc.)
Debido a que la conexión tiene una pequeña ventana de almacenamiento intermedio, si la red se congestiona o el ancho de banda es bajo, el buffer se duplicará si el dispositivo no puede mantener la conexión apropiada.
Cuando se configura con un valor mayor a cero (>0
) el kit de desarrollo de software almacenará esos segundos de audio antes de comenzar la reproducción.
Use SettingsLowDelayKey
con un objeto NSNumber para esta característica. Valores válidos: -1
(modo AUTO), 0
(Deshabilitado), 2
a 60
segundos.
La función está deshabilitada de forma predeterminada ( 0
).
Ejemplo de baja demora en Android
// Create the player settings.
Bundle settings = new Bundle();
Integer lowDelayValue = 2;
settings.putString(TritonPlayer.SETTINGS_STATION_BROADCASTER, "Triton Digital");
settings.putString(TritonPlayer.SETTINGS_STATION_NAME, "MOBILEFM");
settings.putString(TritonPlayer.SETTINGS_STATION_MOUNT, "MOBILEFM_AACV2");
settings.putInt(TritonPlayer.SETTINGS_LOW_DELAY, lowDelayValue);
// Create the player.
TritonPlayer player = new TritonPlayer(this, settings);
player.play();
Timeshift
Para obtener más información acerca de Timeshift Radio, consulte la Especificación de streaming.
Para que el stream Timeshift funcione, es necesaria la siguiente propiedad:
TritonPlayer.SETTINGS_STATION_MOUNT
Función seek parar buscar:
Para buscar hacia adelante y hacia atrás, use la seek()
, que toma un valor en segundos como parámetro. Si el parámetro es positivo, busca hacia adelante; Si es negativo buscas hacia atrás. Si el valor es cero, entonces busca el punto en vivo.
P. ej.: seek(-10), seek(10), seek(0)
// Create the player settings.
Bundle settings = new Bundle();
settings.putBoolean(TritonPlayer.SETTINGS_TIMESHIFT_ENABLED, true);
settings.putString(TritonPlayer.SETTINGS_STATION_BROADCASTER, "Triton Digital");
settings.putString(TritonPlayer.SETTINGS_STATION_NAME, "MOBILEFM");
settings.putString(TritonPlayer.SETTINGS_STATION_MOUNT, "MOBILEFM_AACV2");
// Create the player.
TritonPlayer player = new TritonPlayer(this, settings);
player.play();
...
player.seek(10);
Función Seek To Live para buscar punto en vivo:
Para volver al stream en vivo, use la función seekToLive()
Función. Esto detendrá el stream de Timeshift y se conectará de nuevo al stream en vivo.
Función Get Cloud Stream para obtener el stream en la nube:
Para obtener los programas asociados con la estación, use la etiqueta getCloudStreamInfo()
Función. Cuando se recibe la lista de programas, se envía una notificación al OnCloudStreamInfoReceivedListener
en la clase MediaPlayer.
El objeto JSON tiene este aspecto:
{
"maximumRewindTimeSec": 10800,
"programs": {
"name": "program",
"program_episode_id": "99999-1678715517259",
"properties": {
"cue_id": "23337",
"cue_time_start": "1678715517259",
"cue_title": "ProgramStart",
"program_id": "99999",
"program_time_start": "1678715517259",
"program_title": "Messy Gossip with Blork",
"stw_cached": "false",
"stw_original_type": "stwcue"
}
}
}
Función Play Program (String programid):
Use playProgram(String programId)
para seleccionar un programa específico. El programId
es el program_episode_id
es decir, en el objeto JSON devuelto.
Parámetro dist:
Para usar el parámetro dist con Timeshift, debe agregar ambos parámetros de timeshifting:
StreamUrlBuilder.DIST_TIMESHIFT
StreamUrlBuilder.DIST
Los módulos
StreamUrlBuilder.DIST
El parámetro se utiliza cuando el stream está conectado en modo en vivo.Los módulos
StreamUrlBuilder.DIST_TIMESHIFT
se utiliza cuando el stream está en modo Timeshift.
El siguiente es un ejemplo de cómo agregar los parámetros:
// Create the targeting parameters
HashMap<String, String> targetingParams = new HashMap();
targetingParams.put(StreamUrlBuilder.DIST_TIMESHIFT, "timeshift-dist-param");
targetingParams.put(StreamUrlBuilder.DIST, "triton-dist-param");
// Create the player settings.
Bundle settings = new Bundle();
settings.putSerializable(TritonPlayer.SETTINGS_TARGETING_PARAMS, targetingParams);
settings.putString(TritonPlayer.SETTINGS_STATION_BROADCASTER, "Triton Digital");
settings.putString(TritonPlayer.SETTINGS_STATION_NAME, "MOBILEFM");
settings.putString(TritonPlayer.SETTINGS_STATION_MOUNT, "MOBILEFM_AACV2");
// Create the player.
TritonPlayer player = new TritonPlayer(this, settings);
player.play();