

# Introducción al SDK del reproductor de iOS para IVS
<a name="ios-getting-started"></a>

En este documento, se explican los pasos para comenzar a usar el SDK del reproductor de iOS para Amazon IVS.

Recomendamos que integre el SDK del reproductor a través de Swift Package Manager. (Alternativamente, puede agregar el marco a su proyecto de forma manual).

## Recomendado: integre el SDK del Reproductor (Swift Package Manager)
<a name="ios-integrate-sdk-swift"></a>

1. Descargue el archivo Package.swift desde [https://player.live-video.net/1.50.0/Package.swift](https://player.live-video.net/1.50.0/Package.swift).

1. En su proyecto, cree un nuevo directorio denominado AmazonIVSPlayer y agréguelo al control de versiones.

1. Coloque el archivo Package.swift descargado en el nuevo directorio.

1. En Xcode, vaya a **Archivo > Agregar dependencias de paquete** y seleccione **Agregar local…**.

1. Navegue hasta el directorio AmazonIVSPlayer que ha creado, selecciónelo y, a continuación, seleccione **Agregar paquete**.

1. Cuando se le pida que **elija productos de paquete para AmazonIVSPlayer**, seleccione **AmazonIVSPlayer** como su **producto de paquete** mediante la configuración del destino de la aplicación en la sección **Agregar a destino**.

1. Seleccione **Agregar paquete**.

## Método alternativo: instalar el marco de forma manual
<a name="ios-install-framework-manually"></a>

1. Descargue la versión más reciente desde [https://player.live-video.net/1.50.0/AmazonIVSPlayer.xcframework.zip](https://player.live-video.net/1.50.0/AmazonIVSPlayer.xcframework.zip).

1. Extraiga el contenido del archivo. `AmazonIVSPlayer.xcframework` contiene el SDK para el dispositivo y el simulador.

1. Integre el `AmazonIVSPlayer.xcframework` arrastrándolo a la sección **Marcos, librerías y contenido integrado** de la pestaña **General** para el destino de la aplicación:  
![\[La sección Marcos, librerías y contenido integrado de la pestaña General para el destino de la aplicación.\]](http://docs.aws.amazon.com/es_es/ivs/latest/LowLatencyUserGuide/images/iOS_Player_SDK_Guide_xcframework.png)

## Creación del reproductor
<a name="ios-create-player"></a>

El objeto del reproductor es `IVSPlayer`. Se puede inicializar como se muestra a continuación:

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

```
import AmazonIVSPlayer

let player = IVSPlayer()
```

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

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

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

------

## Configuración del delegado
<a name="ios-setup-delegate"></a>

Las devoluciones de llamada de delegado proporcionan información sobre el estado de reproducción, los eventos y los errores. Todas las devoluciones de llamada se invocan en la cola principal.

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

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

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

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

------

## Visualización del video
<a name="ios-display-video"></a>

El reproductor muestra el video en una capa personalizada, `IVSPlayerLayer`. El SDK también proporciona `IVSPlayerView`, una subclase de `UIView` respaldada por esta capa. Use lo que sea más conveniente para la interfaz de usuario de su aplicación.

En ambos casos, muestre el video de una instancia de reproductor mediante la propiedad `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;
```

------

## Carga de una transmisión
<a name="ios-load-stream"></a>

El reproductor carga la transmisión de forma asíncrona. Su estado indica cuándo está listo para reproducir.

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

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

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

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

------

## Reproducción de una transmisión
<a name="ios-play-stream"></a>

Cuando el reproductor esté listo, use `play` para iniciar la reproducción. Utilice la interfaz de delegado o la observación de clave-valor en la propiedad `state` para observar el cambio de estado. A continuación, se muestra un ejemplo del enfoque basado en delegados:

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

------

## Pausa en la aplicación en segundo plano
<a name="ios-pause-on-app-backgrounding"></a>

El reproductor no admite la reproducción mientras la aplicación está en segundo plano, pero no es necesario detenerla por completo. Pausar es suficiente, consulte los ejemplos a continuación.

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

------

## Seguridad de los subprocesos
<a name="ios-thread-safety"></a>

La API del reproductor no es segura para los subprocesos. Debe crear y usar una instancia de reproductor desde el subproceso principal de la aplicación.

## Tamaño de SDK
<a name="ios-sdk-size"></a>

Los SDK del reproductor de Amazon IVS están diseñados para ser lo más ligeros posible. Para obtener información actualizada sobre el tamaño del SDK, consulte las [Notas de la versión](release-notes.md).

**Importante:** Al evaluar el impacto en el tamaño, el tamaño del IPA que produce Xcode no es representativo del tamaño de la aplicación descargada en el dispositivo de un usuario. App Store realiza optimizaciones para reducir el tamaño de la aplicación.

## Resumen global
<a name="ios-putting-together"></a>

El siguiente fragmento sencillo del controlador de vistas carga y reproduce una URL en una vista del reproductor. Tenga en cuenta que la propiedad `playerView` se inicializa desde un XIB/Storyboard y su clase se establece en `IVSPlayerView` en el Generador de interfaces [con la sección de Custom Class (Clase personalizada) del Inspector de identidad.](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
```

------