

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

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

## Instalación de la biblioteca
<a name="android-install"></a>

A fin de agregar la biblioteca del reproductor para Android de Amazon IVS a su entorno de desarrollo de Android, agregue la biblioteca al archivo `build.gradle` del módulo (para la versión más reciente del reproductor de Amazon IVS).

```
repositories {
    mavenCentral()
}
 
dependencies {
     implementation 'com.amazonaws:ivs-player:1.50.0'
}
```

Alternativamente, para instalar el SDK de forma manual, descargue la última versión desde esta ubicación:
+ [https://search.maven.org/artifact/com.amazonaws/ivs-player](https://search.maven.org/artifact/com.amazonaws/ivs-player)

## Uso del SDK con símbolos de depuración
<a name="player-android-using-debug-symbols-ll"></a>

También publicamos una versión del SDK del reproductor para Android que incluye símbolos de depuración. Puede usar esta versión para mejorar la calidad de los informes de depuración (seguimientos de pila) en Firebase Crashlytics si se produce algún fallo en el SDK del reproductor de IVS, es decir, `libplayercore.so`. Cuando notifica estos bloqueos al equipo del SDK de IVS, los rastreos de pila de mayor calidad facilitan la solución de los problemas.

Para usar esta versión del SDK, reemplace la siguiente línea en sus archivos de compilación de Gradle:

```
implementation "com.amazonaws:ivs-player:$version@aar"
```

por esta:

```
implementation "com.amazonaws:ivs-player:$version:unstripped@aar"
```

### Carga de símbolos en Firebase Crashlytics
<a name="player-android-debug-symbols-ll-firebase-crashlytics"></a>

Asegúrese de que los archivos de compilación de Gradle estén configurados para Firebase Crashlytics. Siga las instrucciones de Google aquí:

[https://firebase.google.com/docs/crashlytics/ndk-reports](https://firebase.google.com/docs/crashlytics/ndk-reports)

Asegúrese de incluir `com.google.firebase:firebase-crashlytics-ndk` como dependencia.

Al crear la aplicación para su lanzamiento, el complemento de Firebase Crashlytics debería cargar los símbolos automáticamente. Para cargar los símbolos manualmente, ejecute cualquiera de los comandos siguientes:

```
gradle uploadCrashlyticsSymbolFileRelease
```

```
./gradlew uploadCrashlyticsSymbolFileRelease
```

(No pasará nada si los símbolos se cargan dos veces, automática y manualmente).

### Cómo evitar que el archivo .apk de la versión aumente de tamaño
<a name="player-android-debug-symbols-ll-sizing-apk"></a>

Antes de empaquetar el archivo `.apk` de la versión, el complemento de Gradle para Android intenta eliminar automáticamente la información de depuración de las bibliotecas compartidas (incluida la biblioteca `libplayercore.so` del SDK del reproductor de IVS). Sin embargo, a veces esto no sucede. En ese caso, el archivo `.apk` podría aumentar de tamaño y podría recibir un mensaje de advertencia del complemento de Gradle para Android indicándole que no puede eliminar los símbolos de depuración y que está empaquetando los archivos `.so` tal como están. Si esto sucede, haga lo siguiente:
+ Instale un NDK de Android. Cualquier versión reciente funcionará.
+ Agregue `ndkVersion <your_installed_ndk_version_number>` al archivo `build.gradle` de la aplicación. Haga esto incluso si la propia aplicación no contiene código nativo.

Para obtener más información, consulte este [informe de problemas](https://issuetracker.google.com/issues/353554169).

## Creación del reproductor y configuración del agente de escucha de eventos
<a name="android-create-player"></a>

La interfaz del reproductor es `com.amazonaws.ivs.player.Player`. Inicialícelo como se muestra a continuación:

```
// Create a player instance
// <this> refers to the current Android Activity
player = Player.Factory.create(this);

// Set up to receive playback events and errors 
player.addListener(this);
```

Alternativamente, inicialícelo mediante `PlayerView`:

```
// Create a player instance
// <this> refers to the current Android Activity
PlayerView playerView = new PlayerView(this);
Player player = playerView.getPlayer();
// Set up to receive playback events and errors 
player.addListener(this);
```

**Nota:** Los métodos de devolución de llamada del agente de escucha se ejecutan en el subproceso principal de la aplicación de Android.

## Configurar la vista superficial del video
<a name="android-set-surface-view"></a>

Si no se utiliza la `PlayerView` agregue una `SurfaceView` a su diseño de interfaz de usuario de Android para mostrar un video. Esta `Surface` debe estar disponible antes de poder reproducir transmisiones de video. Puede acceder a la superficie subyacente a través de la interfaz de `SurfaceHolder`, que se recupera al llamar a `getHolder()`. (Consulte [SurfaceView](https://developer.android.com/reference/android/view/SurfaceView.html) en la referencia para desarrolladores de Android). Utilice la `SurfaceHolder.Callback` para recibir eventos sobre cambios de superficie (consulte [SurfaceHolder.Callback](https://developer.android.com/reference/android/view/SurfaceHolder.Callback)).

```
surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
surfaceView.getHolder().addCallback(this);

@Override
public void surfaceCreated(SurfaceHolder holder) {
   this.surface = holder.getSurface();
   if (player != null) {
       player.setSurface(this.surface);
   }
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
   this.surface = null;
   if (player != null) {
       player.setSurface(null);
   }
}
```

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

Debido a que la transmisión se carga de forma asíncrona, el reproductor debe estar en el estado `READY` antes de que su aplicación pueda llamar al método `play` para comenzar la reproducción. Utilice la interfaz `Player.Listener` para determinar cuándo el reproductor está en el estado correcto.

Consulte el siguiente código de muestra:

```
player.load(Uri.parse(url));

@Override
public void onStateChanged(Player.State state) {
    switch (state) {
        case BUFFERING:
            // player is buffering
            break;
        case READY:
            player.play();
            break;
        case IDLE:
            break;
        case PLAYING:
            // playback started
            break;
     }
}
```

## Liberar el reproductor
<a name="android-release-player"></a>

Se *debe* llamar al método `player.release()` cuando el reproductor ya no se usa, para liberar los recursos que utiliza la biblioteca. Normalmente esto se realiza en la devolución de llamada `onDestroy` de la actividad o fragmento que contiene el reproductor.

```
@Override
protected void onDestroy() {
    super.onDestroy();
    player.removeListener(this);
    player.release();
}
```

Después de que se llama al método `player.release()` el reproductor ya no se puede utilizar.

## Permisos
<a name="android-permissions"></a>

El Reproductor SDK de Android requiere el siguiente permiso: 

```
<uses-permission android:name="android.permission.INTERNET" />
```

Además, estos permisos opcionales pueden mejorar la experiencia de reproducción: 

```
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
```

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

La API del reproductor no es segura para los subprocesos. Todas las llamadas hechas a una instancia de reproductor deben provenir del mismo hilo.

## Tamaño de SDK
<a name="android-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 AAB o APK producido por Android Studio no es representativo del tamaño de la aplicación descargada en el dispositivo de un usuario. Google Play Store realiza optimizaciones para reducir el tamaño de la aplicación. Le recomendamos que utilice [Paquetes de la aplicación Android](https://developer.android.com/guide/app-bundle) a fin de servir a las aplicaciones optimizadas para cada configuración de dispositivo.