

# Erste Schritte mit dem IVS Android Player SDK
<a name="android-getting-started"></a>

Dieses Dokument führt Sie durch die Schritte zum Einstieg in das Amazon IVS Android Player SDK.

## Bibliothek installieren
<a name="android-install"></a>

Wenn Sie der Android-Entwicklungsumgebung die Amazon IVS Android-Player-Bibliothek hinzufügen möchten, fügen Sie die Bibliothek der `build.gradle` wie hier gezeigt (für die neueste Version des Amazon IVS Players) zu Ihren Modulen hinzu.

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

Um das SDK manuell zu installieren, laden Sie alternativ die neueste Version von diesem Speicherort herunter:
+ [https://search.maven.org/artifact/com.amazonaws/ivs-player](https://search.maven.org/artifact/com.amazonaws/ivs-player)

## Verwenden des SDK mit Debug-Symbolen
<a name="player-android-using-debug-symbols-ll"></a>

Wir veröffentlichen außerdem eine Version des Android-Player-SDK, die Debug-Symbole enthält. Mit dieser Version können Sie die Qualität von Debug-Berichten (Stack-Traces) in Firebase Crashlytics verbessern, falls im IVS-Player-SDK Abstürze auftreten, d. h. `libplayercore.so`. Wenn Sie diese Abstürze dem SDK-Team von IVS melden, erleichtern die qualitativ hochwertigeren Stack-Traces die Behebung der Probleme.

Um diese Version des SDK zu verwenden, ersetzen Sie in den Build-Dateien von Gradle diese Zeile:

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

durch diese:

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

### Hochladen von Symbolen zu Firebase Crashlytics
<a name="player-android-debug-symbols-ll-firebase-crashlytics"></a>

Stellen Sie sicher, dass Ihre Gradle-Build-Dateien für Firebase Crashlytics eingerichtet sind. Folgen Sie den Anweisungen von Google hier:

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

Achten Sie darauf, `com.google.firebase:firebase-crashlytics-ndk` als Abhängigkeit anzugeben.

Wenn Sie Ihre App für die Veröffentlichung erstellen, muss das Firebase-Crashlytics-Plugin Symbole automatisch hochladen. Führen Sie einen der folgenden Befehle aus, um Symbole manuell hochzuladen:

```
gradle uploadCrashlyticsSymbolFileRelease
```

```
./gradlew uploadCrashlyticsSymbolFileRelease
```

(Es schadet nicht, wenn Symbole zweimal hochgeladen werden, sowohl automatisch als auch manuell.)

### Verhindern, dass Ihre APK-Version größer wird
<a name="player-android-debug-symbols-ll-sizing-apk"></a>

Vor dem Verpacken der `.apk`-Release-Datei versucht das Android-Gradle-Plugin automatisch, Debug-Informationen aus gemeinsam genutzten Bibliotheken (einschließlich der `libplayercore.so`-Bibliothek des IVS-Player-SDK) zu entfernen. Manchmal geschieht dies jedoch nicht. In diesem Fall könnte die `.apk`-Datei größer werden und Sie könnten vom Android-Gradle-Plugin eine Warnmeldung erhalten, dass es Debug-Symbole nicht entfernen kann und die `.so`-Dateien unverändert verpackt. Wenn dies passiert, gehen Sie wie folgt vor:
+ Installieren Sie ein Android-NDK. Jede aktuelle Version funktioniert.
+ Fügen Sie `ndkVersion <your_installed_ndk_version_number>` zur `build.gradle`-Datei Ihrer Anwendung hinzu. Tun Sie dies auch dann, wenn Ihre Anwendung selbst keinen nativen Code enthält.

Weitere Informationen finden Sie in diesem [Problembericht](https://issuetracker.google.com/issues/353554169).

## Erstellen Sie den Player und richten Sie den Ereignis-Listener ein
<a name="android-create-player"></a>

Die Player-Schnittstelle ist `com.amazonaws.ivs.player.Player`. Initialisieren Sie es wie unten gezeigt:

```
// 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);
```

Alternativ können Sie initialisieren, indem Sie verwenden `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);
```

**Hinweis:** Die Listener-Callback-Methoden werden im Haupt-Thread Ihrer Android-Anwendung ausgeführt.

## Festlegen der Oberflächenansicht für Video
<a name="android-set-surface-view"></a>

Wenn Sie `PlayerView` nicht verwenden, fügen Sie eine `SurfaceView` auf Ihr Android-Benutzeroberflächen-Layout für die Anzeige eines Videos hinzu. Dieser `Surface` muss verfügbar sein, bevor Sie Videostreams abspielen können. Sie können über die `SurfaceHolder`-Schnittstelle auf die zugrundeliegende Oberfläche zugreifen, die durch Aufruf von `getHolder()` abgerufen wird. (Siehe [SurfaceView](https://developer.android.com/reference/android/view/SurfaceView.html) in der Android-Entwickler-Referenz). Verwenden der `SurfaceHolder.Callback`, um Ereignisse über Oberflächenänderungen zu empfangen (siehe [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);
   }
}
```

## Wiedergeben eines Streams
<a name="android-play-stream"></a>

Da der Stream asynchron geladen wird, muss sich der Player in einem `READY`-Status befinden, bevor Ihre Anwendung die `play`-Methode aufrufen kann, um die Wiedergabe zu beginnen. Verwenden der `Player.Listener`-Schnittstelle, um festzustellen, wann sich der Player im richtigen Zustand befindet.

Siehe folgenden Beispielcode:

```
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;
     }
}
```

## Freigabe des Players.
<a name="android-release-player"></a>

Die `player.release()`-Methode *muss* aufgerufen werden, wenn der Player nicht mehr verwendet wird, um die Ressourcen freizugeben, die von der Bibliothek verwendet werden. Normalerweise geschieht dies im `onDestroy`-Callback der Aktivität oder des Fragments, das den Player enthält.

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

Nachdem die `player.release()`-Methode aufgerufen wird, kann der Player nicht mehr verwendet werden.

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

Das Android-Player-SDK erfordert die folgende Berechtigung: 

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

Darüber hinaus können diese optionalen Berechtigungen die Wiedergabe verbessern: 

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

## Sicherheit für den Thread
<a name="android-thread-safety"></a>

Die Player-API ist nicht Thread-sicher. Alle Aufrufe an eine Spieler-Instance sollten aus demselben Thread stammen.

## SDK-Größe
<a name="android-sdk-size"></a>

Die Amazon IVS Player SDKs sind so leicht wie möglich. Aktuelle Informationen zur SDK-Größe finden Sie in den [Versionshinweisen](release-notes.md).

**Wichtig:** Bei der Bewertung der Größenauswirkung ist die Größe der von Android Studio erzeugten AAB/APK nicht repräsentativ für die Größe Ihrer App, die auf das Gerät eines Benutzers heruntergeladen wurde. Der Google Play Store führt Optimierungen durch, um die Größe Ihrer App zu reduzieren. Wir empfehlen Ihnen, [Android-App-Bündel](https://developer.android.com/guide/app-bundle) zu verwenden, um optimierte Apps für jede Gerätekonfiguration bereitzustellen.