Startseite » Codierung » So streamen Sie abgeschnittenes Audio mit der MediaSource-API

    So streamen Sie abgeschnittenes Audio mit der MediaSource-API

    Mit dem MediaSource-API, Sie können Medienströme generieren und konfigurieren direkt im Browser Es erlaubt dir zu eine Vielzahl von Operationen mit Mediendaten durchführen wird von medienbezogenen HTML-Tags wie z oder . Zum Beispiel können Sie verschiedene Streams mischen, Überlappende Medien erstellen, faule Lademedien, und Medienkennzahlen bearbeiten Ändern Sie beispielsweise die Lautstärke oder die Frequenz.

    In diesem Beitrag werden wir genau sehen, wie es geht Stream ein Audio-Sample (eine abgeschnittene MP3-Datei) mit der MediaSource-API rechts im Browser um Musik vor der Show zu deinem Publikum Wir werden darüber berichten, wie Unterstützung für die API erkennen, wie man Verbinden Sie das HTML-Medienelement zur API, wie Holen Sie sich die Medien über Ajax und schließlich wie streamen.

    Wenn Sie im Voraus sehen wollen, was wir vorhaben, schauen Sie sich das an Quellcode auf Github, oder check das aus Demo-Seite.

    Schritt 1. Erstellen Sie den HTML-Code

    Um den HTML-Code zu erstellen, fügen Sie ein ein tag mit einem Kontrollen Attribut zu Ihrer Seite. Aus Gründen der Rückwärtskompatibilität Fügen Sie eine Standardfehlermeldung hinzu für Benutzer, deren Browser die Funktion nicht unterstützen. Wir verwenden JavaScript, um diese Nachricht zu aktivieren / deaktivieren.

      

    Schritt 2. Browserunterstützung erkennen

    Erstellen Sie in JavaScript eine versuche es… zu fangen Blockieren Sie diesen Willen einen Fehler werfen wenn die Die MediaSource-API wird nicht unterstützt durch den Browser des Benutzers oder mit anderen Worten if MediaSource (der Schlüssel) ist nicht vorhanden in dem Fenster Objekt.

     try if (! 'MediaSource' in window) werfen neuen ReferenceError aus ('Es gibt keine MediaSource-Eigenschaft im Fensterobjekt.') catch (e) console.log (e);  

    Schritt 3. Ermitteln Sie die MIME-Unterstützung

    Überprüfen Sie nach der Supportüberprüfung auch die Unterstützung des MIME-Typs. Wenn der MIME-Typ des Mediums, das Sie streamen möchten, vom Browser nicht unterstützt wird, den Benutzer benachrichtigen und einen Fehler werfen.

    var mime = 'audio / mpeg'; if (! MediaSource.isTypeSupported (mime)) alert ('Das Medium kann nicht abgespielt werden. Das Medium vom MIME-Typ' + mime + 'wird nicht unterstützt.'); throw ('Medien des Typs' + mime + 'werden nicht unterstützt.');  

    Beachten Sie, dass das obige Code-Snippet sein muss im Inneren platziert Versuchen Block, Vor dem Fang Block (als Referenz, folgen Sie der Zeilennummerierung oder checken Sie die endgültige JS-Datei auf Github aus).

    Schritt 4. Verknüpfen Sie die Tag für die MediaSource-API

    Erstelle eine neue MediaSource Objekt und Weisen Sie es als Quelle der Etikett mit der URL.createObjectURL () Methode.

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

    Schritt 5. Fügen Sie ein SourceBuffer Gegenstand zu MediaSource

    Wenn ein HTML-Medienelement greift auf eine Medienquelle zu und ist bereit zu erstellen SourceBuffer Objekte, die MediaSource-API feuert ein sourceopen Veranstaltung .

    Das SourceBuffer Objekt hält ein Stück Medien das wird schließlich entschlüsselt, verarbeitet und abgespielt. Ein einzelnes MediaSource Objekt kann mehrere haben SourceBuffer Objekte.

    In der Eventhandler der sourceopen Veranstaltung, füge hinzu ein SourceBuffer Gegenstand zu MediaSource mit dem addSourceBuffer () Methode.

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

    Schritt 6. Holen Sie das Medium

    Jetzt hast du eine SourceBuffer Objekt, es ist Zeit zu Holen Sie sich die MP3-Datei. In unserem Beispiel machen wir das mit einer AJAX-Anfrage.

    Benutzen Arraypuffer wie responseType, welche bezeichnet binäre Daten. Wenn die Antwort erfolgreich abgerufen wurde, hänge es an SourceBuffer mit dem appendBuffer () Methode.

     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); break; case 404: throw 'Datei nicht gefunden'; default: throw 'Fehler beim Abrufen der file '; catch (e) console.error (e);; xhr.send ();); 

    Schritt 7. Geben Sie das Ende des Streams an

    Wenn das API die Daten an angehängt hat SourceBuffer ein Ereignis aufgerufen updatend wird gefeuert. Rufen Sie in einem Event-Handler die Ende der Übertragung() Methode von MediaSource zu zeigt an, dass der Stream beendet ist.

     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; Fall 404: "Datei nicht gefunden" werfen; Standard: "Die Datei konnte nicht abgerufen werden"; catch (e) console.error (e);; xhr.send ();) ; 

    Schritt 8. Schneiden Sie die Mediendatei ab

    Das SourceBuffer Objekt hat zwei Eigenschaften namens appendWindowStart und appendWindowEnd vertritt die Start- und Endzeit der Mediendaten Sie möchten filtern. Der hervorgehobene Code unten filtert die ersten vier Sekunden von der MP3.

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

    Demo

    Und das ist alles unser Audio-Sample wird gestreamt direkt von der Webseite. Für die Quellcode, schau dir unsere an Github Repo und für das Endergebnis, überprüfen Sie die Demo-Seite.

    Browser-Unterstützung

    Zum Zeitpunkt des Schreibens dieses Beitrags MediaSource Die API wird in allen gängigen Browsern offiziell unterstützt. Aber der Test zeigt, dass die Die Implementierung ist in Firefox fehlerhaft, und Webkit-Browser haben immer noch Probleme mit der appendWindowStart Eigentum.

    Wie die MediaSource-API ist noch in der experimentellen Phase, Der Zugriff auf höhere Bearbeitungsfunktionen kann jedoch eingeschränkt sein grundlegendes Streaming Feature ist etwas, das Sie können nutzen Sie sofort aus.