

# Mise en route avec le kit SDK du lecteur iOS d’IVS
<a name="ios-getting-started"></a>

Ce document vous présente les étapes à suivre pour commencer à utiliser le kit SDK du lecteur iOS d’Amazon IVS.

Nous vous recommandons d’intégrer le kit SDK du lecteur via Swift Package Manager. (Vous pouvez également ajouter manuellement le cadre à votre projet.)

## Recommandé : intégrer le kit SDK du lecteur (Swift Package Manager)
<a name="ios-integrate-sdk-swift"></a>

1. Téléchargez le fichier Package.swift depuis [https://player.live-video.net/1.50.0/Package.swift](https://player.live-video.net/1.50.0/Package.swift).

1. Dans votre projet, créez un nouveau répertoire nommé AmazonIVSPlayer et ajoutez-le au contrôle de version.

1. Placez le fichier Package.swift téléchargé dans le nouveau répertoire.

1. Dans Xcode, accédez à **Fichier > Ajouter des dépendances de package** et sélectionnez **Ajouter un fichier local...**

1. Accédez au répertoire AmazonIVSPlayer que vous avez créé, sélectionnez-le, puis sélectionnez **Ajouter un package**.

1. Lorsque vous êtes invité à **choisir les produits du package pour AmazonIVSPlayer**, sélectionnez **AmazonIVSPlayer** comme **Produit du package** en définissant la cible de votre application dans la section **Ajouter à la cible**.

1. Sélectionnez **Ajouter un package**.

## Autre approche : installer manuellement le cadre
<a name="ios-install-framework-manually"></a>

1. Téléchargez la dernière version depuis [https://player.live-video.net/1.50.0/AmazonIVSPlayer.xcframework.zip](https://player.live-video.net/1.50.0/AmazonIVSPlayer.xcframework.zip).

1. Extrayez le contenu de l’archive. `AmazonIVSPlayer.xcframework` contient le kit SDK pour l’appareil et le simulateur.

1. Intégrez `AmazonIVSPlayer.xcframework` en le faisant glisser dans la section **Frameworks, Libraries, and Embedded Content** (Cadre, bibliothèques et contenu intégré) de l’onglet **General** (Général) de votre cible d’application :  
![\[La section Frameworks, Libraries, and Embedded Content (Cadre, bibliothèques et contenu intégré) de l’onglet General (Général) de votre cible d’application.\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/LowLatencyUserGuide/images/iOS_Player_SDK_Guide_xcframework.png)

## Créer un lecteur
<a name="ios-create-player"></a>

L’objet de lecteur est `IVSPlayer`. Il peut être initialisé comme indiqué ci-dessous :

------
#### [ Swift ]

```
import AmazonIVSPlayer

let player = IVSPlayer()
```

------
#### [ Objective-C ]

```
#import <AmazonIVSPlayer/AmazonIVSPlayer.h>

IVSPlayer *player = [[IVSPlayer alloc] init];
```

------

## Configuration d’un délégué
<a name="ios-setup-delegate"></a>

Les rappels de délégué fournissent des informations sur l’état de lecture, les événements et les erreurs. Tous les rappels sont invoqués dans la file d’attente principale.

------
#### [ Swift ]

```
// Self must conform to IVSPlayer.Delegate
player.delegate = self
```

------
#### [ Objective-C ]

```
// Self must conform to IVSPlayer.Delegate
player.delegate = self
```

------

## Afficher la vidéo
<a name="ios-display-video"></a>

Le lecteur affiche la vidéo dans une couche personnalisée, `IVSPlayerLayer`. Le kit SDK fournit également `IVSPlayerView`, une sous-classe `UIView` basée sur cette couche. Utilisez celle qui est la plus pratique pour l’interface utilisateur de votre application.

Dans les deux cas, affichez la vidéo à partir d’une instance de lecteur à l’aide de la propriété `player`.

------
#### [ Swift ]

```
// When using IVSPlayerView:
playerView.player = player

// When using IVSPlayerLayer:
playerLayer.player = player
```

------
#### [ Objective-C ]

```
// When using IVSPlayerView:
playerView.player = player;

// When using IVSPlayerLayer:
playerLayer.player = player;
```

------

## Charger un flux
<a name="ios-load-stream"></a>

Le lecteur charge le flux de manière asynchrone. Son état indique quand il est prêt à lire.

------
#### [ Swift ]

```
player.load(url)
```

------
#### [ Objective-C ]

```
[player load:url];
```

------

## Lire un flux
<a name="ios-play-stream"></a>

Lorsque le lecteur est prêt, utilisez `play` pour commencer la lecture. Utilisez l’interface de délégué ou l’observation de la valeur clé sur la propriété `state` pour observer le changement d’état. Voici un exemple d’approche basée sur les délégués :

------
#### [ Swift ]

```
func player(_ player: IVSPlayer, didChangeState state: IVSPlayer.State) {
    if state == .ready {
        player.play()
    }
}
```

------
#### [ Objective-C ]

```
- (void)player:(IVSPlayer *)player didChangeState:(IVSPlayerState)state {
    if (state == IVSPlayerStateReady) {
        [player play];
    }
}
```

------

## Mettre en pause en arrière-plan de l’application
<a name="ios-pause-on-app-backgrounding"></a>

Le lecteur ne prend pas en charge la lecture lorsque l’application est en arrière-plan, mais il n’a pas besoin d’être complètement arrêté. La mise en pause est suffisante ; consultez les exemples ci-dessous.

------
#### [ Swift ]

```
override func viewDidLoad() {
    super.viewDidLoad()

    NotificationCenter.default.addObserver(self,
        selector: #selector(applicationDidEnterBackground(_:)),
        name: UIApplication.didEnterBackgroundNotification,
        object: nil)
}

@objc func applicationDidEnterBackground(_ notification: NSNotification) {
    playerView?.player?.pause()
}
```

------
#### [ Objective-C ]

```
- (void)viewDidLoad {
    [super viewDidLoad];

    NSNotificationCenter *defaultCenter = NSNotificationCenter.defaultCenter;
    [defaultCenter addObserver:self
                      selector:@selector(applicationDidEnterBackground:)
                          name:UIApplicationDidEnterBackgroundNotification
                        object:nil];
}

- (void)applicationDidEnterBackground:(NSNotification *)notification {
    [playerView.player pause];
}
```

------

## Sécurité des threads
<a name="ios-thread-safety"></a>

L’API du lecteur n’est pas thread-safe. Vous devez créer et utiliser une instance de lecteur à partir du thread principal de l’application.

## Taille du kit SDK
<a name="ios-sdk-size"></a>

Les kits SDK du lecteur Amazon IVS sont conçus pour être aussi légers que possible. Pour plus d’informations sur la taille du kit SDK, consultez les [notes de mise à jour](release-notes.md).

**Important :** lors de l’évaluation de l’impact de la taille, la taille de l’IPA produit par Xcode n’est pas représentative de la taille de votre appli téléchargée sur l’appareil d’un utilisateur. L’App Store effectue des optimisations pour réduire la taille de votre application.

## Synthèse
<a name="ios-putting-together"></a>

L’extrait de contrôleur de vue simple suivant charge et lit une URL dans une vue de lecteur. Notez que la propriété `playerView` est initialisée à partir d’un XIB/StoryBoard et que sa classe est définie sur `IVSPlayerView` dans le concepteur d’interface (Interface Builder) [à l’aide de la section Custom Class (Classe personnalisée) de l’inspecteur d’identité (Identity Inspector).](https://developer.apple.com/tutorials/SwiftUI)

------
#### [ Swift ]

```
import AmazonIVSPlayer

class MyViewController: UIViewController {
...
    // Connected in Interface Builder
    @IBOutlet var playerView: IVSPlayerView!

    override func viewDidLoad() {
        super.viewDidLoad()

        NotificationCenter.default.addObserver(self,
            selector: #selector(applicationDidEnterBackground(_:)),
            name: UIApplication.didEnterBackgroundNotification,
            object: nil)
    }

    @objc func applicationDidEnterBackground(_ notification: NSNotification) {
        playerView?.player?.pause()
    }
...
    // Assumes this view controller is already loaded.
    // For example, this could be called by a button tap.
    func playVideo(url videoURL: URL) {
        let player = IVSPlayer()
        player.delegate = self
        playerView.player = player
        player.load(videoURL)
    }
}

extension MyViewController: IVSPlayer.Delegate {
    func player(_ player: IVSPlayer, didChangeState state: IVSPlayer.State) {
        if state == .ready {
            player.play()
        }
    }
}
```

------
#### [ Objective-C ]

```
// MyViewController.h

@class IVSPlayerView;

@interface MyViewController: UIViewController
...
// Connected in Interface Builder
@property (nonatomic) IBOutlet IVSPlayerView *playerView;
...
@end


// MyViewController.m

#import <AmazonIVSPlayer/AmazonIVSPlayer.h>

@implementation MyViewController <IVSPlayerDelegate>
...

- (void)viewDidLoad {
    [super viewDidLoad];

    NSNotificationCenter *defaultCenter = NSNotificationCenter.defaultCenter;
    [defaultCenter addObserver:self
                      selector:@selector(applicationDidEnterBackground:)
                          name:UIApplicationDidEnterBackgroundNotification
                        object:nil];
}

- (void)applicationDidEnterBackground:(NSNotification *)notification {
    [playerView.player pause];
}

// Assumes this view controller is already loaded.
// For example, this could be called by a button tap.
- (void)playVideoWithURL:(NSURL *)videoURL {
    IVSPlayer *player = [[IVSPlayer alloc] init];
    player.delegate = self;
    playerView.player = player;
    [player load:videoURL];
}

- (void)player:(IVSPlayer *)player didChangeState:(IVSPlayerState)state {
    if (state == IVSPlayerStateReady) {
        [player play];
    }
}

...
@end
```

------