Cómo usar el Android SDK

Anterior Siguiente

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();