it.hideout-lastation.com
Paradiso Per Designer E Sviluppatori


Come eseguire lo streaming audio troncato utilizzando l'API MediaSource

Con l' API MediaSource, è possibile generare e configurare flussi multimediali direttamente nel browser. Ti consente di eseguire una varietà di operazioni sui dati multimediali detenuti da tag HTML relativi ai media come

In questo post, vedremo in particolare come eseguire lo streaming di un campione audio (un file MP3 troncato) con l' API MediaSource direttamente nel browser per pre-mostrare la musica al tuo pubblico. Tratteremo come rilevare il supporto per l'API, come connettere l'elemento multimediale HTML all'API, come recuperare i file multimediali tramite Ajax e infine come eseguirne il flusso .

Se vuoi vedere in anticipo cosa stiamo facendo, dai un'occhiata al codice sorgente su Github, o dai un'occhiata alla pagina demo .

Passaggio 1. Creare l'HTML

Per creare l'HTML, aggiungi un

Passaggio 2. Rileva il supporto del browser

In JavaScript, crea un blocco try…catch che genera un errore se l' API MediaSource non è supportata dal browser dell'utente o, con altre parole, MediaSource (la chiave) non esiste nell'oggetto window .

 prova {if (! 'MediaSource' nella finestra) lanciare un nuovo ReferenceError ('Non c'è la proprietà MediaSource nell'oggetto window.')} catch (e) {console.log (e); } 

Passaggio 3. Rileva il supporto MIME

Dopo il controllo dell'assistenza, controlla anche il supporto del tipo MIME . Se il tipo MIME del supporto che vuoi trasmettere non è supportato dal browser, avvisa l'utente e genera un errore .

 var mime = 'audio / mpeg'; if (! MediaSource.isTypeSupported (mime)) {alert ('Impossibile riprodurre il media. Il supporto di tipo MIME' + mime + 'non è supportato.'); throw ('Media di tipo' + mime + 'non è supportato.'); } 

Si noti che il frammento di codice sopra deve essere inserito nel blocco try, prima del blocco catch (per riferimento, seguire la numerazione delle righe o controllare il file JS finale su Github).

Passaggio 4. Collegare il

Creare un nuovo oggetto MediaSource e assegnarlo come origine del

 var audio = document.querySelector ('audio'), mediaSource = new MediaSource (); audio.src = URL.createObjectURL (mediaSource); 

Passaggio 5. Aggiungi un oggetto SourceBuffer a MediaSource

Quando un elemento multimediale HTML accede a un'origine multimediale ed è pronto per creare oggetti SourceBuffer, l'API MediaSource sourceopen un evento sourceopen .

L'oggetto SourceBuffer contiene una porzione di supporto che può essere decodificata, elaborata e riprodotta. Un singolo oggetto MediaSource può avere più oggetti SourceBuffer .

All'interno del gestore sourceopen dell'evento sourceopen, aggiungi un oggetto SourceBuffer a MediaSource con il metodo addSourceBuffer() .

 mediaSource.addEventListener ('sourceopen', function () {var sourceBuffer = this.addSourceBuffer (mime);}); 

Passaggio 6. Scarica il supporto

Ora che hai un oggetto SourceBuffer, è tempo di recuperare il file MP3 . Nel nostro esempio, lo faremo utilizzando una richiesta AJAX .

Usa arraybuffer come responseType, che denota dati binari . Quando la risposta viene recuperata con successo, aggiungila a SourceBuffer con il metodo appendBuffer() .

 mediaSource.addEventListener ('sourceopen', function () {var sourceBuffer = this.addSourceBuffer (mime); var xhr = new XMLHttpRequest; xhr.open ('GET', 'sample.mp3'); xhr.responseType = 'arraybuffer' ; xhr.onload = function () {try {switch (this.status) {caso 200: sourceBuffer.appendBuffer (this.response); break; caso 404: throw 'File Not Found'; default: throw 'Impossibile recuperare il file file ';}} catch (e) {console.error (e);}}; xhr.send ();}); 

Passaggio 7. Indicare la fine del flusso

Quando l'API ha terminato di aggiungere i dati a SourceBuffer viene SourceBuffer un evento chiamato updatend . All'interno di un gestore di eventi, chiamare il metodo endOfStream() di MediaSource per indicare che lo stream è terminato .

 mediaSource.addEventListener ('sourceopen', function () {var sourceBuffer = this.addSourceBuffer (mime); var xhr = new XMLHttpRequest; xhr.open ('GET', 'sample.mp3'); xhr.responseType = 'arraybuffer' ; xhr.onload = function () {try {switch (this.status) {case 200: sourceBuffer.appendBuffer (this.response); sourceBuffer.addEventListener ('updateend', function (_) {mediaSource.endOfStream ();} ); break; caso 404: lanciare 'File Not Found'; default: throw 'Impossibile recuperare il file';}} catch (e) {console.error (e);}}; xhr.send ();}) ; 

Passaggio 8. Tronca il file multimediale

L'oggetto SourceBuffer ha due proprietà denominate appendWindowStart e appendWindowEnd rappresentano l'ora di inizio e di fine dei dati multimediali che si desidera filtrare. Il codice evidenziato sotto filtra i primi quattro secondi del MP3.

 mediaSource.addEventListener ('sourceopen', function () {var sourceBuffer = this.addSourceBuffer (mime); sourceBuffer.appendWindowEnd = 4.0; ...}); 

dimostrazione

E questo è tutto, il nostro campione audio viene riprodotto direttamente dalla pagina web. Per il codice sorgente, dai un'occhiata al nostro repository Github e per il risultato finale, controlla la pagina demo .

Supporto per il browser

Al momento di scrivere questo post, l'API MediaSource è ufficialmente supportata in tutti i principali browser. Ma i test dimostrano che l' implementazione è bacata da Firefox ei browser Webkit presentano ancora problemi con la proprietà appendWindowStart .

Poiché l'API MediaSource è ancora nella sua fase sperimentale, l'accesso a funzioni di modifica più elevate potrebbe essere limitato, ma la funzionalità di base di streaming è qualcosa che puoi utilizzare subito .

6 cose che amiamo fare quando i social media sono giù

6 cose che amiamo fare quando i social media sono giù

Per molte persone, i social media sono fortemente integrati nel loro programma giornaliero. Sembra impossibile passare un giorno senza controllare i nostri account sui social media e, anche se non lo faremo volontariamente, ci sono momenti in cui il sito dei social network potrebbe subire alcuni downtime

(Consigli tecnici e di design)

I progettisti dovrebbero essere obbligati a spiegare il loro processo?

I progettisti dovrebbero essere obbligati a spiegare il loro processo?

Se sei un designer freelance, sei destinato a imbatterti nel temuto "cliente designer" almeno una volta nella tua carriera. Conosci il tipo - la persona che ha sempre un'opinione (o 50) su come dovresti fare il tuo lavoro .I clienti amano spingere il naso nel processo di progettazione indipendentemente dal fatto che debbano o meno farlo

(Consigli tecnici e di design)