Начална » кодиране на стоките » Как да поточно съкратен аудио с помощта на MediaSource API

    Как да поточно съкратен аудио с помощта на MediaSource API

    С API на MediaSource, можеш генериране и конфигуриране на медийни потоци в браузъра. Това ви позволява извършват различни операции с медийни данни свързани с медийни HTML тагове, като например или . Например, можете смесвайте различни потоци, създаване на припокриващи се медии, мързеливи носители, и редактирайте метрични показатели като променяте обема или честотата.

    В тази публикация ще видим конкретно как поточно аудио извадка (съкратен MP3 файл) с API на MediaSource в браузъра, за да Предварително шоу музика на вашата аудитория. Ще разгледаме как да откриване на поддръжка за API, как да свържете HTML медийния елемент към API, как да донесе медиите чрез Ajax и накрая как поток.

    Ако искате да видите предварително какво правим, погледнете изходния код на Github, или проверете демо страница.

    Стъпка 1. Създайте HTML

    За да създадете HTML, добавете маркер с a контроли атрибут към вашата страница. За обратна съвместимост добавете съобщение за грешка по подразбиране за потребители, чиито браузъри не поддържат функцията. Ще използваме JavaScript, за да включим / изключим това съобщение.

      

    Стъпка 2. Открийте поддръжката на браузъра

    В JavaScript създайте a опитай да хванеш блок, който ще хвърли грешка ако API на MediaSource не се поддържа от браузъра на потребителя или с други думи, ако MediaSource (ключът) не съществува в прозорец обект.

     опитайте if (! 'MediaSource' в прозореца) хвърлете нов ReferenceError ('Няма свойство MediaSource в обект на прозорец.') catch (e) console.log (e);  

    Стъпка 3. Открийте MIME поддръжката

    След проверката за поддръжка проверете и за поддръжка на MIME тип. Ако MIME типът на носителя, който искате да предавате, не се поддържа от браузъра, предупреди потребителя и хвърли грешка.

    var mime = 'аудио / mpeg'; if (! MediaSource.isTypeSupported (mime)) alert ("Не може да се пуска медия. Не се поддържа носител от MIME тип" + mime + "); throw ('носител от тип' + mime + 'не се поддържа.');  

    Имайте предвид, че кодовия фрагмент по-горе трябва да бъде поставени вътре опитвам блок, преди улов блок (за справка, следвайте номерацията на реда или проверете окончателния JS файл в Github).

    Стъпка 4. Свържете към API на MediaSource

    Създайте ново MediaSource обект, и задайте го като източник на свободен край с помощта на URL.createObjectURL () метод.

     var audio = document.querySelector ('аудио'), mediaSource = нов MediaSource (); audio.src = URL.createObjectURL (mediaSource); 

    Стъпка 5. Добавете a SourceBuffer обект на MediaSource

    Когато HTML медиен елемент достъп до медиен източник и е готов създавам SourceBuffer обекти, API на MediaSource пожари a sourceopen събитие .

    Най- SourceBuffer обект държи част от медиите която е в крайна сметка декодирана, обработена и възпроизведена. Сингъл MediaSource обектът може имат няколко SourceBuffer обекти.

    Вътре събитие за обработване на събития sourceopen събитие, добави SourceBuffer обект на MediaSource с addSourceBuffer () метод.

     mediaSource.addEventListener ('sourceopen', функция () var sourceBuffer = this.addSourceBuffer (mime);); 

    Стъпка 6. Донесете медиите

    Сега, когато имате SourceBuffer обект, време е извличане на MP3 файла. В нашия пример ще го направим използване на AJAX заявка.

    употреба arraybuffer като responseType, който означава двоични данни. Когато отговорът е успешно извлечен, добавете го към SourceBuffer с appendBuffer () метод.

     mediaSource.addEventListener ('sourceopen', функция () var sourceBuffer = this.addSourceBuffer (mime); var xhr = new XMLHttpRequest; xhr.onload = function () try switch (this.status) случай 200: sourceBuffer.appendBuffer (this.response); прекъсване; случай 404: хвърли 'File Not Found'; файл '; catch (e) console.error (e);; xhr.send ();); 

    Стъпка 7. Посочете края на потока

    Когато API приключи добавянето на данните към SourceBuffer един събитие updatend е уволнен. Вътре в манипулатор на събития, обадете се на край на поток() метод MediaSource да се показва, че потокът е приключил.

     mediaSource.addEventListener ('sourceopen', функция () var sourceBuffer = this.addSourceBuffer (mime); var xhr = new XMLHttpRequest; ; xhr.onload = function () try switch (this.status) случай 200: sourceBuffer.appendBuffer (this.response); sourceBuffer.addEventListener ('updateend', function ()) 404: хвърли 'File Not Found'; default: хвърли 'Неуспешно извличане на файла'; catch (e) console.error (e);; xhr.send ();) ; 

    Стъпка 8. Орязване на медийния файл

    Най- SourceBuffer обектът има две свойства Наречен appendWindowStart и appendWindowEnd представляващ началното и крайното време на медийните данни искате да филтрирате. Осветеният код по-долу филтрира първите четири секунди на MP3.

     mediaSource.addEventListener ('sourceopen', функция () var sourceBuffer = this.addSourceBuffer (mime); sourceBuffer.appendWindowEnd = 4.0;…); 

    Демонстрация

    И това е всичко, нашето аудио извадка се излъчва от уеб страницата. За програмен код, погледнете нашата Github repo и за крайния резултат проверете демо страница.

    Поддръжка на браузър

    Що се отнася до написването на този пост, MediaSource API се поддържа официално във всички основни браузъри. Но тестването показва, че изпълнението е бавно в Firefox, и Webkit браузърите все още имат проблеми с appendWindowStart Имот.

    Както API на MediaSource е все още в експериментална фаза, достъпът до по-високи функции за редактиране може да бъде ограничен, но основно поточно предаване функция е нещо, което можете използвайте веднага.