

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

# SDK Siaran IVS: Sumber Gambar Kustom \| Streaming Latensi Rendah
<a name="broadcast-custom-image-sources"></a>

Panduan ini mengasumsikan Anda sudah terbiasa dengan cara mengatur sesi siaran ([Android](broadcast-android.md), [iOS](broadcast-ios.md)) dan cara [menggunakan API perangkat campuran](broadcast-mixed-devices.md).

Sumber input gambar khusus memungkinkan aplikasi untuk menyediakan input gambarnya sendiri ke SDK siaran, alih-alih terbatas pada kamera preset atau berbagi layar. Sumber gambar khusus dapat sesederhana tanda air semi-transparan atau adegan “segera kembali” statis, atau memungkinkan aplikasi untuk melakukan pemrosesan khusus tambahan seperti menambahkan filter kecantikan ke kamera.

Anda dapat memiliki beberapa sumber gambar khusus, seperti tanda air plus kamera dengan filter kecantikan. Saat Anda menggunakan sumber input gambar khusus untuk kontrol kustom kamera (seperti menggunakan pustaka filter kecantikan yang memerlukan akses kamera), SDK siaran tidak lagi bertanggung jawab untuk mengelola kamera. Sebagai gantinya, aplikasi bertanggung jawab untuk menangani siklus hidup kamera dengan benar. Lihat dokumentasi platform resmi tentang bagaimana aplikasi Anda harus mengelola kamera.

## Android
<a name="custom-image-sources-android"></a>

Setelah Anda membuat sesi siaran, buat sumber input gambar: 

```
SurfaceSource surfaceSource = broadcastSession.createImageInputSource();
```

Metode ini mengembalikan`SurfaceSource`, yang merupakan sumber gambar yang didukung oleh Android [Surface](https://developer.android.com/reference/android/view/Surface) standar. Ini secara otomatis dilampirkan ke sesi siaran, jadi tidak perlu menggunakan `attachDevice(...)` metode sesudahnya. Namun, `SurfaceSource` kebutuhan untuk terikat pada slot; ini dibahas nanti di bawah ini. `SurfaceSource`Dapat diubah ukurannya dan diputar. Anda juga dapat membuat `ImagePreviewView` untuk menampilkan pratinjau isinya.

Untuk mengambil yang mendasarinya`Surface`:

```
Surface surface = surfaceSource.getInputSurface();
```

Ini `Surface` dapat digunakan sebagai buffer output untuk produsen gambar seperti Camera2, OpenGL ES, dan perpustakaan lainnya. Kasus penggunaan paling sederhana adalah langsung menggambar bitmap statis atau warna ke dalam kanvas Surface. Namun, banyak pustaka (seperti pustaka filter kecantikan) menyediakan metode yang memungkinkan aplikasi menentukan eksternal untuk rendering. `Surface` Anda dapat menggunakan metode seperti itu untuk meneruskan ini `Surface` ke pustaka filter, yang memungkinkan pustaka mengeluarkan bingkai yang diproses agar sesi siaran dapat dialirkan.

Akhirnya, `SurfaceSource` harus terikat ke a `Mixer.Slot` untuk dialirkan oleh sesi siaran:

```
broadcastSession.getMixer().bind(surfaceSource, "customSlot");
```

[Kode sampel Android](https://github.com/aws-samples/amazon-ivs-broadcast-android-sample) memiliki beberapa contoh yang menggunakan sumber gambar khusus dengan berbagai cara:
+ Tanda air semi-transparan ditambahkan di. `MixerActivity`
+ Sebuah MP4 file dilingkarkan di. `MixerActivity`
+ Kelas [CameraManager](https://github.com/aws-samples/amazon-ivs-broadcast-android-sample/blob/main/app/src/main/java/com/amazonaws/ivs/basicbroadcast/common/CameraManager.kt)utilitas melakukan manajemen khusus kamera perangkat menggunakan metode Camera2 di`CustomActivity`, yang menerapkan filter sepia sederhana. Contoh ini sangat membantu karena menunjukkan cara mengelola kamera dan meneruskan kustom sesi siaran `SurfaceSource` ke permintaan pengambilan kamera. Jika Anda menggunakan pustaka eksternal lainnya, ikuti dokumentasinya tentang cara mengonfigurasi pustaka ke output ke Android yang `Surface` disediakan oleh sesi siaran.

## iOS
<a name="custom-image-sources-ios"></a>

Setelah Anda membuat sesi siaran, buat sumber input gambar:

```
let customSource = broadcastSession.createImageSource(withName: "customSourceName")
```

Metode ini mengembalikan`IVSCustomImageSource`, yang merupakan sumber gambar yang memungkinkan aplikasi untuk mengirimkan `CMSampleBuffers` secara manual. Untuk format piksel yang didukung, lihat Referensi SDK Siaran iOS; tautan ke versi terbaru ada di [Catatan Rilis Amazon IVS untuk rilis](release-notes.md) SDK siaran terbaru. Sumber tidak secara otomatis dilampirkan ke sesi siaran, jadi Anda harus melampirkan sumber gambar ke sesi dan mengikatnya ke slot sebelum sumber akan streaming:

```
broadcastSession.attach(customSource, toSlotWithName: "customSourceSlot", onComplete: nil)
```

Setelah sumber kustom dilampirkan dan terikat, aplikasi dapat mengirimkan `CMSampleBuffers` langsung ke sumber kustom. Anda dapat memilih untuk menggunakan `onComplete` callback untuk mulai melakukannya.

Sampel yang dikirimkan ke sumber khusus akan dialirkan dalam sesi siaran:

```
customSource.onSampleBuffer(sampleBuffer)
```

Untuk streaming video, gunakan metode ini dalam panggilan balik. Misalnya, jika Anda menggunakan kamera, maka setiap kali buffer sampel baru diterima dari sebuah`AVCaptureSession`, aplikasi dapat meneruskan buffer sampel ke sumber gambar khusus. Jika diinginkan, aplikasi dapat menerapkan pemrosesan lebih lanjut (seperti filter kecantikan) sebelum mengirimkan sampel ke sumber gambar khusus.

Untuk gambar statis, setelah sampel pertama, aplikasi perlu mengirimkan ulang sampel jika pengikatan slot sumber gambar kustom diubah atau sumber terlepas dan disambungkan kembali ke sesi siaran. Misalnya, jika Anda menghapus slot dari dan kemudian menambahkan slot ke mixer, Anda harus mengirimkan ulang sampel.

[Aplikasi contoh iOS](https://github.com/aws-samples/amazon-ivs-broadcast-ios-sample) memiliki beberapa contoh yang menggunakan sumber gambar khusus dengan berbagai cara:
+ Tanda air semi-transparan ditambahkan. `MixerViewController`
+ Sebuah MP4 file dilingkarkan. `MixerViewController`
+  CIFilter Implementasi dengan kamera perangkat ditambahkan`CustomSourcesViewController`. Ini memungkinkan aplikasi untuk mengelola kamera perangkat secara independen dari Amazon IVS Broadcast SDK. Ini digunakan `AVCaptureSession` untuk menangkap gambar dari kamera perangkat, memproses gambar menggunakan CIFilter implementasi, dan mengirimkan `CMSampleBuffers` ke `customSource` streaming langsung.