View a markdown version of this page

Memulai dengan IVS iOS Broadcast SDK | Streaming Low-Latency - Amazon IVS

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

Memulai dengan IVS iOS Broadcast SDK | Streaming Low-Latency

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

Instal Perpustakaan

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

Direkomendasikan: Mengintegrasikan Broadcast SDK (Swift Package Manager)

  1. Unduh Package.swift file dari https://broadcast.live-video.net/1.45.0/Package.swift.

  2. Dalam proyek Anda, buat direktori baru bernama AmazonivsBroadcast dan tambahkan ke kontrol versi.

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

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

  5. Arahkan ke dan pilih direktori AmazonivsBroadcast yang Anda buat, dan pilih Tambahkan Paket.

  6. Saat diminta untuk Mem ilih Produk Paket untuk AmazonivsBroadcast, pilih AmazonivsBroadcast sebagai Produk Paket Anda dengan menetapkan target aplikasi Anda di bagian Tambahkan ke Target.

  7. Pilih Tambah Paket.

Pendekatan Alternatif: Instal Kerangka Secara Manual

  1. Unduh versi terbaru dari https://broadcast.live-video.net/1.45.0/AmazonIVSBroadcast.xcframework.zip.

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

  3. Sematkan AmazonIVSBroadcast.xcframework dengan menyeretnya ke bagian Framework, Libraries, dan Embedded Content pada tab Umum untuk target aplikasi Anda.

    Bagian Kerangka Kerja, Pustaka, dan Konten Tersemat pada tab Umum untuk target aplikasi Anda.

Menerapkan IVSBroadcastSession.Delegate

M IVSBroadcastSession.Delegate enerapkan, 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)") } }

Minta Izin

Aplikasi Anda harus meminta izin untuk mengakses kamera dan mikrofon pengguna. (Ini tidak khusus 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 kedua .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 AndaInfo.plist. Jika tidak, aplikasi Anda akan macet saat mencoba meminta izin.

Nonaktifkan Timer Idle Aplikasi

Ini adalah langkah opsional, tetapi direkomendasikan. Ini mencegah perangkat Anda tidur 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 AVAudioSession

Secara default, SDK siaran akan mengatur aplikasi AndaAVAudioSession. Jika Anda ingin mengelolanya sendiri, setel IVSBroadcastSession.applicationAudioSessionStrategy kenoAction. Tanpa kontrolAVAudioSession, SDK siaran tidak dapat mengelola mikrofon secara internal. Untuk menggunakan mikrofon dengan noAction opsi ini, Anda dapat membuat IVSCustomAudioSource dan memberikan sampel Anda sendiri melaluiAVCaptureSession, AVAudioEngine atau alat lain yang menyediakan sampel audio PCM.

Jika Anda mengatur secara manualAVAudioSession, setidaknya Anda perlu mengatur kategori sebagai .record atau.playbackAndRecord, dan mengaturnya keactive. 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 agar 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

Antarmuka siaran adalahIVSBroadcastSession. 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)

Atur IVSImagePreviewView untuk Pratinjau

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) }

Mulai Siaran

Nama host yang Anda terima di bidang ingestEndpoint respons GetChannel operasi harus diawali rtmps:// dan 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).

Menghentikan Siaran

broadcastSession.stop()

Kelola Acara Siklus Hidup

Gangguan Audio

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 peristiwa 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

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 sesinya dan menyetel isReady propertinya kefalse. Saat aplikasi Anda akan memasuki latar depan lagi, SDK siaran memasang kembali semua perangkat ke IVSMixerSlotConfiguration entri aslinya.

SDK siaran melakukan ini dengan menanggapi UIApplication.didEnterBackgroundNotification danUIApplication.willEnterForegroundNotification.

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

Lihat Menggunakan Video Latar Belakang untuk solusi yang memungkinkan streaming saat aplikasi Anda berada di latar belakang.

Layanan Media Hilang

Dalam kasus yang sangat jarang terjadi, seluruh subsistem media pada perangkat iOS akan macet. Dalam skenario ini, kami tidak dapat lagi menyiarkan. Terserah aplikasi Anda untuk menanggapi pemberitahuan ini dengan tepat. Minimal, berlangganan pemberitahuan ini:

  • Media ServicesWereLostNotification — Tanggapi dengan menghentikan siaran Anda dan sepenuhnya menangani siaran AndaIVSBroadcastSession. Semua komponen internal yang digunakan oleh sesi siaran akan dibatalkan.

  • Media ServicesWereResetNotification — Tanggapi dengan memberi tahu pengguna Anda bahwa mereka dapat menyiarkan lagi. Tergantung pada kasus penggunaan Anda, Anda mungkin dapat secara otomatis memulai penyiaran lagi pada saat ini.