Start · Sprachen · JavaScript · Referenz · PresentationConnection.binaryType

PresentationConnection.binaryType

Eigenschaft

Legt fest, in welcher Form Binärdaten im <code>message</code>-Event einer <code>PresentationConnection</code> ankommen: als <code>"arraybuffer"</code> (Standard) oder <code>"blob"</code>.

seit JavaScript Experimentell: nur Chromium-basierte Browser (Pres Kategorie: webapi

Signatur

PresentationConnection.binaryType

Beschreibung

Die Eigenschaft binaryType einer PresentationConnection bestimmt, wie empfangene Binärnachrichten an den Handler des message-Events übergeben werden. Mögliche Werte sind "arraybuffer" und "blob". Eine neu erstellte Verbindung hat immer den Wert "arraybuffer".

Die Presentation API verbindet eine steuernde Seite (Controller) mit einer Präsentation auf einem zweiten Bildschirm, etwa einem Chromecast oder einem externen Monitor. Beide Seiten tauschen Nachrichten über send() aus. Textnachrichten kommen immer als string an. Binärdaten wie Bilder, Audio-Schnipsel oder eigene Protokollpakete kommen je nach binaryType als ArrayBuffer oder als Blob an.

  • "arraybuffer" eignet sich, wenn du die Bytes sofort auswerten willst, zum Beispiel mit DataView oder einem Uint8Array.
  • "blob" eignet sich für größere Dateien, die du weiterreichen willst, etwa über URL.createObjectURL() an ein <img>-Element.

Die Eigenschaft funktioniert genauso wie WebSocket.binaryType und RTCDataChannel.binaryType. Setze sie am besten gleich nach dem Verbindungsaufbau und vor der ersten Nachricht.

Parameter

Name Typ Default Beschreibung
$value "arraybuffer" | "blob" "arraybuffer" Neuer Wert beim Setzen. Legt fest, welcher Typ in event.data bei Binärnachrichten steht.

Rückgabewert

Typ
string
Beschreibung
Der aktuelle Binärtyp: "arraybuffer" oder "blob".

Beispiele

Standardwert prüfen und auf Blob umstellen

const request = new PresentationRequest(['receiver.html']);

const startPresentation = async () => {
  const connection = await request.start();
  console.log(connection.binaryType); // Standardwert

  // Bilder als Blob empfangen
  connection.binaryType = 'blob';
  console.log(connection.binaryType);
};

document.querySelector('#cast').addEventListener('click', startPresentation);
arraybuffer blob

Binäres Protokoll mit ArrayBuffer auswerten

const request = new PresentationRequest(['receiver.html']);

const connect = async () => {
  const connection = await request.start();
  connection.binaryType = 'arraybuffer';

  connection.addEventListener('message', (event) => {
    if (typeof event.data === 'string') {
      console.log('Text:', event.data);
      return;
    }
    // Erstes Byte = Nachrichtentyp, danach 32-Bit-Wert
    const view = new DataView(event.data);
    const type = view.getUint8(0);
    const value = view.getUint32(1, true);
    console.log(`Typ ${type}, Wert ${value}`);
  });
};

connect();
Typ 1, Wert 42

Empfängerseite: Bilder als Blob anzeigen

// receiver.html – läuft auf dem Präsentationsbildschirm
const setupConnection = (connection) => {
  connection.binaryType = 'blob';
  connection.onmessage = (event) => {
    if (event.data instanceof Blob) {
      const img = document.querySelector('#slide');
      URL.revokeObjectURL(img.src);
      img.src = URL.createObjectURL(event.data);
    }
  };
};

navigator.presentation.receiver.connectionList.then((list) => {
  list.connections.forEach(setupConnection);
  list.addEventListener('connectionavailable', (e) => setupConnection(e.connection));
});

// Wichtig · Fallstricke

Kompatibilität: Die Presentation API ist experimentell. Sie funktioniert im Wesentlichen nur in Chromium-Browsern wie Chrome und Edge, und auch dort nur mit passender Hardware wie Cast-Geräten. Firefox und Safari unterstützen sie nicht. Prüfe deshalb vorher, ob die API vorhanden ist: 'PresentationRequest' in window. Außerdem ist die API nur in sicheren Kontexten (HTTPS) verfügbar.

  • Die Einstellung wirkt nur auf eingehende Nachrichten. Mit send() kannst du trotzdem jederzeit string, ArrayBuffer, ArrayBufferView oder Blob verschicken.
  • Textnachrichten kommen unabhängig von binaryType immer als string an. Prüfe im Handler daher den Typ von event.data.
  • Ungültige Werte werden laut Spezifikation stillschweigend ignoriert und lösen keinen Fehler aus.
  • Jede Verbindung hat ihren eigenen Wert. Controller und Empfänger müssen binaryType also jeweils selbst setzen.
  • Wenn du Daten als Blob empfängst und Objekt-URLs erzeugst, gib sie mit URL.revokeObjectURL() wieder frei. Sonst wächst der Speicherverbrauch.