Définir votre région
Lorsque le SDK est chargé, il reçoit la configuration de sa station de nos serveurs d'approvisionnement. Pour accélérer le processus, nous disposons des serveurs d'approvisionnement dans plusieurs régions, notamment en Amérique du Nord, en Europe et en Asie. Pour de meilleurs résultats, utilisez les serveurs d'approvisionnement les plus proches de vos stations.
La région d'approvisionnement par défaut est l'Amérique du Nord ; pour utiliser l’une des autres régions, spécifiez-la comme dans l'exemple ci-dessous, où « AP » (Asie) est utilisé.
// 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();
Auto-play (lecture automatique)
Pour des raisons de mesure et d'expérience utilisateur, l'utilisation de la lecture automatique est fortement déconseillée.  La lecture automatique est définie comme la diffusion de la station/du flux sans aucune interaction de l'utilisateur pour lancer la lecture. Si vous mettez en place une stratégie de lecture automatique, vous devez ajouter autoplay = 1
valeur Ă l'objet targetingParams
object lors de l’appel de l’objet play
sur le 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();
Audio Focus
Utilisez TritonPlayer.SETTINGS_HANDLE_AUDIO_FOCUS
pour activer ou désactiver la gestion automatique de la mise au point audio de l’appareil. Si vous souhaitez contrôler manuellement le focus audio, vous pouvez définir cette option comme false. La valeur par défaut est true.
Obligatoire : Non.
Options (booléennes) :
Automatique (TritonPlayer gérera automatiquement tout changement de focus audio) :
true
Manuel (TritonPlayer ne tiendra pas compte des modifications du focus 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();
Diffuser une station
// 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();
Diffuser des montages HLS spécifiques
// 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();
Changer de station
Pour diffuser une nouvelle station, vous devez créer un nouveau lecteur.
// 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();
Publicités audio cibles
Dans cet exemple, le suivi de localisation est activé. Le code postal ne sera utilisé que si l’utilisateur a désactivé l’accès à l’emplacement dans le système d’exploitation. Consultez StreamUrlBuilder dans la référence de l’API pour plus d’options de ciblage.
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();
Exemple utilisant des segments 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();
Modifier la vitesse de lecture du podcast
Pour modifier la vitesse de lecture d’un podcast, utilisez changeSpeed
avec une valeur flottante comme argument de vitesse. Exemple :
tritonPlayer.changeSpeed(1.5f)
... changerait la lecture pour passer à 1,5 fois la vitesse d’origine.
Autorisation par jeton (auto-signée)
Pour que la recréation de jetons à la reconnexion fonctionne, l'un des paramètres suivants est requis :
TritonPlayer.SETTINGS_AUTH_SECRET_KEY
TritonPlayer.SETTINGS_AUTH_KEY_ID
Si tous les paramètres sont remplis, vous n’avez pas besoin de générer le jeton vous-même (bien que vous puissiez le faire si vous le souhaitez).
// 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();
Recevoir des marqueurs
// 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();
Afficher les bannières de synchronisation
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);
}
Diffuser un flux Ă la demande
// 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();
Diffuser sur les appareils Google Cast
Le SDK Triton Digital Mobile prend en charge les appareils Google Cast pour les flux en direct et à la demande, mais pas pour la publicité à la demande. Il existe quelques appareils qui prennent en charge le protocole Google Cast, tels que le lecteur Chromecast et le lecteur Nexus.
Récepteur multimédia de base
La démo de l'application dans le fichier ZIP montre comment procéder à une mise en place de base.
Récepteur multimédia stylé
Plus complexe à mettre en place que le récepteur multimédia de base.
Liens utiles :
Obtenir l'histoire de la chanson de la station
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
}
}
Afficher les annonces Ă la demande via l'application
Les interstitiels peuvent être des publicités vidéo ou 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();
Afficher des publicités à la demande avec une interface utilisateur personnalisée
Ceci est beaucoup plus complexe que d'utiliser la classe interstitielle. Il existe un exemple dans la démo de l'application dans le fichier ZIP.
TTags personnalisés - Lecteur
Les TTags personnalisées (par exemple, mobile:ford
) peuvent être appliquées aux URL de streaming en ajoutant un tableau au paramètre réglages. SETTINGS_TTAGS
.
TTags personnalisés - Exemple de lecteur
// 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 personnalisés - Publicités à la demande
Les TTags personnalisées (par exemple, mobile:ford
) peuvent être appliquées aux URL à la demande en appelant addTTags( String[] )
sur AdRequestBuilder
.
TTags personnalisés - Exemple de publicités à la demande
// 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();
Identifiant multi-auditeur
Permet d’envoyer plusieurs identifiants d’utilisateur ou d’appareil, en plus de l’identifiant principal de l’auditeur (lsid
paramètre). Ce dernier est toujours utilisé par Triton pour le plafonnement de fréquence, la mesure, etc., tandis que les autres identifiants peuvent être fournis à des plateformes de demande tierces afin d’améliorer la monétisation.
Les valeurs de l’attribut LISTENER_ID_TYPE
Sont :
ListenerIdType.PPID
ListenerIdType.IDFA
ListenerIdType.GAID
ListenerIdType.APP
Exemple :
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();
Faible délai et mise en mémoire tampon adaptative
Quand il est défini sur -1 / AUTO MODE
le SDK utilise une petite fenêtre de mémoire tampon (deux secondes) lors de la connexion initiale, ce qui réduit le délai entre la lecture instantanée et le temps réel. (Ceci est utile pour les événements sportifs, les concours en direct, etc.)
Comme la connexion a une petite fenêtre de mémoire tampon, en cas d'encombrement du réseau ou de faible bande passante, la mémoire tampon sera multipliée par deux si l'appareil ne peut pas maintenir une connexion correcte.
SI une valeur supérieure à zéro est définie (>0
) le SDK mettra en mĂ©moire tampon autant de secondes d’audio avant de commencer la lecture.Â
Utilisez SettingsLowDelayKey
avec un objet NSNumber pour cette fonctionnalité. Valeurs valides : -1
(AUTO mode), 0
(désactivé) 2
pour 60
secondes.
Par défaut la fonctionnalité est désactivée ( 0
).
Exemple de faible délai 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
Pour plus d’informations sur Timeshift Radio, consultez la fonction spécification de streaming
Pour que le flux Timeshift fonctionne, la commande suivante est requise :
TritonPlayer.SETTINGS_STATION_MOUNT
Rechercher la fonction :
Pour réaliser des recherches à l'avant et à l'arrière, utilisez la seek()
, qui prend une valeur en secondes comme paramètre. Si le paramètre est positif, vous cherchez vers l’avant ; s’il est négatif, vous cherchez en arrière. Si la valeur est nulle, vous recherchez le point en direct.
Exemple : 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);
Rechercher une fonction en direct :
Pour retourner au flux en direct, utilisez la seekToLive()
fonction. Cela arrêtera le flux Timeshift et entraînera une nouvelle connexion au flux en direct.
Obtenez la fonction du flux du Cloud
Pour obtenir les programmes associés à la station, utilisez la getCloudStreamInfo()
Quand la liste des programmes sera reçue, une notification sera envoyée à OnCloudStreamInfoReceivedListener
dans la catégorie MediaPlayer.
L'objet JSON ressemble Ă cela :
{
"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"
}
}
}
Fonction Play Program (String programid) :
Utilisez playProgram(String programId)
afin de sélectionner un programme spécifique. programId
 est la program_episode_id
qui est un objet JSON retourné.
Paramètre DIST :
Pour utiliser le paramètre dist avec Timeshift, vous devez ajouter les deux paramètres de timeshifting :
StreamUrlBuilder.DIST_TIMESHIFT
StreamUrlBuilder.DIST
Le
StreamUrlBuilder.DIST
Le paramètre est utilisé quand le flux est connecté au mode en direct.Le
StreamUrlBuilder.DIST_TIMESHIFT
Ce paramètre est utilisé quand le flux est en mode Timeshift (décalage temporel).
Voici ci-dessous un exemple pour savoir comment ajouter les paramètres.
// 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();