Utiliser SDK iOS

Précédent Suivant

La section ci-après décrit la méthode pour accomplir les tâches les plus courantes à l'aide de TritonMobileSdk. Le package SDK inclut un exemple de projet Xcode qui présente les fonctionnalités disponibles et montre comment intégrer le SDK dans une application de streaming.

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é.

NSDictionary *settings = @{SettingsStationNameKey : @"MOBILEFM",
                           SettingsBroadcasterKey : @"Triton Digital",
                           SettingsMountKey : @"MOBILEFM_AACV2",
                           SettingsPlayerServicesRegion: @"AP", // AP = Asia | EU = Europe | Omit this configuration option for North America
                           };
 
self.tritonPlayer = [[TritonPlayer alloc] initWithDelegate:self andSettings:settings];
 
...
 
[self.tritonPlayer 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 la autoplay = 1 valeur à l'objet SettingsStreamParamsExtraKey object lors de l’appel de l’objet play sur le SDK.

NSDictionary *settings = @{SettingsStationNameKey : @"MOBILEFM",
                           SettingsBroadcasterKey : @"Triton Digital",
                           SettingsMountKey : @"MOBILEFM_AACV2",
                           SettingsEnableLocationTrackingKey : @(YES),
                           SettingsStreamParamsExtraKey : @{@"autoplay": @"1",
                                                            @"age": @"30"}
                          }; 
self.tritonPlayer = [[TritonPlayer alloc] initWithDelegate:self andSettings:settings];
 
...
 
[self.tritonPlayer play];


Lancer une station

La fonctionnalité de stream est fournie par la classe TritonPlayer . Pour être en mesure de lire, vous devez fournir les paramètres de votre station, à défaut, fournir au moins, le nom et le montage de la station et du diffuseur. Les montages HLS sont pris en charge. Contactez Triton si vous ne disposez pas de cette information. Consultez la référence de l’API pour connaître les autres paramètres disponibles.

NSDictionary *settings = @{SettingsStationNameKey : @"MOBILEFM",
                           SettingsBroadcasterKey : @"Triton Digital",
                           SettingsMountKey : @"MOBILEFM_AACV2",
                           SettingsDebouncingKey: @(0.75) // optional debouncing for the Play action, in seconds : default value is 0.2
                           };
 
self.tritonPlayer = [[TritonPlayer alloc] initWithDelegate:self andSettings:settings];
 
...
 
[self.tritonPlayer play];

Changer de station

Lors du changement de stations, vous devez fournir les paramètres de la nouvelle station. Utilisez la méthode -updateSettings: pour procéder à la configuration. Ceci annulera les paramètres antérieurs, mais n'entrera en vigueur que la prochaine fois où le lecteur s'arrêtera et jouera à nouveau.

// Stop previous stream
[self.tritonPlayer stop];
 
...
 
// Configure and play the new station
NSDictionary *settings = @{SettingsStationNameKey : @"WMSC_S01",
                           SettingsBroadcasterKey : @"Triton Digital",
                           SettingsMountKey : @"WMSC_S01AAC"
                           };
 
[self.tritonPlayer updateSettings:settings];
[self.tritonPlayer play];

Sinon, vous pouvez recréer le lecteur TritonPlayer chaque fois que vous changez de station, mais la procédures susmentionnée est préférable.

Modifier la vitesse de lecture du podcast

Pour modifier la vitesse de lecture d’un podcast, utilisez changePlaybackRate avec une valeur flottante comme argument de vitesse.
Exemple :

(void)setPlaybackRate:{ 
       [self.tritonPlayer changePlaybackRate:1.5]; 
}

... changerait la lecture instantanée à 1,5 fois la vitesse d’origine.

Diffuser lorsque le son est coupé

Vous pouvez configurer le comportement du flux lorsque le son du lecteur est coupé.

SettingsStreamWhileMuted (Objet). Obligatoire : Non.

Utilisez cet objet pour activer ou désactiver la lecture du flux lorsque l’utilisateur coupe le son. La valeur par défaut est NON.

Options :

  • NO - Désactivé (le flux s’arrête lorsque le son est coupé)

  • YES - Activé (le flux continue lorsque le son est coupé, mais l’utilisateur n’entend pas l’audio)

Exemple de code :

NSDictionary *settings = @{SettingsStationNameKey : @"MOBILEFM",
                           SettingsBroadcasterKey : @"Triton Digital",
                           SettingsMountKey : @"MOBILEFM_AACV2",                   
SettingsStreamWhileMuted: @(NO)         //Steam will be stopped when muted.
                           };

self.tritonPlayer = [[TritonPlayer alloc] initWithDelegate:self andSettings:settings];

...

[self.tritonPlayer play];  

Public cible pour publicités audio

Afin de cibler votre audience pour les publicités audio (et les bannières complémentaires correspondantes), vous devez transmettre les paramètres de ciblage aux paramètres de TritonPlayer. Admettons que vous souhaitez cibler des personnes de sexe masculin, âgées de 30 ans et fournir leurs coordonnées géographiques :

NSDictionary *settings = @{SettingsStationNameKey : @"MOBILEFM",
                           SettingsBroadcasterKey : @"Triton Digital",
                           SettingsMountKey : @"MOBILEFM_AACV2",
                           SettingsEnableLocationTrackingKey : @(YES),
                           SettingsStreamParamsExtraKey : @{@"gender": @"m",
                                                            @"age": @"30"}
                          }; 
self.tritonPlayer = [[TritonPlayer alloc] initWithDelegate:self andSettings:settings];
 
...
 
[self.tritonPlayer play];

Quand SettingsEnableLocationTrackingKey Si la réponse est OUI, il utilisera CLLocationManager pour fournir l'emplacement de l'utilisateur (Voir "Géolocalisation"). Les autres paramètres (y compris la géolocalisation manuelle) sont spécifiés dans le dictionnaire à la section SettingsStreamParamsExtraKey. Pour connaître tous les paramètres de ciblage disponibles, consultez le Guide de diffusion en streaming de Triton Digital.

Vous pouvez ajouter des en-têtes de segment de DMP (comme décrit dans les spécifications techniques de la publicité) pour le streaming en direct, les podcasts et les services à la demande en ajoutant les éléments suivants aux paramètres du lecteur (à l’aide d’exemples de DMP de Permutive et d’Adobe) :

SettingsDmpHeadersKey : @{@"permutive": @[@1234,@5679], @"adobe": @[@4321,@8765]},

Par exemple :

NSDictionary *settings = @{SettingsStationNameKey : @"MOBILEFM",
                           SettingsBroadcasterKey : @"Triton Digital",
                           SettingsMountKey : @"MOBILEFM_AACV2",
                           SettingsDmpHeadersKey : @{@"permutive": @[@1234,@5679], @"adobe": @[@4321,@8765]},
                           SettingsDebouncingKey: @(0.75) // optional debouncing for the Play action, in seconds : default value is 0.2
                           };
 
self.tritonPlayer = [[TritonPlayer alloc] initWithDelegate:self andSettings:settings];
...
 
[self.tritonPlayer play];

Autorisation de jeton (auto-signée)

Pour que la recréation de jetons à la reconnexion fonctionne, l'un des paramètres suivants est requis :

  • StreamParamExtraAuthorizationSecretKey

  • StreamParamExtraAuthorizationKeyId

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
NSDictionary *targetingParams =  @{@"gender": @"m",
                                   @"age": @"30"
                                 };
 
// Create the authorization token
NSString *token = [TDAuthUtils createJWTTokenWithSecretKey:@"MySecretKey"
          andSecretKeyId:@"MySecretKeyId" andRegisteredUser:YES andUserId:@"foo@bar.com" andTargetingParameters:targetingParams];
 
 
// Create the player settings.
NSDictionary *settings = @{SettingsStationNameKey : @"BASIC_CONFIG",
                               SettingsBroadcasterKey : @"Triton Digital",
                               SettingsMountKey : self.playerViewController.mountName,
                               SettingsEnableLocationTrackingKey : @(YES),
                               SettingsStreamParamsExtraKey : @{@"banners": @"300x50,320x50"},
                               SettingsTtagKey : @[@"mobile:ios", @"triton:sample"],
                               StreamParamExtraAuthorizationSecretKey: @"4ToEMVkOK1sThhsw",
                               StreamParamExtraAuthorizationUserId: @"",
                               StreamParamExtraAuthorizationKeyId: @"DG83J",
                               StreamParamExtraAuthorizationRegisteredUser: @(YES),
                               };
    [self.tritonPlayer updateSettings:settings];
}
 
// Create the player.
self.tritonPlayer = [[TritonPlayer alloc] initWithDelegate:self andSettings:settings];
[self.tritonPlayer play];

Recevoir les métadonnées du flux (marqueurs)

Une fois que le lecteur est en cours de streaming, il est capable de recevoir des points de repère avec des métadonnées de flux (par ex. chanson en cours de lecture, métadonnées de publicité, etc.)Pour recevoir des points de repère, vous devez implémenter TritonPlayerDelegate's -player:didReceiveCuePointEvent: dans la classe qui sera le délégué de TritonPlayer. CuePointEvent.h définit toutes les constantes des types et clés de points de repère pour récupérer leurs informations.

@interface ViewController() <TritonPlayerDelegate> 
@end
 
@implementation ViewController
...
- (void)viewDidLoad {
    [super viewDidLoad];
    ...
    self.tritonPlayer = [[TritonPlayer alloc] initWithDelegate:self andSettings:settings];
}
 
...
[self.tritonPlayer play];
...
 
- (void)player:(TritonPlayer *)player didReceiveCuePointEvent:(CuePointEvent *)cuePointEvent {
     
    // Check if it's an ad or track cue point
    if ([cuePointEvent.type isEqualToString:EventTypeAd]) {
        // Handle ad information (ex. pass to TDBannerView to render companion banner)
 
    } else if ([cuePointEvent.type isEqualToString:EventTypeTrack]) {
        NSString *currentSongTitle = [inNowPlayingEvent.data objectForKey:CommonCueTitleKey];
        NSString *currentArtistName = [inNowPlayingEvent.data objectForKey:TrackArtistNameKey];
        NSString *currentAlbumName = [inNowPlayingEvent.data objectForKey:TrackAlbumNameKey];
         
        // Do something with track data (update interface, notify user etc.)
    }
}
...
@end


Afficher une bannière complémentaire In-stream (bannière de synchronisation)

@interface ViewController() <TritonPlayerDelegate> 
@property (strong, nonatomic) TDSyncBannerView *adBannerView;
@end
  
@implementation ViewController
...
- (void)viewDidLoad {
    [super viewDidLoad];
    ...
    self.tritonPlayer = [[TritonPlayer alloc] initWithDelegate:self andSettings:settings];
 
    // Create and configure a 320x50 sync banner with a fallback size of 300x50
    self.adBannerView = [[TDSyncBannerView alloc] initWithWidth:320 andHeight:50 andFallbackWidth:300 andFallbackHeight:50];
    [self.view addSubview:self.adBannerView];
}
...
- (void)player:(TritonPlayer *)player didReceiveCuePointEvent:(CuePointEvent *)cuePointEvent {
     
    if ([cuePointEvent.type isEqualToString:EventTypeAd]) {
        [self.adBannerView loadCuePoint:cuePointEvent];
    } 
    ...
}    
...

Afficher une publicité interstitielle

Les publicités interstitielles (avant diffusion, en cours de diffusion) sont des pubs plein écran affichés de manière modale dans une appli. En général, elles sont affichées sur des points de transition naturels de l'appli, par ex. avant ou après la lecture ou lors du changement de station radio.

// Create a TDAdRequestBuilder to build the request string
TDAdRequestURLBuilder *request = [TDAdRequestURLBuilder builderWithHostURL:kRequestUrl];
request.stationId = 12345;
 
// Create a TDInterstitialAd
self.interstitial = [[TDInterstitialAd alloc] init];
 
// Create a TDAdLoader to load the ad from the request
self.adLoader = [[TDAdLoader alloc] init];
[self.adLoader loadAdWithBuilder:requestBuilder completionHandler:^(TDAd *loadedAd, NSError *error) {
        if (error) {
            // Handle error
        } else {
            // Load the ad into the interstitial
            [self.videoInterstitial loadAd:loadedAd];
        }
    }
];

Une fois que l'interstitiel est chargé, il doit être affiché en temps opportun. L'application doit vérifier si l'interstitiel est chargé avant de tenter de le montrer. Si -loaded ne répond pas OUI, la pub ne sera pas affichée. Lors de la diffusion d'un interstitiel, un contrôleur de vision doit être transmis. Il présentera le contrôleur de vision de l'interstitiel.

- (void)playStation {
  if ([self.interstitial loaded]) {
    [self.interstitial presentFromViewController:self];
  }
  // Rest of method logic
}

Vous pouvez ajouter un compte à rebours facultatif à afficher sur une publicité interstitielle. Pour ce faire, activez l’option CountdownDisplay comme le montre l'exemple d'interstitiel vidéo ci-dessous :

// Create a TDAdRequestBuilder to build the request string
TDAdRequestURLBuilder *request = [TDAdRequestURLBuilder builderWithHostURL:kRequestUrl];
request.stationId = 12345;
 
 // Create a TDInterstitialAd
self.videoInterstitial = [[TDInterstitialAd alloc] init];
self.videoInterstitial.enableCountdownDisplay = TRUE;
// Create a TDAdLoader to load the ad from the request
 
self.adLoader = [[TDAdLoader alloc] init];
[self.adLoader loadAdWithBuilder:requestBuilder completionHandler:^(TDAd *loadedAd, NSError *error) {
    if (error) {
       // Handle error
    } else {
      // Load the ad into the interstitial
      [self.videoInterstitial loadAd:loadedAd];
    }
 
    }
 
];

Vous pouvez ajouter des en-têtes de segment de DMP (comme décrit dans les spécifications techniques de la publicité) aux publicités interstitielles comme suit (à l’aide d’exemples de DMP de Permutive et d’Adobe) :

requestBuilder.dmpSegments = @{@"permutive": @[@1234,@5679], @"adobe": @[@4321,@8765]}

Par exemple :

// Create a TDAdRequestBuilder to build the request string
TDAdRequestURLBuilder *requestBuilder = [TDAdRequestURLBuilder builderWithHostURL:kRequestUrl];
 
//Add DMP Segments
requestBuilder.dmpSegments = @{@"permutive": @[@1234,@5679], @"adobe": @[@4321,@8765]};
 
requestBuilder.stationId = 12345;
 
// Create a TDInterstitialAd
self.interstitial = [[TDInterstitialAd alloc] init];
 
// Create a TDAdLoader to load the ad from the request
self.adLoader = [[TDAdLoader alloc] init];
[self.adLoader loadAdWithBuilder:requestBuilder completionHandler:^(TDAd *loadedAd, NSError *error) {
        if (error) {
            // Handle error
        } else {
            // Load the ad into the interstitial
           [self.videoInterstitial loadAd:loadedAd];
        }
    }
];

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. SettingsTtagKey.

TTags personnalisés - Exemple de lecteur

NSDictionary *settings = @{SettingsStationNameKey : @"MOBILEFM",
                           SettingsBroadcasterKey : @"Triton Digital",
                           SettingsTtagKey : @[@"mobile:ios",@"chips:salsa"],
                           SettingsMountKey : @"MOBILEFM_AACV2"
                           };
 
self.tritonPlayer = [[TritonPlayer alloc] initWithDelegate:self andSettings:settings];
 
...
 
[self.tritonPlayer play];

TTags personnalisés - Publicité interstitielle

Les TTags personnalisées (par exemple, mobile: ford) peut être appliqué aux URL des publicités interstitielles en ajoutant les TTags NSArray dans le champ TDAdRequestURLBuilder l'objet

Tags Triton personnalisés - Exemple de pub interstitielle

// Create a TDAdRequestBuilder to build the request string
TDAdRequestURLBuilder *request = [TDAdRequestURLBuilder builderWithHostURL:kRequestUrl];
request.stationId = 12345;
request.TTags = @[ "mobile:ios", "cola:diet" ];
 
// Create a TDInterstitialAd
self.interstitial = [[TDInterstitialAd alloc] init];
 
// Create a TDAdLoader to load the ad from the request
self.adLoader = [[TDAdLoader alloc] init];
[self.adLoader loadAdWithBuilder:requestBuilder completionHandler:^(TDAd *loadedAd, NSError *error) {
        if (error) {
            // Handle error
        } else {
            // Load the ad into the interstitial
            [self.videoInterstitial loadAd:loadedAd];
        }
    }
];

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 StreamParamExtraListenerIdType Sont :

  • ppid

  • idfa

  • gaid

  • app

La valeur de StreamParamExtraListenerIdValue peut être ce que vous décidez.

Exemple :

NSDictionary *settings = @{SettingsStationNameKey : @"BASIC_CONFIG",
                               SettingsBroadcasterKey : @"Triton Digital",
                               SettingsMountKey : @"TRITONRADIOMUSIC",
                               SettingsEnableLocationTrackingKey : @(YES),
                               SettingsStreamParamsExtraKey : @{@"banners": @"300x50,320x50"},
                               SettingsTtagKey : @[@"mobile:ios", @"triton:sample"],
                               StreamParamExtraListenerIdType: @"idfa",
                               StreamParamExtraListenerIdValue: @"triton-app-id",                              
                               };
    [self.tritonPlayer updateSettings:settings];
    [self.tritonPlayer 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 temps de retard faible iOS

NSNumber *delayValue = [NSNumbernumberWithInt:2];
NSDictionary *settings = @{SettingsStationNameKey : @"MOBILEFM",
                           SettingsBroadcasterKey : @"Triton Digital",
                           SettingsLowDelayKey : delayValue,
                           SettingsMountKey : @"MOBILEFM_AACV2"
                           };
 
self.tritonPlayer = [[TritonPlayer alloc] initWithDelegate:self andSettings:settings];
 
...
 
[self.tritonPlayer play]; 

Recevoir des informations sur l'historique de lecture

TDCuePointHistory est utilisée pour accéder aux informations sur l'historique de lecture à partir des serveurs Triton. Cela renvoie une liste de CuePointEvents pour un montage spécifique. Cela permet également la spécification de filtres et la limitation du nombre maximum d'éléments retournés.

@property (strong, nonatomic) TDCuePointHistory *cuePointHistory;
...
 NSString *mount = @"MOBILEFM_AACV2";
 NSInteger maxItems = 20;
 NSArray *filter = @[EventTypeTrack, EventTypeAd];
   
 // Request the history list from the server. The result will be a NSArray of CuePointEvent objects.
 [self.cuePointHistory requestHistoryForMount:mount withMaximumItems:maxItems eventTypeFilter:filter completionHandler:^(NSArray *historyItems, NSError *error) {
     if (error) {
         // Handle the error
     }
 
     // Process the cue point list. Ex. display them in a UITableView
     self.cuePointList = historyItems;
     [self.tableView reloadData];
     ...
 }];

Timeshift

Pour plus d’informations sur Timeshift Radio, consultez la fonction spécification de streaming

Pour utiliser Timeshift, vous devez utiliser un montage compatible avec Timeshift.

NSDictionary *settings = @{SettingsStationNameKey : @"BASIC_CONFIG",
                               SettingsBroadcasterKey : @"Triton Digital",
                               SettingsMountKey : TRITONRADIOMUSICAAC_RW,
                               SettingsEnableLocationTrackingKey : @(YES),
                               SettingsTtagKey : @[@"mobile:ios", @"triton:sample"],
                               StreamParamExtraListenerIdType: @"idfa",
                               StreamParamExtraListenerIdValue: @"triton-app-id",
                               };

Fonction de recherche (vers l’avant ou vers l’arrière) :

  • Ajouter ou supprimer du temps de l’heure de lecture actuelle.

  • Pour rechercher vers l’avant, utilisez un NSTimeInterval positif.

  • Pour effectuer une recherche vers l’arrière, utilisez un NSTimeInterval négatif.

[self.tritonPlayer seekToTimeInterval:self.tritonPlayer.currentPlaybackTime - 30.0];
Example:
//Seek forward
    self.playerViewController.forwardFiredBlock = ^(UIButton *button) {        
        [self.tritonPlayer seekToTimeInterval:self.tritonPlayer.currentPlaybackTime + 10.0];
    };

Seek To Live :

Pour revenir au flux en direct, utilisez seekToLive. Cela arrêtera le flux Timeshift et se reconnectera au flux en direct.

[self.tritonPlayer seekToLive]

Obtenir des informations sur le flux cloud :

Pour obtenir les informations sur le flux cloud, appelez la getCloudStreamInfo méthode et implémentez le didReceiveCloudStreamInfoEvent à partir du TritonPlayerDelegate pour recevoir le rappel. Notez que pour que cela fonctionne, le flux Timeshift devait être lu. Nous travaillons sur une solution qui permettra cela à tout moment.

self.playerViewController.getCloudStreamInfoFiredBlock = ^(UIButton *button) {
        [self.tritonPlayer getCloudStreamInfo];
    };
    
    
- (void)player:(TritonPlayer *)player didReceiveCloudStreamInfoEvent:(NSDictionary *)cloudStreamInfoEvent {
    NSObject *programs = [cloudStreamInfoEvent valueForKey:@"programs"];
    if([programs isKindOfClass:[NSDictionary class]]){
        NSObject *properties = [(NSDictionary *)programs valueForKey:@"properties"];
        NSString *title = [(NSDictionary *)properties valueForKey:@"program_title"];
        dispatch_async(dispatch_get_main_queue(), ^{
            self.playerViewController.btnTimeshiftProgram.enabled = YES;
            self.playerViewController.btnTimeshiftProgram.hidden = NO;
            [self.playerViewController.btnTimeshiftProgram setTitle:title forState:UIControlStateNormal];
            self.cloudProgramId = [(NSDictionary *)programs valueForKey:@"program_episode_id"];
         });
       
    } else {
        dispatch_async(dispatch_get_main_queue(), ^{
            self.playerViewController.btnTimeshiftProgram.enabled = NO;
            self.playerViewController.btnTimeshiftProgram.hidden = NO;
            [self.playerViewController.btnTimeshiftProgram setTitle:@"No Programs" forState:UIControlStateNormal];
         });
    }
}

Lecture d’un programme :

Pour lire un programme spécifique, appelez playCloudProgram avec la program_episode_id comme paramètre.

self.playerViewController.timeshiftProgramFiredBlock = ^(UIButton *button) {
        [self.tritonPlayer playCloudProgram:self.cloudProgramId];
    };

Paramètre Dist

Pour utiliser le dist le paramètre avec Timeshift, vous devez ajouter les deux paramètres de timeshifting :

SettingsStreamParamsExtraKey : @{StreamParamExtraDist:@"the-dist",
                         StreamParamExtraDistTimeshift:@"timeshift-dist”}

  • Le StreamParamExtraDist:@"the-dist", est utilisé lorsque le flux est connecté en mode Live.

  • Le StreamParamExtraDistTimeshift:@"timeshift-dist”, est utilisé lorsque le flux est en mode Timeshift.

Voici ci-dessous un exemple pour savoir comment ajouter les paramètres.

NSDictionary *settings = @{SettingsStationNameKey : @"MOBILEFM",
                 SettingsBroadcasterKey : @"Triton Digital",
                 SettingsMountKey : @"MOBILEFM_AACV2",
                 SettingsStreamParamsExtraKey : @{
                          StreamParamExtraDist:@"the-dist",
                          StreamParamExtraDistTimeshift:@"timeshift-dist"       
                 },
            };

self.tritonPlayer = [[TritonPlayer alloc] initWithDelegate:self andSettings:settings];

...

[self.tritonPlayer play];