

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Memulai dengan SDK Siaran Android IVS \$1 Streaming Latensi Rendah
<a name="broadcast-android-getting-started"></a>

Dokumen ini membawa Anda melalui langkah-langkah yang terlibat dalam memulai dengan SDK siaran Android streaming latensi rendah Amazon IVS.

## Instal Perpustakaan
<a name="broadcast-android-install"></a>

Untuk menambahkan library siaran Amazon IVS Android ke lingkungan pengembangan Android Anda, tambahkan pustaka ke `build.gradle` file modul Anda, seperti yang ditunjukkan di sini (untuk versi terbaru SDK siaran Amazon IVS):

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

Sebagai alternatif, untuk menginstal SDK secara manual, unduh versi terbaru dari lokasi ini:
+ [https://search.maven.org/artifact/com.amazonaws/ivs-broadcast](https://search.maven.org/artifact/com.amazonaws/ivs-broadcast)

## Menggunakan SDK dengan Simbol Debug
<a name="broadcast-android-using-debug-symbols-ll"></a>

Kami juga menerbitkan versi SDK siaran Android yang menyertakan simbol debug. Anda dapat menggunakan versi ini untuk meningkatkan kualitas laporan debug (jejak tumpukan) di Firebase Crashlytics, jika Anda mengalami crash di SDK broadcast IVS; yaitu,. `libbroadcastcore.so` Saat Anda melaporkan crash ini ke tim IVS SDK, jejak tumpukan berkualitas lebih tinggi memudahkan untuk memperbaiki masalah.

Untuk menggunakan versi SDK ini, letakkan yang berikut ini di file build Gradle Anda:

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

Gunakan baris di atas alih-alih ini:

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

### Mengunggah Simbol ke Firebase Crashlytics
<a name="android-debug-symbols-ll-firebase-crashlytics"></a>

Pastikan file build Gradle Anda disiapkan untuk Firebase Crashlytics. Ikuti instruksi Google di sini:

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

Pastikan untuk memasukkan `com.google.firebase:firebase-crashlytics-ndk` sebagai ketergantungan.

Saat membuat aplikasi Anda untuk rilis, plugin Firebase Crashlytics akan mengunggah simbol secara otomatis. Untuk mengunggah simbol secara manual, jalankan salah satu dari berikut ini:

```
gradle uploadCrashlyticsSymbolFileRelease
```

```
./gradlew uploadCrashlyticsSymbolFileRelease
```

(Tidak ada salahnya jika simbol diunggah dua kali, baik secara otomatis maupun manual.)

### Mencegah Rilis Anda .apk dari Menjadi Lebih Besar
<a name="android-debug-symbols-ll-sizing-apk"></a>

Sebelum mengemas `.apk` file rilis, Plugin Android Gradle secara otomatis mencoba menghapus informasi debug dari pustaka bersama (termasuk library SDK siaran IVS). `libbroadcastcore.so` Namun, terkadang hal ini tidak terjadi. Akibatnya, `.apk` file Anda bisa menjadi lebih besar dan Anda bisa mendapatkan pesan peringatan dari Plugin Android Gradle bahwa file tersebut tidak dapat menghapus simbol debug dan mengemas `.so` file apa adanya. Jika ini terjadi, lakukan hal berikut:
+ Instal Android NDK. Versi terbaru apa pun akan berfungsi.
+ Tambahkan `ndkVersion <your_installed_ndk_version_number>` ke `build.gradle` file aplikasi Anda. Lakukan ini bahkan jika aplikasi Anda sendiri tidak mengandung kode asli.

Untuk informasi selengkapnya, lihat [laporan masalah](https://issuetracker.google.com/issues/353554169) ini.

## Buat Event Listener
<a name="broadcast-android-create-event-listener"></a>

Menyiapkan pendengar acara memungkinkan Anda menerima pembaruan status, pemberitahuan perubahan perangkat, kesalahan, dan informasi audio sesi.

```
BroadcastSession.Listener broadcastListener = 
          new BroadcastSession.Listener() {
    @Override
    public void onStateChanged(@NonNull BroadcastSession.State state) {
        Log.d(TAG, "State=" + state);
    }

    @Override
    public void onError(@NonNull BroadcastException exception) {
        Log.e(TAG, "Exception: " + exception);
    }
};
```

## Permintaan Izin
<a name="broadcast-android-permissions"></a>

Aplikasi Anda harus meminta izin untuk mengakses kamera dan mikrofon pengguna. (Ini tidak spesifik untuk Amazon IVS; diperlukan untuk aplikasi apa pun yang membutuhkan akses ke kamera dan mikrofon.)

Di sini, kami memeriksa apakah pengguna telah memberikan izin dan, jika tidak, memintanya:

```
final String[] requiredPermissions =
         { Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO };

for (String permission : requiredPermissions) {
    if (ContextCompat.checkSelfPermission(this, permission) 
                != PackageManager.PERMISSION_GRANTED) {
        // If any permissions are missing we want to just request them all.
        ActivityCompat.requestPermissions(this, requiredPermissions, 0x100);
        break;
    }
}
```

Di sini, kami mendapatkan respons pengguna:

```
@Override
public void onRequestPermissionsResult(int requestCode, 
                                      @NonNull String[] permissions,
                                      @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode,
               permissions, grantResults);
    if (requestCode == 0x100) {
        for (int result : grantResults) {
            if (result == PackageManager.PERMISSION_DENIED) {
                return;
            }
        }
        setupBroadcastSession();
    }
}
```

## Buat Sesi Siaran
<a name="broadcast-android-create-session"></a>

Antarmuka siaran adalah`com.amazonaws.ivs.broadcast.BroadcastSession`. Inisialisasi dengan preset, seperti yang ditunjukkan di bawah ini. Jika ada kesalahan selama inisialisasi (seperti kegagalan untuk mengkonfigurasi codec) Anda `BroadcastListener` akan mendapatkan pesan kesalahan dan `broadcastSession.isReady` akan. `false`

**Penting:** Semua panggilan ke Amazon IVS Broadcast SDK for *Android* harus dilakukan di thread tempat SDK dipakai. *Panggilan dari thread yang berbeda akan menyebabkan SDK menimbulkan kesalahan fatal dan berhenti menyiarkan*.

```
// Create a broadcast-session instance and sign up to receive broadcast
// events and errors.
Context ctx = getApplicationContext();
broadcastSession = new BroadcastSession(ctx,
                       broadcastListener,
                       Presets.Configuration.STANDARD_PORTRAIT,
                       Presets.Devices.FRONT_CAMERA(ctx));
```

Lihat juga[Buat Sesi Siaran (Versi Lanjutan)](broadcast-android-use-cases.md#broadcast-android-create-session-advanced).

## Mengatur ImagePreviewView untuk Pratinjau
<a name="broadcast-android-set-imagepreviewview"></a>

Jika Anda ingin menampilkan pratinjau untuk perangkat kamera aktif, tambahkan pratinjau `ImagePreviewView` perangkat ke hierarki tampilan Anda.

```
// awaitDeviceChanges will fire on the main thread after all pending devices 
// attachments have been completed
broadcastSession.awaitDeviceChanges(() -> {
    for(Device device: session.listAttachedDevices()) {
        // Find the camera we attached earlier
        if(device.getDescriptor().type == Device.Descriptor.DeviceType.CAMERA) {
            LinearLayout previewHolder = findViewById(R.id.previewHolder);
            ImagePreviewView preview = ((ImageDevice)device).getPreviewView();
            preview.setLayoutParams(new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.MATCH_PARENT));
            previewHolder.addView(preview);
        }
    }
});
```

## Memulai Siaran
<a name="broadcast-android-start"></a>

Nama host yang Anda terima di bidang `ingestEndpoint` respons `GetChannel` operasi harus ditambahkan dan `rtmps://` ditambahkan. `/app` URL lengkap harus dalam format ini: `rtmps://{{ ingestEndpoint }}/app`

```
broadcastSession.start(IVS_RTMPS_URL, IVS_STREAMKEY);
```

SDK siaran Android hanya mendukung konsumsi RTMPS (bukan konsumsi RTMP yang tidak aman).

## Hentikan Siaran
<a name="broadcast-android-stop"></a>

```
broadcastSession.stop();
```

## Lepaskan Sesi Siaran
<a name="broadcast-android-release-session"></a>

Anda *harus memanggil* `broadcastSession.release()` metode ketika sesi siaran tidak lagi digunakan, untuk membebaskan sumber daya yang digunakan oleh perpustakaan.

```
@Override
protected void onDestroy() {
    super.onDestroy();
    previewHolder.removeAllViews();
    broadcastSession.release();
}
```