Signatur
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
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;
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;
// 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.