Start · Sprachen · PHP · Referenz · ogg://

ogg://

Funktion

Stream-Wrapper für Ogg/Vorbis-Audiodateien, der das Lesen und Schreiben von Audio-Streams im Ogg-Format ermöglicht.

Kategorie: misc

Signatur

ogg://

Beschreibung

Der ogg://-Stream-Wrapper ist Teil der PECL-Erweiterung oggvorbis und ermöglicht das transparente Lesen und Schreiben von Audiodaten im Ogg/Vorbis-Format direkt über PHPs Stream-Funktionen. Er abstrahiert die Ogg-Dateioperationen so, dass Standard-PHP-Funktionen wie fopen(), fread(), fwrite() und fclose() genutzt werden können.

Um den Wrapper zu nutzen, wird eine Ogg-Datei mit dem Präfix ogg:// gefolgt vom Dateipfad geöffnet, z. B. ogg:///pfad/zur/datei.ogg. Beim Schreiben können Metadaten wie Bitraten und Kommentare über Stream-Kontexte gesteuert werden. Beim Lesen werden die komprimierten Audiodaten dekomprimiert und als PCM-Rohdaten bereitgestellt.

Dieser Wrapper ist vor allem in Anwendungen nützlich, die Audioverarbeitung serverseitig durchführen, etwa bei der Konvertierung, Analyse oder dem Streaming von Audioinhalten. Er erfordert die Installation der PECL-Erweiterung oggvorbis sowie die Systembibliothek libvorbis.

Da es sich um eine PECL-Erweiterung handelt, ist ogg:// nicht in der PHP-Standardinstallation enthalten und muss separat installiert und in der php.ini aktiviert werden.

Parameter

Name Typ Default Beschreibung
$path Pflicht string Der Dateipfad zur Ogg-Datei, angegeben als ogg:///absoluter/pfad/datei.ogg oder ogg://relativer/pfad/datei.ogg.
$mode Pflicht string Der Öffnungsmodus, analog zu fopen(): 'r' zum Lesen (Dekodierung), 'w' zum Schreiben (Enkodierung).
$context resource Ein optionaler Stream-Kontext (erstellt mit stream_context_create()), über den Enkodierungsparameter wie bitrate, rate, channels und comments übergeben werden können.

Rückgabewert

Typ
resource|false
Beschreibung
Bei Erfolg wird eine Stream-Ressource zurückgegeben, die mit Standard-PHP-Stream-Funktionen verwendet werden kann. Bei einem Fehler (z. B. Datei nicht gefunden, fehlende Erweiterung) wird false zurückgegeben.

Beispiele

Ogg-Datei lesen und PCM-Daten ausgeben

<?php
// Voraussetzung: PECL-Erweiterung 'oggvorbis' ist installiert

$stream = fopen('ogg:///var/audio/musik.ogg', 'r');
if ($stream === false) {
    die('Konnte die Ogg-Datei nicht öffnen.');
}

// PCM-Rohdaten einlesen
$pcmDaten = '';
while (!feof($stream)) {
    $pcmDaten .= fread($stream, 8192);
}
fclose($stream);

echo 'Gelesene PCM-Bytes: ' . strlen($pcmDaten) . PHP_EOL;
Gelesene PCM-Bytes: 4423680

Ogg-Datei schreiben mit Stream-Kontext

<?php
// Voraussetzung: PECL-Erweiterung 'oggvorbis' ist installiert

// Stream-Kontext mit Enkodierungsparametern
$kontext = stream_context_create([
    'ogg' => [
        'bitrate'  => 128000,   // 128 kbps
        'rate'     => 44100,    // 44,1 kHz
        'channels' => 2,        // Stereo
        'comments' => [
            'ARTIST' => 'Max Mustermann',
            'TITLE'  => 'Beispielsong',
        ],
    ],
]);

$stream = fopen('ogg:///var/audio/ausgabe.ogg', 'w', false, $kontext);
if ($stream === false) {
    die('Konnte die Ausgabedatei nicht öffnen.');
}

// Beispiel: PCM-Daten aus einer Quelle schreiben
// $pcmDaten = ... (z. B. aus einem anderen Stream oder Generator)
$pcmDaten = str_repeat("\x00", 44100 * 2 * 2); // 1 Sekunde Stille, 16-Bit Stereo
fwrite($stream, $pcmDaten);
fclose($stream);

echo 'Ogg-Datei erfolgreich geschrieben.' . PHP_EOL;
Ogg-Datei erfolgreich geschrieben.

// Wichtig · Fallstricke

Installation: Der ogg://-Wrapper ist nicht Teil des PHP-Kerns. Er erfordert die PECL-Erweiterung oggvorbis (pecl install oggvorbis) sowie die Systembibliothek libvorbis (z. B. apt install libvorbis-dev). Ohne diese Erweiterung löst der Versuch, ogg:// zu verwenden, einen Fehler aus.

Entwicklungsstand: Die PECL-Erweiterung oggvorbis gilt als experimentell und wird nicht aktiv gepflegt. Sie sollte in Produktionsumgebungen mit Vorsicht eingesetzt werden. Für robustere Lösungen empfiehlt sich der Einsatz externer Tools wie FFmpeg über exec() oder proc_open().

Sicherheit: Beim Öffnen von Ogg-Dateien über benutzerdefinierte Pfade unbedingt Eingaben validieren, um Path-Traversal-Angriffe zu verhindern. Niemals ungefilterte Benutzereingaben direkt in den Pfad einbauen.