

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

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

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

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

Kami menyarankan Anda mengintegrasikan SDK siaran melalui Swift Package Manager. (Atau, Anda dapat menambahkan kerangka kerja secara manual ke proyek Anda.)

### Direkomendasikan: Integrasikan Broadcast SDK (Swift Package Manager)
<a name="broadcast-ios-install-swift"></a>

1. Unduh file Package.swift dari [https://broadcast.live-video.net/1.41.0/Package.swift](https://broadcast.live-video.net/1.41.0/Package.swift).

1. Dalam proyek Anda, buat direktori baru bernama Amazon IVSBroadcast dan tambahkan ke kontrol versi.

1. Tempatkan file Package.swift yang diunduh di direktori baru.

1. **Di Xcode, buka **File > Add Package Dependencies dan pilih Add** Local...**

1. Arahkan ke dan pilih IVSBroadcast direktori Amazon yang Anda buat, lalu pilih **Add Package**.

1. Saat diminta untuk **Memilih Produk Paket untuk AmazonIVSBroadcast, pilih **Amazon IVSBroadcast**** sebagai **Produk Package** Anda dengan menetapkan target aplikasi Anda di bagian **Tambahkan ke Target**.

1. Pilih **Add Package**.

### Pendekatan Alternatif: Instal Kerangka Secara Manual
<a name="broadcast-ios-install-manual"></a>

1. Unduh versi terbaru dari [https://broadcast.live-video.net/1.41.0/Amazon IVSBroadcast .xcframework.zip.](https://broadcast.live-video.net/1.41.0/AmazonIVSBroadcast.xcframework.zip)

1. Ekstrak konten arsip. `AmazonIVSBroadcast.xcframework` berisi SDK untuk perangkat dan simulator.

1. Sematkan `AmazonIVSBroadcast.xcframework` dengan menyeretnya ke bagian **Frameworks, Libraries, dan Embedded Content** pada tab **General** untuk target aplikasi Anda.  
![\[Bagian Kerangka Kerja, Pustaka, dan Konten Tersemat pada tab Umum untuk target aplikasi Anda.\]](http://docs.aws.amazon.com/id_id/ivs/latest/LowLatencyUserGuide/images/iOS_Broadcast_SDK_Guide_xcframework.png)

## Menerapkan IVSBroadcast Session.Delegate
<a name="broadcast-ios-implement-ivsbroadcastsessiondelegate"></a>

Implementasikan`IVSBroadcastSession.Delegate`, yang memungkinkan Anda menerima pembaruan status dan pemberitahuan perubahan perangkat:

```
extension ViewController : IVSBroadcastSession.Delegate {
   func broadcastSession(_ session: IVSBroadcastSession,
                         didChange state: IVSBroadcastSession.State) {
      print("IVSBroadcastSession did change state \(state)")
   }

   func broadcastSession(_ session: IVSBroadcastSession,
                         didEmitError error: Error) {
      print("IVSBroadcastSession did emit error \(error)")
   }
}
```

## Permintaan Izin
<a name="broadcast-ios-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, kami memintanya:

```
switch AVCaptureDevice.authorizationStatus(for: .video) {
case .authorized: // permission already granted.
case .notDetermined:
   AVCaptureDevice.requestAccess(for: .video) { granted in
       // permission granted based on granted bool.
   }
case .denied, .restricted: // permission denied.
@unknown default: // permissions unknown.
}
```

Anda perlu melakukan ini untuk keduanya `.video` dan jenis `.audio` media, jika Anda ingin akses ke kamera dan mikrofon, masing-masing.

Anda juga perlu menambahkan entri untuk `NSCameraUsageDescription` dan `NSMicrophoneUsageDescription` ke Anda`Info.plist`. Jika tidak, aplikasi Anda akan macet saat mencoba meminta izin.

## Nonaktifkan Aplikasi Idle Timer
<a name="broadcast-ios-disable-idle-timer"></a>

Ini adalah langkah opsional, tetapi direkomendasikan. Ini mencegah perangkat Anda tertidur saat menggunakan SDK siaran, yang akan mengganggu siaran.

```
override func viewDidAppear(_ animated: Bool) {
   super.viewDidAppear(animated)
   UIApplication.shared.isIdleTimerDisabled = true
}
override func viewDidDisappear(_ animated: Bool) {
   super.viewDidDisappear(animated)
   UIApplication.shared.isIdleTimerDisabled = false
}
```

## (Opsional) Mengatur AVAudio Sesi
<a name="broadcast-ios-setup-avaudiosession"></a>

Secara default, SDK siaran akan menyiapkan aplikasi Anda. `AVAudioSession` Jika Anda ingin mengelola ini sendiri, atur `IVSBroadcastSession.applicationAudioSessionStrategy` ke`noAction`. Tanpa kontrol`AVAudioSession`, SDK siaran tidak dapat mengelola mikrofon secara internal. Untuk menggunakan mikrofon dengan `noAction` opsi, Anda dapat membuat `IVSCustomAudioSource` dan memberikan sampel Anda sendiri melalui`AVCaptureSession`, `AVAudioEngine` atau alat lain yang menyediakan sampel audio PCM.

Jika Anda mengatur secara manual`AVAudioSession`, minimal Anda perlu mengatur kategori sebagai `.record` atau`.playbackAndRecord`, dan mengaturnya ke`active`. Jika Anda ingin merekam audio dari perangkat Bluetooth, Anda perlu menentukan `.allowBluetooth` opsi juga:

```
do {
   try AVAudioSession.sharedInstance().setCategory(.record, options: .allowBluetooth)
   try AVAudioSession.sharedInstance().setActive(true)
} catch {
   print("Error configuring AVAudioSession")
}
```

Kami menyarankan Anda membiarkan SDK menangani ini untuk Anda. Jika tidak, jika Anda ingin memilih di antara perangkat audio yang berbeda, Anda harus mengelola port secara manual.

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

Antarmuka siaran adalah`IVSBroadcastSession`. Inisialisasi seperti yang ditunjukkan di bawah ini:

```
let broadcastSession = try IVSBroadcastSession(
   configuration: IVSPresets.configurations().standardLandscape(),
   descriptors: IVSPresets.devices().frontCamera(),
   delegate: self)
```

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

## Mengatur IVSImage PreviewView untuk Pratinjau
<a name="broadcast-ios-set-imagepreviewview"></a>

Jika Anda ingin menampilkan pratinjau untuk perangkat kamera aktif, tambahkan pratinjau `IVSImagePreviewView` perangkat ke hierarki tampilan Anda:

```
// If the session was just created, execute the following 
// code in the callback of IVSBroadcastSession.awaitDeviceChanges 
// to ensure all devices have been attached.
if let devicePreview = try broadcastSession.listAttachedDevices()
   .compactMap({ $0 as? IVSImageDevice })
   .first?
   .previewView()
{
   previewView.addSubview(devicePreview)
}
```

## Memulai Siaran
<a name="broadcast-ios-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`

```
try broadcastSession.start(with: IVS_RTMPS_URL, streamKey: IVS_STREAMKEY)
```

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

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

```
broadcastSession.stop()
```

## Mengelola Acara Siklus Hidup
<a name="broadcast-ios-lifecycle-events"></a>

### Interupsi Audio
<a name="broadcast-ios-audio-interruptions"></a>

Ada beberapa skenario di mana SDK siaran tidak akan memiliki akses eksklusif ke perangkat keras input audio. Beberapa contoh skenario yang perlu Anda tangani adalah:
+ Pengguna menerima panggilan telepon atau FaceTime panggilan
+ Pengguna mengaktifkan Siri

Apple memudahkan untuk menanggapi acara ini dengan berlangganan`AVAudioSession.interruptionNotification`:

```
NotificationCenter.default.addObserver(
   self,
   selector: #selector(audioSessionInterrupted(_:)),
   name: AVAudioSession.interruptionNotification,
   object: nil)
```

Kemudian Anda dapat menangani acara dengan sesuatu seperti ini:

```
// This assumes you have a variable `isRunning` which tracks if the broadcast is currently live, and another variable `wasRunningBeforeInterruption` which tracks whether the broadcast was active before this interruption to determine if it should resume after the interruption has ended.

@objc
private func audioSessionInterrupted(_ notification: Notification) {
   guard let userInfo = notification.userInfo,
         let typeValue = userInfo[AVAudioSessionInterruptionTypeKey] as? UInt,
         let type = AVAudioSession.InterruptionType(rawValue: typeValue)
   else {
      return
   }
   switch type {
   case .began:
      wasRunningBeforeInterruption = isRunning
      if isRunning {
         broadcastSession.stop()
      }
   case .ended:
      defer {
         wasRunningBeforeInterruption = false
      }
      guard let optionsValue = userInfo[AVAudioSessionInterruptionOptionKey] as? UInt else { return }
      let options = AVAudioSession.InterruptionOptions(rawValue: optionsValue)
      if options.contains(.shouldResume) && wasRunningBeforeInterruption {
         try broadcastSession.start(
            with: IVS_RTMPS_URL,
            streamKey: IVS_STREAMKEY)
      }
   @unknown default: break
   }
}
```

### Aplikasi Masuk Ke Latar Belakang
<a name="broadcast-ios-app-to-background"></a>

Aplikasi standar di iOS tidak diperbolehkan menggunakan kamera di latar belakang. Ada juga batasan pada pengkodean video di latar belakang: karena encoder perangkat keras terbatas, hanya aplikasi latar depan yang memiliki akses. Karena itu, SDK siaran secara otomatis mengakhiri sesi dan menyetel `isReady` propertinya. `false` Saat aplikasi Anda akan masuk ke latar depan lagi, SDK siaran akan memasang kembali semua perangkat ke entri aslinya. `IVSMixerSlotConfiguration`

SDK siaran melakukan ini dengan menanggapi `UIApplication.didEnterBackgroundNotification` dan. `UIApplication.willEnterForegroundNotification`

Jika Anda menyediakan sumber gambar khusus, Anda harus siap menangani notifikasi ini. Anda mungkin perlu mengambil langkah ekstra untuk meruntuhkannya sebelum aliran dihentikan.

Lihat [Menggunakan Video Latar Belakang](broadcast-ios-use-cases.md#broadcast-ios-background-video) untuk solusi yang memungkinkan streaming saat aplikasi Anda berada di latar belakang.

### Layanan Media Hilang
<a name="broadcast-ios-media-services-lost"></a>

Dalam kasus yang sangat jarang, seluruh subsistem media pada perangkat iOS akan mogok. Dalam skenario ini, kita tidak bisa lagi menyiarkan. Terserah aplikasi Anda untuk menanggapi pemberitahuan ini dengan tepat. Minimal, berlangganan pemberitahuan ini:
+ [mediaServicesWereLostNotification](https://developer.apple.com/documentation/avfaudio/avaudiosession/1616457-mediaserviceswerelostnotificatio)— Tanggapi dengan menghentikan siaran Anda dan sepenuhnya menangani lokasi Anda. `IVSBroadcastSession` Semua komponen internal yang digunakan oleh sesi siaran akan dibatalkan.
+ [mediaServicesWereResetNotification](https://developer.apple.com/documentation/avfaudio/avaudiosession/1616540-mediaserviceswereresetnotificati)— Tanggapi dengan memberi tahu pengguna Anda bahwa mereka dapat menyiarkan lagi. Tergantung pada kasus penggunaan Anda, Anda mungkin dapat secara otomatis mulai menyiarkan lagi pada saat ini.