Start · Sprachen · PHP · Referenz · openal_stream

openal_stream

Funktion

Streamt Audio-Daten an eine OpenAL-Quelle, um kontinuierliche Wiedergabe ohne vollständigen Puffer-Aufbau zu ermöglichen.

Kategorie: misc

Signatur

openal_stream(resource $source, resource $format, string $data): bool

Beschreibung

openal_stream ist Teil der PHP-OpenAL-Extension und ermöglicht das schrittweise Übertragen von Audio-Rohdaten an eine zuvor erzeugte OpenAL-Audioquelle. Im Gegensatz zum vollständigen Befüllen eines Puffers mit openal_buffer_data können mit dieser Funktion Audiodaten in kleinen Häppchen (Chunks) gestreamt werden – ideal für große Audiodateien oder Live-Audiodaten.

Die Funktion erwartet eine gültige OpenAL-Quelle (erzeugt mit openal_source_create), ein Format-Handle (erzeugt mit openal_stream selbst oder definiert durch openal_buffer_create-Workflow) sowie einen Binär-String mit den eigentlichen PCM-Audiodaten. Das Format legt Bittiefe, Kanalanzahl und Samplingrate fest.

Diese Funktion ist besonders nützlich bei der Implementierung von Streaming-Playern, bei denen Audiodaten aus einer Datei oder einem Netzwerk-Stream stückweise verarbeitet und abgespielt werden sollen, ohne den gesamten Inhalt vorher in den Speicher laden zu müssen.

Hinweis: Die OpenAL-Extension für PHP ist nicht standardmäßig in PHP enthalten und muss separat installiert werden (PECL-Paket openal). Die Verfügbarkeit dieser Funktion hängt stark von der Systemkonfiguration ab.

Parameter

Name Typ Default Beschreibung
$source Pflicht resource Eine gültige OpenAL-Quellen-Ressource, wie sie von openal_source_create zurückgegeben wird. Gibt an, an welche Audioquelle die Daten gestreamt werden sollen.
$format Pflicht resource Eine Ressource, die das Audio-Format beschreibt (z. B. Mono/Stereo, 8-Bit/16-Bit, Samplingrate). Wird typischerweise mit openal_stream im Initialisierungsschritt oder über Format-Konstanten festgelegt.
$data Pflicht string Ein binärer String mit den zu streamenden PCM-Audiodaten. Die Daten müssen dem angegebenen Format entsprechen.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Daten erfolgreich an die Quelle gestreamt wurden, oder false im Fehlerfall (z. B. ungültige Ressource oder inkompatibles Format).

Beispiele

Einfaches Audio-Streaming mit OpenAL

<?php
// OpenAL-Gerät öffnen
$device = openal_device_open();
$context = openal_context_create($device);
openal_context_current($context);

// Quelle und Puffer erstellen
$source = openal_source_create();

// PCM-Audiodaten (16-Bit Mono, 44100 Hz) aus Datei lesen
$pcmData = file_get_contents('audio_chunk.raw');

// Puffer erstellen und mit Daten befüllen
$buffer = openal_buffer_create();
openal_buffer_data($buffer, AL_FORMAT_MONO16, $pcmData, 44100);

// Puffer an Quelle binden und Wiedergabe starten
openal_source_set($source, AL_BUFFER, $buffer);
openal_source_play($source);

// Warten bis Wiedergabe beendet
while (openal_source_get($source, AL_SOURCE_STATE) == AL_PLAYING) {
    usleep(10000);
}

// Aufräumen
openal_source_destroy($source);
openal_buffer_destroy($buffer);
openal_context_destroy($context);
openal_device_close($device);

echo "Wiedergabe abgeschlossen.\n";
?>
Wiedergabe abgeschlossen.

Chunk-weises Streaming von Audio-Daten

<?php
$device = openal_device_open();
$context = openal_context_create($device);
openal_context_current($context);

$source = openal_source_create();

$file = fopen('grosse_audiodatei.raw', 'rb');
$chunkSize = 4096; // 4 KB pro Chunk

while (!feof($file)) {
    $chunk = fread($file, $chunkSize);
    if ($chunk === false || strlen($chunk) === 0) {
        break;
    }

    // Chunk streamen
    $result = openal_stream($source, AL_FORMAT_MONO16, $chunk);
    if (!$result) {
        echo "Fehler beim Streamen eines Chunks.\n";
        break;
    }

    // Kurze Pause, damit OpenAL die Daten verarbeiten kann
    usleep(5000);
}

fclose($file);

openal_source_destroy($source);
openal_context_destroy($context);
openal_device_close($device);

echo "Streaming abgeschlossen.\n";
?>
Streaming abgeschlossen.

// Wichtig · Fallstricke

Verfügbarkeit: Die OpenAL-Extension ist kein Bestandteil der PHP-Standardinstallation. Sie muss über PECL (pecl install openal) installiert und in der php.ini aktiviert werden. Die Extension wird nur auf bestimmten Betriebssystemen unterstützt und ist unter Windows nur eingeschränkt verfügbar.

Ressourcen-Verwaltung: Alle erzeugten OpenAL-Ressourcen (Gerät, Kontext, Quellen, Puffer) müssen nach der Verwendung explizit freigegeben werden, um Speicherlecks zu vermeiden. Vergessene Ressourcen können zu instabilem Verhalten führen.

Format-Konsistenz: Die gestreamt übergebenen Daten müssen exakt dem angegebenen Format entsprechen. Falsche Bittiefe, Kanalanzahl oder Samplingrate führen zu verzerrter oder nicht abspielbarer Ausgabe.