Memulai
-
Instal paket
Terminal window npm i @capgo/ivs-playerTerminal window pnpm add @capgo/ivs-playerTerminal window yarn add @capgo/ivs-playerTerminal window bun add @capgo/ivs-player -
Sinkronkan dengan project native
Terminal window npx cap syncTerminal window pnpm cap syncTerminal window yarn cap syncTerminal window bunx cap sync -
Konfigurasi plugin
Setup Player Dasar:
import { IvsPlayer } from '@capgo/ivs-player';// Buat playerconst { playerId } = await IvsPlayer.create({url: 'https://your-ivs-playback-url.m3u8',autoplay: true});// Mulai pemutaranawait IvsPlayer.play({ playerId });Kontrol Player:
// Jeda pemutaranawait IvsPlayer.pause({ playerId });// Atur volumeawait IvsPlayer.setVolume({playerId,volume: 0.5 // 0.0 hingga 1.0});// Seek ke posisiawait IvsPlayer.seekTo({playerId,position: 30 // detik});Tambahkan ke
Info.plistAnda:<key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true/></dict>Tambahkan ke
AndroidManifest.xmlAnda:<uses-permission android:name="android.permission.INTERNET" /> -
Penanganan event
import { IvsPlayer } from '@capgo/ivs-player';// Dengarkan event playerIvsPlayer.addListener('onState', (event) => {console.log('Status player:', event.state);// Status: idle, buffering, ready, playing, ended});IvsPlayer.addListener('onError', (event) => {console.error('Error player:', event.error);});IvsPlayer.addListener('onDuration', (event) => {console.log('Durasi video:', event.duration);});IvsPlayer.addListener('onProgress', (event) => {console.log('Posisi saat ini:', event.position);});// Dengarkan timed metadataIvsPlayer.addListener('onMetadata', (event) => {console.log('Timed metadata:', event.metadata);}); -
Penggunaan lanjutan
import { IvsPlayer } from '@capgo/ivs-player';export class StreamPlayer {private playerId: string | null = null;private listeners: any[] = [];async initialize(streamUrl: string) {// Buat player dengan konfigurasi kustomconst result = await IvsPlayer.create({url: streamUrl,autoplay: false,muted: true, // Mulai muted untuk kebijakan autoplaycontrols: true});this.playerId = result.playerId;this.setupEventListeners();}private setupEventListeners() {// Perubahan statusconst stateListener = IvsPlayer.addListener('onState', (event) => {this.handleStateChange(event.state);});this.listeners.push(stateListener);// Perubahan kualitasconst qualityListener = IvsPlayer.addListener('onQuality', (event) => {console.log(`Kualitas berubah ke: ${event.quality.name}`);});this.listeners.push(qualityListener);// Update bufferconst bufferListener = IvsPlayer.addListener('onBuffer', (event) => {console.log(`Buffer: ${event.percentage}%`);});this.listeners.push(bufferListener);}private handleStateChange(state: string) {switch (state) {case 'playing':console.log('Stream sedang diputar');break;case 'buffering':console.log('Stream sedang buffering');break;case 'ended':console.log('Stream berakhir');break;}}async play() {if (this.playerId) {await IvsPlayer.play({ playerId: this.playerId });}}async pause() {if (this.playerId) {await IvsPlayer.pause({ playerId: this.playerId });}}async setQuality(qualityName: string) {if (this.playerId) {await IvsPlayer.setQuality({playerId: this.playerId,quality: qualityName});}}async destroy() {// Hapus listenerthis.listeners.forEach(listener => listener.remove());// Hancurkan playerif (this.playerId) {await IvsPlayer.destroy({ playerId: this.playerId });}}}
Referensi API
Section titled “Referensi API”Metode
Section titled “Metode”create(options: CreateOptions)
Section titled “create(options: CreateOptions)”Buat instance IVS player baru.
Parameter:
options: Konfigurasi playerurl: string - URL pemutaran IVSautoplay: boolean - Mulai pemutaran otomatismuted: boolean - Mulai mutedcontrols: boolean - Tampilkan kontrol native
Mengembalikan: Promise<{ playerId: string }>
play(options: PlayerOptions)
Section titled “play(options: PlayerOptions)”Mulai pemutaran.
pause(options: PlayerOptions)
Section titled “pause(options: PlayerOptions)”Jeda pemutaran.
stop(options: PlayerOptions)
Section titled “stop(options: PlayerOptions)”Hentikan pemutaran dan reset posisi.
seekTo(options: SeekOptions)
Section titled “seekTo(options: SeekOptions)”Seek ke posisi tertentu.
setVolume(options: VolumeOptions)
Section titled “setVolume(options: VolumeOptions)”Atur volume player (0.0 hingga 1.0).
setQuality(options: QualityOptions)
Section titled “setQuality(options: QualityOptions)”Atur kualitas pemutaran.
destroy(options: PlayerOptions)
Section titled “destroy(options: PlayerOptions)”Hancurkan instance player.
onState: Perubahan status playeronError: Error pemutaranonDuration: Durasi video tersediaonProgress: Update progres pemutaranonQuality: Perubahan kualitasonMetadata: Event timed metadataonBuffer: Update status buffer
Interface
Section titled “Interface”interface CreateOptions { url: string; autoplay?: boolean; muted?: boolean; controls?: boolean;}
interface PlayerOptions { playerId: string;}
interface SeekOptions extends PlayerOptions { position: number; // detik}
interface VolumeOptions extends PlayerOptions { volume: number; // 0.0 hingga 1.0}
interface QualityOptions extends PlayerOptions { quality: string; // nama kualitas}Catatan Platform
Section titled “Catatan Platform”- Memerlukan iOS 12.0 atau lebih baru
- Menggunakan AVPlayer native dengan ekstensi IVS
- Mendukung Picture-in-Picture di iPad
Android
Section titled “Android”- Memerlukan Android 5.0 (API level 21) atau lebih baru
- Menggunakan Amazon IVS Player SDK
- Akselerasi hardware direkomendasikan
Kasus Penggunaan Umum
Section titled “Kasus Penggunaan Umum”- Streaming Langsung: Event real-time, olahraga, gaming
- Streaming Interaktif: Polling penonton, sesi tanya jawab
- E-commerce: Belanja langsung dengan highlight produk
- Pendidikan: Kelas langsung dengan konten timed
- Hiburan: Konser, pertunjukan dengan interaksi penonton
Praktik Terbaik
Section titled “Praktik Terbaik”-
Penanganan Jaringan: Pantau kualitas koneksi
IvsPlayer.addListener('onError', (event) => {if (event.error.includes('network')) {// Tangani error jaringanshowRetryButton();}}); -
Manajemen Resource: Selalu hancurkan player saat selesai
-
Kebijakan Autoplay: Mulai muted untuk autoplay yang andal
-
Pemilihan Kualitas: Biarkan IVS menangani pergantian kualitas otomatis
Pemecahan Masalah
Section titled “Pemecahan Masalah”Stream tidak diputar:
- Verifikasi URL pemutaran IVS valid
- Periksa izin jaringan
- Pastikan stream sedang live
Latensi tinggi:
- IVS dioptimalkan untuk latensi rendah, periksa pengaturan encoder Anda
- Verifikasi Anda menggunakan URL pemutaran khusus IVS
Masalah kualitas:
- Izinkan pergantian kualitas otomatis
- Periksa persyaratan bandwidth jaringan