Početna » šifriranje » Kako strujati skraćeni audio pomoću MediaSource API-ja

    Kako strujati skraćeni audio pomoću MediaSource API-ja

    Sa MediaSource API, možeš generirati i konfigurirati medijske tokove izravno u pregledniku. To vam omogućuje izvršiti različite operacije na medijskim podacima drže HTML oznake povezane s medijima, kao što su ili . Na primjer, možete miješajte različite struje, stvoriti preklapajuće medije, lijeni mediji za učitavanje, i uredite podatke o medijima kao što je promjena glasnoće ili frekvencije.

    U ovom postu posebno ćemo vidjeti kako stream audio uzorak (skraćena MP3 datoteka) s oznakom MediaSource API pravo u pregledniku kako biste glazbu prije prikazivanja svojoj publici. Mi ćemo pokriti kako otkrivanje podrške za API, kako da spojite HTML element medija na API, kako dohvatiti medije preko Ajaxa, i konačno kako potok.

    Ako želite unaprijed vidjeti što smjeramo, pogledajte u izvorni kod na Githubu, ili provjerite demo stranicu.

    Korak 1. Stvorite HTML

    Da biste stvorili HTML, dodajte s oznakom kontrole atribut na svoju stranicu. Za kompatibilnost unatrag također dodaj zadanu poruku o pogrešci za korisnike čiji preglednici ne podržavaju tu značajku. Mi ćemo koristiti JavaScript za uključivanje / isključivanje ove poruke.

      

    Korak 2. Otkrivanje podrške preglednika

    U JavaScriptu izradite pokušaj uhvatiti blokirat će to baciti pogrešku ako MediaSource API nije podržan preglednik korisnika ili, s drugim riječima, ako MediaSourcea (ključ) ne postoji u prozor objekt.

     pokušajte if (! 'MediaSource' u prozoru) bacite novu ReferenceError ('Nema objekta MediaSource u objektu prozora.') catch (e) console.log (e);  

    Korak 3. Otkrivanje MIME podrške

    Nakon provjere podrške provjerite i za podršku tipa MIME. Ako preglednik ne podržava MIME vrstu medija koji želite emitirati, upozorite korisnika i baciti pogrešku.

    var mime = 'audio / mpeg'; ako (! MediaSource.isTypeSupported (mime)) alert ('Ne mogu se reproducirati mediji. Mediji tipa MIME' + mime + 'nisu podržani.'); throw ('Mediji tipa' + mime + 'nije podržan.');  

    Napominjemo da isječak koda iznad mora biti postavljene unutar probati blok, prije ulov blok (za referencu, slijedite numeriranje linije ili provjerite konačnu JS datoteku na Githubu).

    Korak 4. Povežite za API za MediaSource

    Stvorite novo MediaSourcea objekt, i dodijelite ga kao izvor označiti pomoću URL.createObjectURL () način.

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

    Korak 5. Dodajte a SourceBuffer objekt MediaSourcea

    Kada HTML element medija pristupa izvoru medija i spreman je stvoriti SourceBuffer objekti, API za MediaSource požari sourceopen događaj .

    SourceBuffer objekt drži komad medija koji se na kraju dekodira, obrađuje i reproducira. Jedan MediaSourcea objekt može imati više SourceBuffer objekti.

    Unutar događaj rukovatelj sourceopen događaj, dodati SourceBuffer objekt MediaSourcea s addSourceBuffer () način.

     mediaSource.addEventListener ('sourceopen', funkcija () var sourceBuffer = this.addSourceBuffer (mime);); 

    Korak 6. Dohvatite medije

    Sada kada imate SourceBuffer objekt, vrijeme je dohvatiti MP3 datoteku. U našem primjeru, učinit ćemo to do kraja pomoću AJAX zahtjeva.

    Koristiti arraybuffer kao responseType, koji označava binarne podatke. Kada se odgovor uspješno dohvati, dodajte ga SourceBuffer s appendBuffer () način.

     mediaSource.addEventListener ('sourceopen', funkcija () var sourceBuffer = this.addSourceBuffer (mime); var xhr = novo XMLHttpRequest; xhr.open ('GET', 'sample.mp3'); xhr.responseType = 'arraybuffer' ; xhr.onload = function () try switch (this.status) slučaj 200: sourceBuffer.appendBuffer (this.response); break; case 404: bacite 'File Not Found'; default: throw 'Nije uspjelo dohvatiti file '; catch (e) console.error (e);; xhr.send ();); 

    Korak 7. Označite kraj potoka

    Kada API završi s dodavanjem podataka SourceBuffer poziv updatend je ispaljen. Unutar rukovatelja događaja, nazovite endOfStream () metoda MediaSourcea do označava da je tok završio.

     mediaSource.addEventListener ('sourceopen', funkcija () var sourceBuffer = this.addSourceBuffer (mime); var xhr = novo 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 (); 404: baciti 'Datoteka nije pronađena'; default: baciti 'Nije uspjelo dohvatiti datoteku'; uhvatiti (e) console.error (e);; xhr.send ();) ; 

    Korak 8. Skratite medijsku datoteku

    SourceBuffer objekt ima dva svojstva zvao appendWindowStart i appendWindowEnd koji predstavljaju vrijeme početka i završetka medijskih podataka želite filtrirati. Označeni kôd u nastavku filtrira prve četiri sekunde MP3.

     mediaSource.addEventListener ('sourceopen', funkcija () var sourceBuffer = this.addSourceBuffer (mime); sourceBuffer.appendWindowEnd = 4.0;…); 

    Demo

    I to je sve, naše audio uzorak se struji izravno s web-stranice. Za izvorni kod, pogledajte naš Github repo i za konačni rezultat provjerite demo stranicu.

    Podrška za preglednik

    Što se tiče pisanja ovog posta, MediaSourcea API je službeno podržan u svim većim preglednicima. Ali testiranje pokazuje da je implementacija je lud u Firefoxu, Webkit preglednici i dalje imaju poteškoća s appendWindowStart svojstvo.

    Kao što je MediaSource API još uvijek u eksperimentalnoj fazi, pristup funkcijama višeg uređivanja može biti ograničen, ali osnovno strujanje značajka je nešto što možete odmah iskoristiti.