Per Iniziare
-
Installa il pacchetto
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 -
Sincronizza con i progetti nativi
Terminal window npx cap syncTerminal window pnpm cap syncTerminal window yarn cap syncTerminal window bunx cap sync -
Configura il plugin
Configurazione Base del Player:
import { IvsPlayer } from '@capgo/ivs-player';// Crea un playerconst { playerId } = await IvsPlayer.create({url: 'https://your-ivs-playback-url.m3u8',autoplay: true});// Avvia la riproduzioneawait IvsPlayer.play({ playerId });Controlli del Player:
// Metti in pausa la riproduzioneawait IvsPlayer.pause({ playerId });// Imposta il volumeawait IvsPlayer.setVolume({playerId,volume: 0.5 // da 0.0 a 1.0});// Vai a una posizioneawait IvsPlayer.seekTo({playerId,position: 30 // secondi});Aggiungi al tuo
Info.plist:<key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true/></dict>Aggiungi al tuo
AndroidManifest.xml:<uses-permission android:name="android.permission.INTERNET" /> -
Gestione eventi
import { IvsPlayer } from '@capgo/ivs-player';// Ascolta gli eventi del playerIvsPlayer.addListener('onState', (event) => {console.log('Stato del player:', event.state);// Stati: idle, buffering, ready, playing, ended});IvsPlayer.addListener('onError', (event) => {console.error('Errore del player:', event.error);});IvsPlayer.addListener('onDuration', (event) => {console.log('Durata del video:', event.duration);});IvsPlayer.addListener('onProgress', (event) => {console.log('Posizione corrente:', event.position);});// Ascolta metadati temporizzatiIvsPlayer.addListener('onMetadata', (event) => {console.log('Metadati temporizzati:', event.metadata);}); -
Utilizzo avanzato
import { IvsPlayer } from '@capgo/ivs-player';export class StreamPlayer {private playerId: string | null = null;private listeners: any[] = [];async initialize(streamUrl: string) {// Crea player con configurazione personalizzataconst result = await IvsPlayer.create({url: streamUrl,autoplay: false,muted: true, // Inizia silenzioso per politiche autoplaycontrols: true});this.playerId = result.playerId;this.setupEventListeners();}private setupEventListeners() {// Cambiamenti di statoconst stateListener = IvsPlayer.addListener('onState', (event) => {this.handleStateChange(event.state);});this.listeners.push(stateListener);// Cambiamenti di qualitàconst qualityListener = IvsPlayer.addListener('onQuality', (event) => {console.log(`Qualità cambiata a: ${event.quality.name}`);});this.listeners.push(qualityListener);// Aggiornamenti 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('Lo stream sta riproducendo');break;case 'buffering':console.log('Lo stream sta bufferizzando');break;case 'ended':console.log('Stream terminato');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() {// Rimuovi listenerthis.listeners.forEach(listener => listener.remove());// Distruggi playerif (this.playerId) {await IvsPlayer.destroy({ playerId: this.playerId });}}}
Riferimento API
Section titled “Riferimento API”Metodi
Section titled “Metodi”create(options: CreateOptions)
Section titled “create(options: CreateOptions)”Crea una nuova istanza del player IVS.
Parametri:
options: Configurazione del playerurl: string - URL di riproduzione IVSautoplay: boolean - Avvia riproduzione automaticamentemuted: boolean - Inizia silenziosocontrols: boolean - Mostra controlli nativi
Ritorna: Promise<{ playerId: string }>
play(options: PlayerOptions)
Section titled “play(options: PlayerOptions)”Avvia la riproduzione.
pause(options: PlayerOptions)
Section titled “pause(options: PlayerOptions)”Metti in pausa la riproduzione.
stop(options: PlayerOptions)
Section titled “stop(options: PlayerOptions)”Ferma la riproduzione e resetta la posizione.
seekTo(options: SeekOptions)
Section titled “seekTo(options: SeekOptions)”Vai a una posizione specifica.
setVolume(options: VolumeOptions)
Section titled “setVolume(options: VolumeOptions)”Imposta il volume del player (da 0.0 a 1.0).
setQuality(options: QualityOptions)
Section titled “setQuality(options: QualityOptions)”Imposta la qualità di riproduzione.
destroy(options: PlayerOptions)
Section titled “destroy(options: PlayerOptions)”Distruggi l’istanza del player.
Eventi
Section titled “Eventi”onState: Cambiamenti di stato del playeronError: Errori di riproduzioneonDuration: Durata video disponibileonProgress: Aggiornamenti del progresso di riproduzioneonQuality: Cambiamenti di qualitàonMetadata: Eventi metadati temporizzationBuffer: Aggiornamenti stato buffer
Interfacce
Section titled “Interfacce”interface CreateOptions { url: string; autoplay?: boolean; muted?: boolean; controls?: boolean;}
interface PlayerOptions { playerId: string;}
interface SeekOptions extends PlayerOptions { position: number; // secondi}
interface VolumeOptions extends PlayerOptions { volume: number; // da 0.0 a 1.0}
interface QualityOptions extends PlayerOptions { quality: string; // nome qualità}Note sulla Piattaforma
Section titled “Note sulla Piattaforma”- Richiede iOS 12.0 o successivo
- Utilizza AVPlayer nativo con estensioni IVS
- Supporta Picture-in-Picture su iPad
Android
Section titled “Android”- Richiede Android 5.0 (API level 21) o successivo
- Utilizza Amazon IVS Player SDK
- Accelerazione hardware consigliata
Casi d’Uso Comuni
Section titled “Casi d’Uso Comuni”- Streaming Live: Eventi in tempo reale, sport, gaming
- Streaming Interattivo: Sondaggi degli spettatori, sessioni Q&A
- E-commerce: Shopping live con evidenziazione prodotti
- Educazione: Lezioni live con contenuti temporizzati
- Intrattenimento: Concerti, spettacoli con interazione del pubblico
Migliori Pratiche
Section titled “Migliori Pratiche”-
Gestione della Rete: Monitora la qualità della connessione
IvsPlayer.addListener('onError', (event) => {if (event.error.includes('network')) {// Gestisci errori di reteshowRetryButton();}}); -
Gestione delle Risorse: Distruggi sempre i player quando hai finito
-
Politiche di Autoplay: Inizia silenzioso per autoplay affidabile
-
Selezione Qualità: Lascia che IVS gestisca il cambio automatico di qualità
Risoluzione dei Problemi
Section titled “Risoluzione dei Problemi”Lo stream non riproduce:
- Verifica che l’URL di riproduzione IVS sia valido
- Controlla i permessi di rete
- Assicurati che lo stream sia live
Alta latenza:
- IVS è ottimizzato per bassa latenza, controlla le impostazioni del tuo encoder
- Verifica di usare l’URL di riproduzione specifico di IVS
Problemi di qualità:
- Permetti il cambio automatico di qualità
- Controlla i requisiti di larghezza di banda della rete