

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

# Optimasi Streaming Waktu Nyata IVS
<a name="real-time-streaming-optimization"></a>

Untuk memastikan bahwa pengguna Anda memiliki pengalaman terbaik saat streaming dan melihat video menggunakan streaming real-time IVS, ada beberapa cara Anda dapat meningkatkan atau mengoptimalkan bagian dari pengalaman, menggunakan fitur yang kami tawarkan hari ini. 

## Pengantar
<a name="real-time-streaming-optimization-intro"></a>

Saat mengoptimalkan kualitas pengalaman pengguna, penting untuk mempertimbangkan pengalaman yang diinginkan, yang dapat berubah tergantung pada konten yang mereka tonton dan kondisi jaringan. 

Sepanjang panduan ini, kami fokus pada pengguna yang merupakan *penerbit* aliran atau *pelanggan* aliran, dan kami mempertimbangkan tindakan dan pengalaman yang diinginkan dari pengguna tersebut. 

IVS SDKs memungkinkan Anda untuk mengkonfigurasi bitrate maksimum, framerate, dan resolusi aliran. Ketika kemacetan jaringan terjadi untuk penerbit, SDK secara otomatis menyesuaikan dan menurunkan kualitas video dengan menurunkan bitrate, framerate, dan resolusi. Di Android dan iOS, dimungkinkan untuk memilih preferensi degradasi saat kemacetan ditemui. Perilaku yang sama berlaku apakah Anda mengaktifkan pengkodean berlapis dengan simulcast atau mempertahankan konfigurasi default.

## Streaming Adaptif: Pengkodean Berlapis dengan Simulcast
<a name="real-time-streaming-optimization-adaptive"></a>

Fitur ini hanya didukung dalam versi klien berikut:
+ iOS dan Android 1.18.0\$1
+ Web 1.12.0\$1

Saat menggunakan [siaran real-time](broadcast.md) IVS SDKs, penerbit dapat menyandikan beberapa lapisan video dan pelanggan secara otomatis beradaptasi atau mengubah kualitas yang paling sesuai untuk jaringan mereka. Kami menyebutnya *encoding berlapis dengan* simulcast.

Pengkodean berlapis dengan simulcast didukung di Android dan iOS, dan di browser desktop Chrome dan Edge (untuk Windows dan macOS). Kami tidak mendukung encoding berlapis pada browser lain. 

Pada diagram di bawah ini, host mengirimkan tiga kualitas video (tinggi, sedang, dan rendah). IVS meneruskan video berkualitas tinggi ke setiap pemirsa berdasarkan bandwidth yang tersedia; ini memberikan pengalaman optimal untuk setiap pemirsa. Jika koneksi jaringan Viewer 1 berubah dari baik menjadi buruk, IVS secara otomatis mulai mengirim Viewer 1 video berkualitas lebih rendah, sehingga Viewer 1 dapat terus menonton streaming tanpa gangguan (dengan kualitas terbaik).

![\[Gunakan encoding berlapis dengan simulcast untuk menyesuaikan video berkualitas berdasarkan kualitas koneksi jaringan pemirsa.\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/images/Layered_Encoding_1.png)


### Lapisan Default, Kualitas, dan Framerate
<a name="real-time-streaming-optimization-default-layers"></a>

Kualitas dan lapisan default yang disediakan untuk pengguna seluler dan web adalah sebagai berikut:


| Seluler (Android, iOS) | Web (Chrome) | 
| --- | --- | 
| Lapisan tinggi (atau kustom): [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/real-time-streaming-optimization.html)  | Lapisan tinggi (atau kustom): [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/real-time-streaming-optimization.html)  | 
| Lapisan tengah: tidak ada (tidak diperlukan, karena perbedaan antara bitrate lapisan tinggi dan rendah di ponsel sempit) | Lapisan tengah: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/real-time-streaming-optimization.html)  | 
| Lapisan rendah: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/real-time-streaming-optimization.html)  | Lapisan rendah: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/ivs/latest/RealTimeUserGuide/real-time-streaming-optimization.html)  | 

### Resolusi Lapisan
<a name="real-time-streaming-optimization-layer-resolution"></a>

Resolusi lapisan menengah dan rendah secara otomatis diperkecil dari lapisan tinggi, untuk mempertahankan rasio aspek yang sama.

Lapisan menengah dan rendah dikecualikan jika resolusinya terlalu dekat dengan lapisan di atas. Misalnya, jika resolusi yang dikonfigurasi adalah 320x180, SDK juga tidak akan mengirim lapisan beresolusi lebih rendah.

Tabel di bawah ini menunjukkan resolusi lapisan yang dihasilkan untuk resolusi yang dikonfigurasi berbeda. Nilai yang tercantum dalam orientasi lanskap tetapi dapat diterapkan secara terbalik untuk konten potret.


| Resolusi Masukan | Resolusi Lapisan Keluaran: Seluler | Resolusi Lapisan Keluaran: Web | 
| --- | --- | --- | 
|  720p (1280x720)  |  Hai (1280x720) Rendah (320x180)  |  Hai (1280x720) Pertengahan (640x360) Rendah (320x180)  | 
|  540p (960x540)  |  Hai (960x540) Rendah (320x180)  |  Hai (960x540) Rendah (320x180)  | 
|  360p (640x360)  |  Hai (640x360) Rendah (360x180)  |  Hai (640x360) Rendah (360x180)  | 
|  270p (480x270)  |  Hai (480x270)  |  Hai (480x270)  | 
|  180p (320x180)  |  Hai (320x180)  |  Hai (320x180)  | 

Untuk resolusi input khusus yang tidak dipetakan di atas, Anda dapat menghitungnya [menggunakan alat berikut](https://codepen.io/amazon-ivs/full/ZENQQvo).

### Mengkonfigurasi Layered Encoding dengan Simulcast (Publisher)
<a name="real-time-streaming-optimization-simulcast"></a>

Untuk menggunakan encoding berlapis dengan simulcast, Anda [harus mengaktifkan fitur pada klien](#real-time-streaming-optimization-adaptive). Jika Anda mengaktifkannya, Anda akan melihat peningkatan penggunaan bandwidth unggahan oleh penerbit, berpotensi dengan pembekuan video yang lebih sedikit untuk pemirsa.

**Android**

```
// Enable Simulcast
StageVideoConfiguration config = new StageVideoConfiguration();
config.simulcast.setEnabled(true);

ImageLocalStageStream cameraStream = new ImageLocalStageStream(frontCamera, config);

// Other Stage implementation code
```

**iOS**

```
// Enable Simulcast
let config = IVSLocalStageStreamVideoConfiguration()
config.simulcast.enabled = true

let cameraStream = IVSLocalStageStream(device: camera, configuration: config)

// Other Stage implementation code
```

**Web**

```
// Enable Simulcast
let cameraStream = new LocalStageStream(cameraDevice, {
   simulcast: { enabled: true }
})

// Other Stage implementation code
```

[[Untuk informasi terperinci tentang mengonfigurasi setiap lapisan, lihat “Mengonfigurasi Pengkodean Berlapis (Penerbit)” di setiap panduan SDK siaran: Android[, iOS,](android-publish-subscribe.md#android-layered-encoding-simulcast-configure-publisher) dan Web.](web-publish-subscribe.md#web-layered-encoding-simulcast-configure-publisher)](ios-publish-subscribe.md#ios-layered-encoding-simulcast-configure-publisher)

### Mengkonfigurasi Layered Encoding dengan Simulcast (Subscriber)
<a name="real-time-streaming-optimization-simulcast-subscriber"></a>

Untuk mengonfigurasi lapisan apa yang diterima oleh pelanggan, lihat bagian “Layered Encoding with Simulcast” di panduan SDK streaming real-time:
+ [SDK Siaran Android](android-publish-subscribe.md#android-publish-subscribe-layered-encoding-simulcast)
+ [SDK Siaran iOS](ios-publish-subscribe.md#ios-publish-subscribe-layered-encoding-simulcast)
+ [SDK Siaran Web](web-publish-subscribe.md#web-publish-subscribe-layered-encoding-simulcast)

Dengan konfigurasi pelanggan, dimungkinkan untuk menentukan. `InitialLayerPreference` Ini menentukan kualitas video apa yang dikirimkan pada awalnya, serta`preferredLayerForStream`, yang pada gilirannya menentukan lapisan apa yang dipilih selama pemutaran video. Ada peristiwa dan metode aliran untuk memberi tahu ketika lapisan berubah, perubahan adaptasi, atau pemilihan lapisan dibuat.

## Konfigurasi Streaming
<a name="real-time-streaming-configurations"></a>

Bagian ini mengeksplorasi konfigurasi lain yang dapat Anda buat untuk aliran video dan audio Anda.

### Mengubah Bitrate Stream Video
<a name="real-time-streaming-changing-bitrate"></a>

Untuk mengubah bitrate streaming video Anda, gunakan contoh konfigurasi berikut.

**Android**

```
StageVideoConfiguration config = new StageVideoConfiguration();

// Update Max Bitrate to 1.5mbps
config.setMaxBitrate(1500000);

ImageLocalStageStream cameraStream = new ImageLocalStageStream(frontCamera, config);

// Other Stage implementation code
```

**iOS**

```
let config = IVSLocalStageStreamVideoConfiguration();

// Update Max Bitrate to 1.5mbps
try! config.setMaxBitrate(1500000);

let cameraStream = IVSLocalStageStream(device: camera, configuration: config);

// Other Stage implementation code
```

**Web**

```
let cameraStream = new LocalStageStream(camera.getVideoTracks()[0], {
   // Update Max Bitrate to 1.5mbps or 1500kbps
   maxBitrate: 1500
})

// Other Stage implementation code
```

### Mengubah Framerate Stream Video
<a name="real-time-streaming-changing-framerate"></a>

Untuk mengubah framerate streaming video Anda, gunakan contoh konfigurasi berikut.

**Android**

```
StageVideoConfiguration config = new StageVideoConfiguration();

// Update target framerate to 10fps
config.targetFramerate(10);

ImageLocalStageStream cameraStream = new ImageLocalStageStream(frontCamera, config);

// Other Stage implementation code
```

**iOS**

```
let config = IVSLocalStageStreamVideoConfiguration();

// Update target framerate to 10fps
try! config.targetFramerate(10);

let cameraStream = IVSLocalStageStream(device: camera, configuration: config);

// Other Stage implementation code
```

**Web**

```
// Note: On web it is also recommended to configure the framerate of your device from userMedia
const camera = await navigator.mediaDevices.getUserMedia({
   video: {
      frameRate: {
         ideal: 10,
         max: 10,
      },
   },
});

let cameraStream = new LocalStageStream(camera.getVideoTracks()[0], {
   // Update Max Framerate to 10fps
   maxFramerate: 10
})
// Other Stage implementation code
```

### Mengoptimalkan Audio Bitrate dan Dukungan Stereo
<a name="real-time-streaming-optimize-audio-stream"></a>

Untuk mengubah pengaturan bitrate dan stereo aliran audio Anda, gunakan contoh konfigurasi berikut.

**Web**

```
// Note: Disable autoGainControl, echoCancellation, and noiseSuppression when enabling stereo.
const camera = await navigator.mediaDevices.getUserMedia({
   audio: {
      autoGainControl: false,
      echoCancellation: false,
      noiseSuppression: false
   },
});

let audioStream = new LocalStageStream(camera.getAudioTracks()[0], {
   // Optional: Update Max Audio Bitrate to 96Kbps. Default is 64Kbps
   maxAudioBitrateKbps: 96,

   // Signal stereo support. Note requires dual channel input source.
   stereo: true
})

// Other Stage implementation code
```

**Android**

```
StageAudioConfiguration config = new StageAudioConfiguration();

// Update Max Bitrate to 96Kbps. Default is 64Kbps.
config.setMaxBitrate(96000);

AudioLocalStageStream microphoneStream = new AudioLocalStageStream(microphone, config);

// Other Stage implementation code
```

**iOS**

```
let config = IVSLocalStageStreamConfiguration();

// Update Max Bitrate to 96Kbps. Default is 64Kbps.
try! config.audio.setMaxBitrate(96000);

let microphoneStream = IVSLocalStageStream(device: microphone, config: config);

// Other Stage implementation code
```

### Mengubah Buffer Jitter Pelanggan MinDelay
<a name="real-time-streaming-jitter-buffer-min-delay"></a>

Untuk mengubah penundaan minimum buffer jitter bagi peserta yang sedang berlangganan, kustom `subscribeConfiguration` dapat digunakan. Buffer jitter menentukan berapa banyak paket yang disimpan sebelum pemutaran dimulai. Penundaan minimum mewakili target untuk jumlah minimum data yang harus disimpan. Mengubah penundaan minimum dapat membantu pemutaran menjadi lebih tangguh saat menghadapi masalah paket loss/connection .

Pengorbanan saat meningkatkan ukuran buffer jitter adalah bahwa hal itu juga akan meningkatkan penundaan sebelum pemutaran dimulai. Meningkatkan penundaan minimum memberikan lebih banyak ketahanan, dengan mengorbankan waktu yang memengaruhi video. Perhatikan bahwa meningkatkan penundaan minimum selama pemutaran memiliki efek yang serupa: pemutaran akan berhenti sebentar untuk memungkinkan buffer jitter terisi.

Jika diperlukan lebih banyak ketahanan, sebaiknya mulai dengan preset penundaan minimum `MEDIUM` dan pengaturan konfigurasi berlangganan sebelum pemutaran dimulai.

Perhatikan bahwa penundaan minimum hanya diterapkan jika peserta hanya berlangganan. Jika peserta menerbitkan sendiri, penundaan minimum tidak diterapkan. Hal ini dilakukan untuk memastikan bahwa beberapa penerbit dapat berbicara satu sama lain tanpa penundaan tambahan.

Contoh di bawah ini menggunakan preset penundaan minimum. `MEDIUM` Lihat dokumentasi referensi SDK untuk semua nilai yang mungkin.

**Web**

```
const strategy = {  
   subscribeConfiguration: (participant) => {
      return {
         jitterBuffer: {
            minDelay: JitterBufferMinDelay.MEDIUM
         }  
      }

   // ... other strategy functions
}
```

**Android**

```
@Override
public SubscribeConfiguration subscribeConfigrationForParticipant(@NonNull Stage stage, @NonNull ParticipantInfo participantInfo) {
    SubscribeConfiguration config = new SubscribeConfiguration();

    config.jitterBuffer.setMinDelay(JitterBufferConfiguration.JitterBufferDelay.MEDIUM());

    return config;
}
```

**iOS**

```
func stage(_ stage: IVSStage, subscribeConfigurationForParticipant participant: IVSParticipantInfo) -> IVSSubscribeConfiguration {
    let config = IVSSubscribeConfiguration()

    try! config.jitterBuffer.setMinDelay(.medium())

    return config
}
```

## Optimasi yang Disarankan
<a name="real-time-streaming-optimization-suggested"></a>


| Skenario | Rekomendasi | 
| --- | --- | 
| Streaming dengan teks, atau konten yang bergerak lambat, seperti presentasi atau slide  | Gunakan [encoding berlapis dengan simulcast atau [konfigurasikan aliran](#real-time-streaming-changing-framerate) dengan](#real-time-streaming-optimization-adaptive) framerate yang lebih rendah.  | 
| Streaming dengan aksi atau banyak gerakan | Gunakan [encoding berlapis dengan](#real-time-streaming-optimization-adaptive) simulcast.  | 
| Streaming dengan percakapan atau sedikit gerakan  | [[Gunakan [encoding berlapis dengan simulcast](#real-time-streaming-optimization-adaptive) atau pilih audio saja (lihat “Berlangganan Peserta” di Panduan SDK Siaran Streaming Real-Time: Web[, Android,](web-publish-subscribe.md#web-publish-subscribe-concepts-strategy-participants) dan iOS).](ios-publish-subscribe.md#ios-publish-subscribe-concepts-strategy-participants)](android-publish-subscribe.md#android-publish-subscribe-concepts-strategy-participants)  | 
| Pengguna streaming dengan data terbatas  | [Gunakan [encoding berlapis dengan simulcast](#real-time-streaming-optimization-adaptive) atau, jika Anda ingin penggunaan data yang lebih rendah untuk semua orang, [konfigurasikan framerate yang lebih rendah dan turunkan bitrate](#real-time-streaming-changing-framerate) secara manual.](#real-time-streaming-changing-bitrate)  | 