Pagrindinis » Kodavimas » Kaip transliuoti sutrumpintą garsą naudojant „MediaSource“ API

    Kaip transliuoti sutrumpintą garsą naudojant „MediaSource“ API

    Su „MediaSource“ API, tu gali generuoti ir konfigūruoti medijos srautus tiesiai naršyklėje. Tai leidžia jums atlikti įvairias žiniasklaidos duomenų operacijas laikomi su žiniasklaida susiję HTML žymenys, pvz., arba . Pavyzdžiui, galite sumaišykite skirtingus srautus, sukurti persidengiančią mediją, tingus krovinių laikmenos, ir redaguoti medijos metriką pvz., keisti garsumą arba dažnį.

    Šiame pranešime konkrečiai pamatysime, kaip transliuoti garso mėginį (sutrumpintas MP3 failas) su „MediaSource“ API teisingai naršyklėje iš anksto rodoma muzika savo auditorijai. Mes apimsime, kaip aptikti API palaikymą, kaip prijunkite HTML laikmenos elementą į API, kaip parsisiųsti žiniasklaidą per „Ajax“ ir galiausiai kaip srautas.

    Jei norite iš anksto pamatyti, ką mes turime, pažvelkite į šaltinio kodas „Github“, arba patikrinkite demonstracinis puslapis.

    1 žingsnis. Sukurkite HTML

    Norėdami sukurti HTML, pridėkite žyma su a kontrolės priemones atributas į savo puslapį. Taip pat ir atgalinis suderinamumas pridėti numatytąjį klaidos pranešimą naudotojams, kurių naršyklės nepalaiko šios funkcijos. Norėdami įjungti / išjungti šį pranešimą, naudosime „JavaScript“.

      

    2. Nustatykite naršyklės palaikymą

    „JavaScript“ sukurkite a pabandykite ... sugauti blokuoti, kad bus mesti klaidą jei „MediaSource API“ nepalaikoma vartotojo naršyklėje arba, kitaip tariant, jei „MediaSource“ (raktas) neegzistuoja viduje konors langas objektą.

     pabandykite if (! 'MediaSource' langelyje) mesti naują ReferenceError („Nėra„ MediaSource “savybės lango objekte.) catch (e) console.log (e);  

    3. Nustatykite MIME palaikymą

    Po paramos patikrinimo taip pat patikrinkite, ar nėra MIME tipo palaikymas. Jei naršyklė nepalaiko norimos srauto MIME tipo, įspėti vartotoją ir mesti klaidą.

    var mime = 'audio / mpeg'; jei (! MediaSource.isTypeSupported (mime)) įspėjimas („Nepavyksta atkurti medijos.„ MIME “tipo žiniasklaida„ + mime + “nepalaikoma.“); mesti („Media“ tipo „+ mime +“ nėra palaikoma. “);  

    Atminkite, kad pirmiau nurodytas kodo fragmentas turi būti viduje bandyti blokuoti, prieš sugauti blokas (nuoroda, vadovaukitės eilutės numeracija arba patikrinkite galutinį JS failą „Github“).

    4 žingsnis. Susieti „MediaSource API“

    Sukurkite naują „MediaSource“ objektą, ir priskirti jį kaip žyma naudojant URL.createObjectURL () metodas.

     var audio = document.querySelector („audio“), mediaSource = naujas „MediaSource“ (); audio.src = URL.createObjectURL (mediaSource); 

    5 veiksmas. Pridėti a „SourceBuffer“ prieštarauja „MediaSource“

    Kai HTML medijos elementas pasiekia medijos šaltinį ir yra pasirengęs sukurti „SourceBuffer“ objektų, „MediaSource API“ gaisrai a šaltinis įvykis .

    The „SourceBuffer“ objektą turi žiniasklaidos gabalą kuri galiausiai dekoduojama, apdorojama ir grojama. Vienas „MediaSource“ objektas gali turėti daugybę „SourceBuffer“ objektų.

    Viduje renginio tvarkytojas šaltinis įvykis, Pridėti „SourceBuffer“ prieštarauja „MediaSource“ su addSourceBuffer () metodas.

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

    6. Pakelkite laikmeną

    Dabar, kai turite „SourceBuffer“ objektas, atėjo laikas parsisiųsti MP3 failą. Mūsų pavyzdyje mes tai padarysime naudojant AJAX užklausą.

    Naudokite masybuffer kaip answerType, kuris žymi dvejetainius duomenis. Kai atsakymas bus sėkmingai atsiųstas, pridėti jį prie „SourceBuffer“ su pridėtiBuffer () metodas.

     mediaSource.addEventListener ('sourceopen', funkcija () var sourceBuffer = this.addSourceBuffer (mime); var xhr = naujas XMLHttpRequest; xhr.open ('GET', 'sample.mp3'); xhr.responseType = 'masybuffer' xhr.onload = function () try switch (this.status) case 200: sourceBuffer.appendBuffer (this.response); pertrauka; atvejis 404: mesti „Failas nerastas“, numatytasis: mesti „Nepavyko atsiųsti file '; catch (e) console.error (e);; xhr.send ();); 

    7. Nurodykite srauto pabaigą

    Kai API baigia pridėti duomenis prie „SourceBuffer“ a įvykis vadinamas atnaujinti yra atleistas. Įvykio tvarkytojo viduje skambinkite endOfStream () metodas „MediaSource“ į rodo, kad srautas baigėsi.

     mediaSource.addEventListener ('sourceopen', funkcija () var sourceBuffer = this.addSourceBuffer (mime); var xhr = naujas XMLHttpRequest; xhr.open ('GET', 'sample.mp3'); xhr.responseType = 'masybuffer' ; xhr.onload = funkcija () try switch (this.status) case 200: sourceBuffer.appendBuffer (this.response); sourceBuffer.addEventListener („updateend“, funkcija (_) mediaSource.endOfStream (); 404: mesti „Failas nerastas“; numatytasis: mesti „Nepavyko gauti failo“; gaudyti (e) console.error (e);; xhr.send ();) ; 

    8. Trumpinkite medijos failą

    The „SourceBuffer“ objektas dvi savybės vadinamas pridėtiWindowStart ir pridėtiWindowEnd atstovauja žiniasklaidos duomenų pradžios ir pabaigos laikas norite filtruoti. Pažymėtas kodas toliau filtruoja pirmąsias keturias sekundes MP3.

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

    Demo

    Ir visa tai, mūsų garso mėginys yra transliuojamas tiesiai iš tinklalapio. Už pirminis kodas, pažvelkite į mūsų Github repo ir dėl galutinio rezultato patikrinkite demonstracinis puslapis.

    Naršyklės palaikymas

    Kaip rašyti šį pranešimą, „MediaSource“ API yra oficialiai palaikoma visose pagrindinėse naršyklėse. Tačiau bandymai rodo, kad „Firefox“ diegimas yra klaidingas, ir Webkit naršyklės vis dar turi problemų pridėtiWindowStart nuosavybė.

    Kaip yra „MediaSource“ API vis dar eksperimentiniame etape, prieiga prie aukštesnių redagavimo funkcijų gali būti ribota, bet pagrindinis transliavimas funkcija yra kažkas, ką galite iš karto pasinaudoti.