Kako pretakati okrnjen zvok z uporabo vmesnika MediaSource API
Z API za MediaSource, ti lahko ustvarjanje in konfiguriranje medijskih tokov v brskalniku. To vam omogoča izvedejo različne operacije na medijskih podatkih ki jih vsebujejo oznake, povezane z mediji, kot so ali
. Na primer, lahko mešajte različne tokove, ustvarjanje prekrivajočih se medijev, leni obremenilni mediji, in uredite meritve medijev kot je sprememba glasnosti ali frekvence.
V tem prispevku bomo natančno videli, kako pretaknite zvočni vzorec (skrajšana datoteka MP3) z API za MediaSource v brskalniku pred-predvajanje glasbe občinstvu. Preučili bomo, kako zaznavanje podpore za API, kako povežite element medija HTML API, kako prenesite medije preko Ajaxa in končno, kako potok.
Če želite vnaprej videti, kaj počnemo, si oglejte izvorno kodo na Githubu, ali preverite demo stran.
1. Ustvarite HTML
Če želite ustvariti HTML, dodajte z oznako
kontrole
atribut na svojo stran. Za združljivost za nazaj, tudi dodajte privzeto sporočilo o napaki za uporabnike, katerih brskalniki ne podpirajo te funkcije. Za vklop / izklop tega sporočila bomo uporabili JavaScript.
Korak 2. Zaznavanje podpore brskalnika
V JavaScriptu ustvarite poskusite ... ulovite
blokirajte to vrgel napako če API za MediaSource ni podprt brskalnika uporabnika ali z drugimi besedami, če MediaSource
(ključ) ne obstaja v okno
predmet.
poskusite if (! 'MediaSource' v oknu) vrgite novo ReferenceError ('Lastnost MediaSource v objektu okna.') catch (e) console.log (e);
3. odkrijte podporo MIME
Po preverjanju podpore preverite tudi za podpora tipa MIME. Če brskalnik ne podpira tipa MIME medija, ki ga želite pretakati, opozorilo uporabnika in vrgel napako.
var mime = 'avdio / mpeg'; if (! MediaSource.isTypeSupported (mime)) alert ('Ne morem predvajati medija. Mediji tipa MIME' + mime + 'ni podprt.'); throw (»Media tipa« + mime + »ni podprt.«);
Upoštevajte, da mora biti odrezek kode zgoraj v notranjosti poskusite
blok, pred ulov
blok (za referenco sledite oštevilčenju vrstic ali si oglejte končno datoteko JS v Githubu).
Korak 4. Povežite
za API za MediaSource
Ustvarite novo MediaSource
predmet, in dodeli kot vir oznaka z uporabo
URL.createObjectURL ()
metodo.
var audio = document.querySelector ('audio'), mediaSource = new MediaSource (); audio.src = URL.createObjectURL (mediaSource);
Korak 5. Dodajte a SourceBuffer
nasprotovati MediaSource
Ko je element medija HTML dostopa do vira medijev in je pripravljen ustvarite SourceBuffer
predmetov, API za MediaSource požari a vir
dogodka .
The SourceBuffer
predmet ima kos medijev ki se sčasoma dekodira, obdeluje in predvaja. Samski MediaSource
predmet lahko imajo več SourceBuffer
predmetov.
V notranjosti . \ t vir
dogodka, dodajte a SourceBuffer
nasprotovati MediaSource
z addSourceBuffer ()
metodo.
mediaSource.addEventListener ('sourceopen', funkcija () var sourceBuffer = this.addSourceBuffer (mime););
Korak 6. Prenesite medij
Zdaj, ko imate SourceBuffer
predmet, je čas prenesi datoteko MP3. V našem primeru bomo to storili do konca z zahtevo AJAX.
Uporaba arraybuffer
kot responseType
, ki označuje binarne podatke. Ko je odgovor uspešno prevzet, dodajte SourceBuffer
z appendBuffer ()
metodo.
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) primer 200: sourceBuffer.appendBuffer (this.response); break; case 404: met 'File Not Found'; default: throw 'Ni bilo mogoče prenesti file '; catch (e) console.error (e);; xhr.send (););
7. Navedite konec toka
Ko API doda podatke v SourceBuffer
a imenovan dogodek posodabljati
je odpuščen. V upravljalniku dogodkov pokličite Konec toka()
metodo. \ t MediaSource
do označuje, da se je tok končal.
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) primer 200: sourceBuffer.appendBuffer (this.response); sourceBuffer.addEventListener ('updateend', function (_) mediaSource.endOfStream (); 404: vrgel 'Datoteka ni najdena', privzeto: vrgel 'Neuspelo pridobivanje datoteke'; ulov (e) console.error (e);; xhr.send ();) ;
Korak 8. Izrežite predstavnostno datoteko
The SourceBuffer
predmet ima dve lastnosti imenuje appendWindowStart
in appendWindowEnd
ki predstavljajo. \ t začetni in končni čas medijskih podatkov želite filtrirati. Označena koda spodaj filtrira prve štiri sekunde MP3.
mediaSource.addEventListener ('sourceopen', funkcija () var sourceBuffer = this.addSourceBuffer (mime); sourceBuffer.appendWindowEnd = 4.0;…);
Demo
In to je vse, naše zvočni vzorec je pretočen na spletni strani. Za izvorno kodo, si oglejte našo Github repo in za končni rezultat preverite demo stran.
Podpora za brskalnik
Od pisanja te objave MediaSource
API je uradno podprt v vseh večjih brskalnikih. Toda testiranje kaže, da Izvajanje je v programu Firefox moteno, in brskalniki Webkit imajo še vedno težave z appendWindowStart
nepremičnine.
Kot je vmesnik MediaSource API še v poskusni fazi, dostop do funkcij višjega urejanja je lahko omejen, vendar osnovno pretakanje funkcija je nekaj, kar lahko takoj uporabite.