

# Conceitos básicos do SDK do reprodutor para o iOS do IVS
<a name="ios-getting-started"></a>

Este documento descreve as etapas envolvidas ao começar a usar o SDK do reprodutor para o iOS do Amazon IVS.

Recomendamos integrar o SDK do player usando o Swift Package Manager. (Como alternativa, você pode adicionar manualmente o framework ao seu projeto.)

## Recomendado: integrar o SDK do player (Swift Package Manager)
<a name="ios-integrate-sdk-swift"></a>

1. Baixe o arquivo Package.swift de [https://player.live-video.net/1.50.0/Package.swift](https://player.live-video.net/1.50.0/Package.swift).

1. No projeto, crie um novo diretório denominado AmazonIVSPlayer e adicione-o ao controle de versão.

1. Coloque o arquivo Package.swift que foi baixado no novo diretório.

1. No Xcode, vá para **Arquivo > Adicionar dependências de pacote** e selecione **Adicionar local...**.

1. Navegue e selecione o diretório AmazonIVSPlayer que você criou e selecione **Adicionar pacote**.

1. Quando receber o prompt **Escolha produtos de pacote para o AmazonIVSPlayer**, selecione **AmazonIVSPlayer** como o **produto de pacote** definindo o destino da aplicação na seção **Adicionar ao destino**.

1. Selecione **Adicionar pacote**.

## Abordagem alternativa: instalar o framework manualmente
<a name="ios-install-framework-manually"></a>

1. Faça download da versão mais recente de [https://player.live-video.net/1.50.0/AmazonIVSPlayer.xcframework.zip](https://player.live-video.net/1.50.0/AmazonIVSPlayer.xcframework.zip).

1. Extraia o conteúdo do arquivo. `AmazonIVSPlayer.xcframework` contém o SDK para dispositivo e para o simulador.

1. Incorporar o `AmazonIVSPlayer.xcframework` arrastando-o para a seção **Estruturas, bibliotecas e conteúdo incorporado** da guia **Geral** para o destino da sua aplicação:  
![\[A seção Estruturas de trabalho, bibliotecas e conteúdo incorporado da guia Geral para o destino da sua aplicação.\]](http://docs.aws.amazon.com/pt_br/ivs/latest/LowLatencyUserGuide/images/iOS_Player_SDK_Guide_xcframework.png)

## Criar player
<a name="ios-create-player"></a>

O objeto do player é `IVSPlayer`. Ele pode ser inicializado como mostrado abaixo:

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

```
import AmazonIVSPlayer

let player = IVSPlayer()
```

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

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

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

------

## Configurar representante
<a name="ios-setup-delegate"></a>

Os retornos de chamada do representante fornecem informações sobre o estado da reprodução, eventos e erros. Todos os retornos de chamada são chamados na fila principal.

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

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

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

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

------

## Exibir vídeo
<a name="ios-display-video"></a>

O player exibe vídeo em uma camada personalizada, `IVSPlayerLayer`. O SDK do também fornece `IVSPlayerView`, uma subclasse de `UIView` apoiada por esta camada. Use o que for mais conveniente para a interface do usuário da sua aplicação.

Em ambos os casos, exiba o vídeo de uma instância do player usando a propriedade `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;
```

------

## Carregar um stream
<a name="ios-load-stream"></a>

O player carrega o stream de forma assíncrona. Seu estado indica quando ele está pronto para reprodução.

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

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

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

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

------

## Reproduzir um stream
<a name="ios-play-stream"></a>

Quando o player estiver pronto, use `play`para iniciar a reprodução. Use a interface do representante ou a observação de chave-valor na propriedade `state` para observar a mudança de estado. Veja a seguir o exemplo da abordagem baseada em representante:

------
#### [ 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];
    }
}
```

------

## Pausar no plano de fundo da aplicação
<a name="ios-pause-on-app-backgrounding"></a>

O player não suporta a reprodução enquanto a aplicação estiver em segundo plano, mas não precisa ser totalmente desativado. Pausar é suficiente; veja os exemplos abaixo.

------
#### [ 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];
}
```

------

## Segurança de thread
<a name="ios-thread-safety"></a>

A API do player não é um thread seguro. Você deve criar e usar uma instância do player a partir do thread principal da aplicação.

## Tamanho do SDK
<a name="ios-sdk-size"></a>

Os SDKs do Amazon IVS Player foram projetados para serem o mais leve possível. Para obter informações atuais sobre o tamanho do SDK, consulte as [Notas de release](release-notes.md).

**Importante:** ao avaliar o impacto do tamanho, o tamanho do IPA produzido pelo Xcode não representa o tamanho da aplicação baixada no dispositivo do usuário. A App Store realiza otimizações para reduzir o tamanho de sua aplicação.

## Reunir todos os componentes
<a name="ios-putting-together"></a>

O seguinte snippet simples do controlador de exibição carrega e reproduz um URL em uma exibição de player. Observe que a propriedade `playerView` é inicializada a partir de um XIB/Storyboard, e sua classe é definida como `IVSPlayerView` no Construtor de interface [usando a seção Classe personalizada do Inspector de identidade.](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
```

------