RoarAudio/Vorlage Vortrag (1h): Unterschied zwischen den Versionen

Aus UUGRN
K (weitres streichen...)
K (Zeiten korregirt)
Zeile 14: Zeile 14:
 
== Vortrag ==
 
== Vortrag ==
 
=== Was ist RoarAudio? ===
 
=== Was ist RoarAudio? ===
 +
{{Vortrags Zeit|5}}
 +
 
RoarAudio ist ein Soundserver.
 
RoarAudio ist ein Soundserver.
  
Zeile 50: Zeile 52:
  
 
==== Codecs ====
 
==== Codecs ====
 +
{{Vortrags Zeit|4}}
 +
 
RoarAudio zeichnet sich dadurch aus daß er zusätzlich zu PCM Rohdaten auch höher Codecs versteht. Dies hat mehre Vorteile:
 
RoarAudio zeichnet sich dadurch aus daß er zusätzlich zu PCM Rohdaten auch höher Codecs versteht. Dies hat mehre Vorteile:
  
Zeile 57: Zeile 61:
  
 
==== Netzwerk-Transparenz ====
 
==== Netzwerk-Transparenz ====
 +
{{Vortrags Zeit|2}}
 +
 
RoarAudio ist Netzwerks-transparent, das heißt das Applikationen keinen Unterschied sehen zwischen Verbindungen mit einer lokalen Instanz oder einer auf einem anderen Rechner.
 
RoarAudio ist Netzwerks-transparent, das heißt das Applikationen keinen Unterschied sehen zwischen Verbindungen mit einer lokalen Instanz oder einer auf einem anderen Rechner.
  
Zeile 62: Zeile 68:
  
 
==== Meta Daten ====
 
==== Meta Daten ====
RoarAudio hat die Fähigkeit auf per Stream Basis Meta Daten ab zu legen. Die Mechanismen sind denen von Vorbis Comments nachempfunden und können prinzipiell mehr. Einiges davon ist allerdings noch nicht vollständig implementiert.
+
{{Vortrags Zeit|2}}
 +
 
 +
RoarAudio hat diev Fähigkeit auf per Stream Basis Meta Daten ab zu legen. Die Mechanismen sind denen von Vorbis Comments nachempfunden und können prinzipiell mehr. Einiges davon ist allerdings noch nicht vollständig implementiert.
  
 
Es besteht neben dem manuellen Setzen die Möglichkeit daß ein Player sie setzt und das ''roard'' sie selbstständig setzt. Im letzteren Falle werden diese von verschiedenen anderen Streams zusammen gesetzt. Dies kann nützlich sein um automatisch beim Streaming die Metadaten von einem Player zu übernehmen um die Titel-Informationen weiter zu führen. Manuelles setzen mag als Beispiel interessant sein um den Sendernamen zu setzen.
 
Es besteht neben dem manuellen Setzen die Möglichkeit daß ein Player sie setzt und das ''roard'' sie selbstständig setzt. Im letzteren Falle werden diese von verschiedenen anderen Streams zusammen gesetzt. Dies kann nützlich sein um automatisch beim Streaming die Metadaten von einem Player zu übernehmen um die Titel-Informationen weiter zu führen. Manuelles setzen mag als Beispiel interessant sein um den Sendernamen zu setzen.
  
 
==== Kompatibilitäts Bibliotheken ====
 
==== Kompatibilitäts Bibliotheken ====
 +
{{Vortrags Zeit|4}}
 +
 
''Viele Programme haben keine Unterstützung für RoarAudio, was nun?''
 
''Viele Programme haben keine Unterstützung für RoarAudio, was nun?''
  
Zeile 78: Zeile 88:
  
 
===== Welche Schnittstelle für was? =====
 
===== Welche Schnittstelle für was? =====
 +
{{Vortrags Zeit|3}}
 +
 
{| class="wikitable"
 
{| class="wikitable"
 
  ! Interface
 
  ! Interface
Zeile 106: Zeile 118:
  
 
=== Konzepte und Architektur ===
 
=== Konzepte und Architektur ===
 +
{{Vortrags Zeit|1}}
 +
 
RoarAudio ist zwar in C geschrieben aber größtenteils Objekt-orientiert. Er umfasst im Moment etwa 37 tausend Zeilen C. (EsounD kommt auf rund 15 tausend, PulseAudio 74 tausend und aRts auf 130 tausend).
 
RoarAudio ist zwar in C geschrieben aber größtenteils Objekt-orientiert. Er umfasst im Moment etwa 37 tausend Zeilen C. (EsounD kommt auf rund 15 tausend, PulseAudio 74 tausend und aRts auf 130 tausend).
  
 
==== Clients und Streams ====
 
==== Clients und Streams ====
 +
{{Vortrags Zeit|5}}
  
 
Vor allem wichtig und nach Außen hin sichtbar sind die Client und Stream Objekte.
 
Vor allem wichtig und nach Außen hin sichtbar sind die Client und Stream Objekte.
Zeile 118: Zeile 133:
  
 
==== Driver ====
 
==== Driver ====
 +
{{Vortrags Zeit|2}}
 +
 
Ein Driver ist ein Objekt das eine Schnittstelle zur Verfügung stellt um externe Ressourcen anzusprechen, die sich nicht der UNIX IO Philosophie entsprechend verhalten (Erweiterte Handshake zum Beispiel). Dies können Soundcards oder auch Streaming Server sein. Hierzu zählen als Beispiel der OSS (Open Sound System) und der libshout (Icecast) Treiber.
 
Ein Driver ist ein Objekt das eine Schnittstelle zur Verfügung stellt um externe Ressourcen anzusprechen, die sich nicht der UNIX IO Philosophie entsprechend verhalten (Erweiterte Handshake zum Beispiel). Dies können Soundcards oder auch Streaming Server sein. Hierzu zählen als Beispiel der OSS (Open Sound System) und der libshout (Icecast) Treiber.
  
 
==== Codecfilter ====
 
==== Codecfilter ====
 +
{{Vortrags Zeit|2}}
 +
 
Bei den Codecfiltern handelt es sich um ein Abstraktions Layer welches roard die Möglichkeit gibt höhere Codecs zu sprechen wie etwa Ogg Vorbis. Einige Codecfilter können nur Lesen andere auch Schreiben. Wird ein Stream mit einem unterstützen Codec aufgebaut so wird automatisch eine Instanz eines passenden Codecfilters erzeugt. Sie verhalten sich somit weitgehend transparent.
 
Bei den Codecfiltern handelt es sich um ein Abstraktions Layer welches roard die Möglichkeit gibt höhere Codecs zu sprechen wie etwa Ogg Vorbis. Einige Codecfilter können nur Lesen andere auch Schreiben. Wird ein Stream mit einem unterstützen Codec aufgebaut so wird automatisch eine Instanz eines passenden Codecfilters erzeugt. Sie verhalten sich somit weitgehend transparent.
  
Zeile 145: Zeile 164:
  
 
=== Querverweise ===
 
=== Querverweise ===
 +
{{Vortrags Zeit|5}}
 +
 
; [http://raum.keep-cool.org/ RAUM Media Container]
 
; [http://raum.keep-cool.org/ RAUM Media Container]
 
: Für RoarAudio entwickelter Container, vor allem für Speex und CELT.
 
: Für RoarAudio entwickelter Container, vor allem für Speex und CELT.

Version vom 29. April 2009, 19:55 Uhr

Was ist RoarAudio?
Ziel
ein Vortrag über RoarAudio und die Realtime Audio mixing Problematik vor einem Unixpublikum mit keinen oder kaum Vorwissen zum Thema.
RoarAudio Logo

Der Autor

Philipp ph3-der-loewe Schafft, Software Entwickler und Projekt Urheber.

Abstrakt

RoarAudio ist ein Sound-Server für POSIX konformen Betriebssysteme (GNU/Linux, *BSD, Mac OS X und andere) unter aktiver Entwicklung. Er bietet gegenüber anderen Sound-Servern zusätzliche Funktionen für den Betrieb in kleinen Radio und TV Studios, aber auch den Heimgebrauch. Dieser Vortrag soll einen Einblick in RoarAudio, seine Funktionalität und Funktionsweise sowie damit verbunden Problemstellungen auf einfachem Niveau bieten. Den Abschluss bildet eine Demonstration.

Vortrag

Was ist RoarAudio?

(Geplante Zeit: 5 Minuten)


RoarAudio ist ein Soundserver.

Was ist ein Soundserver

Ein Soundserver ist eine Programm dass im Hintergrund Audio Daten mischt und das Ergebnis weiter leitet, meist an eine Soundcard.

Soundserver werden benötigt wenn wenn das unterliegende Audio-Ausgabegerät nur einen einzigen Datenstrom zu einer Zeit verarbeiten kann (Single Stream Soundcards). Sie stellen eine Art virtuelle Soundcard dar zu der Programme wie Player ihre Daten schicken können um eine simultane Ausgabe mit zum Beispiel Notify-Sounds von Chat Clients oder ähnlichem zu ermöglichen.

Sie bieten meist weitere Funktionen wie das Mischen unter Berücksichtigung von verschiedenen Pegeln. Einige Soundserver ermöglichen auch die Benutzung von Netzwerken zur Übertragung von Audio Daten für die Wiedergabe auf einer anderen Maschine. Dies beides kann auch RoarAudio.

Projekt Ziele

(Geplante Zeit: 10 Minuten)


Das Projekt verfolgt im Prinzip das Ziel, eine leistungsfähige Mischsoftware für den Studio Betrieb zur Verfügung zu stellen, aber dennoch ein Produkt zu liefern das auch für den Heim-Anwender angemessen ist.

für Heim-Anwender

Heim-Anwender Teilen sich in zwei Gruppen auf: Die größere Menge interessiert es nicht wieso Musik aus den Lautsprechern kommt, Hauptsache sie tut es. Für diese Gruppe muss RoarAudio einfach out of the box funktionieren. Die andere Gruppe sind Anwender die mehr machen wollen. Hier soll RoarAudio ein leistungsstarkes Backend sein das möglichst Ressourcen schonend alle gewünschten Funktionen anbietet.

Im Studio Betrieb

Wie oben schon angedeutet ist RoarAudio aber im Studio-Einsatz wesentlich interessanter: in einem klassischen Studio steht meist ein großes analoges Mischpult. Dies ist eine wundervolle Sache solange man primär analoge Eingänge braucht: beispielsweise von einer Band. In heutigen Radio- und Fernsehstudios kommen aber die meisten Kanäle aus dem Rechner oder anderen digitalen Geräten wie CD Spielern.

Ein analoges Mischen hat hier nun mehre Nachteile, die wichtigsten sind wohl:

  • Analoges Rauschen
  • Verzerrungen im Frequenzgang
  • Klirren
  • (Quantisierungsrauchen (DAC->ADC))

Eine Alternative wäre in einigen Fällen sicherlich ein Digital-Mischpult. Diese sind aber meist sehr teuer.

RoarAudio kommt hier als erst einmal reine Software-basierende Lösung. Natürlich ist es möglich über die Steuerschnittstellen auch externe Hardware anzuschließen. Hier gibt es auch Planungen, ein Hardware Frontend zu entwerfen das dann kostengünstig zu haben ist.

Was hebt RoarAudio hervor?

Hier Sollen einige der besonderen Fähigkeiten von RoarAudio erläutert werden.

Codecs

(Geplante Zeit: 4 Minuten)


RoarAudio zeichnet sich dadurch aus daß er zusätzlich zu PCM Rohdaten auch höher Codecs versteht. Dies hat mehre Vorteile:

  • Der Server kann Streams in höheren Codecs selbstständig verarbeiten. Dies ist zum Beispiel wichtig um Webradio als Background Stream abzuspielen.
  • Es ist dem Server möglich direkt Streaming-Server wie icecast zu bedienen. Es ist keine weitere lange pipe nötig um Webradio zu senden. Dies verringert die Störanfälligkeit erheblich und verringert die Latenz, da pipe-Puffer entfallen.
  • Auch ist es nur mit stark komprimierenden Codecs möglich über die dem Heim-Anwender zur Verfügung stehenden Schmalband-Anschlüsse Audio entweder von Client zu Server oder zwischen zwei Servern auszutauschen. Auch eine Kopplung über ISDN Kanäle ist so möglich.

Netzwerk-Transparenz

(Geplante Zeit: 2 Minuten)


RoarAudio ist Netzwerks-transparent, das heißt das Applikationen keinen Unterschied sehen zwischen Verbindungen mit einer lokalen Instanz oder einer auf einem anderen Rechner.

Zu diesem Zweck werden mehre Protokolle unterstützt: UNIX Domain Sockets für lokale Verbindungen sowie TCP/IP und DECnet für Verbindungen mit entfernten Rechnern. Auch existiert Support für verschiedene Proxy Typen.

Meta Daten

(Geplante Zeit: 2 Minuten)


RoarAudio hat diev Fähigkeit auf per Stream Basis Meta Daten ab zu legen. Die Mechanismen sind denen von Vorbis Comments nachempfunden und können prinzipiell mehr. Einiges davon ist allerdings noch nicht vollständig implementiert.

Es besteht neben dem manuellen Setzen die Möglichkeit daß ein Player sie setzt und das roard sie selbstständig setzt. Im letzteren Falle werden diese von verschiedenen anderen Streams zusammen gesetzt. Dies kann nützlich sein um automatisch beim Streaming die Metadaten von einem Player zu übernehmen um die Titel-Informationen weiter zu führen. Manuelles setzen mag als Beispiel interessant sein um den Sendernamen zu setzen.

Kompatibilitäts Bibliotheken

(Geplante Zeit: 4 Minuten)


Viele Programme haben keine Unterstützung für RoarAudio, was nun?

Um dieses Problem zu lösen gibt es diverse Kompatibilitäts-Bibliotheken. Diese stellen Bibliotheken dar welche binär-kompatibel andere Audio Systeme emulieren. Dazu müssen sie schlichtweg einfach anstelle der Bibliothek des entsprechen Systems installiert werden und leiten dann alle Anfragen an RoarAudio weiter. Dies geschieht natürlich nur im Rahmen des Funktionsumfang der entsprechenden Bibliothek.

Die mit Abstand wohl wichtigste ist libroaresd, welche das EsounD Interface emuliert. das EsounD Interface wird von den allermeisten Applikationen unterstützt da es das wohl älteste Soundserver Interface ist. Es existiert seit 1998.

Weitere Kompatibilitäts Bibliotheken gibt es für das YIFF Sound System, KDEs aRtsc und PulseAudio. Zusammen mit den existierenden Plugins deckt dies nahezu den vollständigen Player Markt fuer GNU/Linux und BSD ab.

Welche Schnittstelle für was?

(Geplante Zeit: 3 Minuten)


Interface Beispiel Applikationen
libroar roaraudio-tools, XMMS, mplayer, (xine)
EsounD GNOME, KDE, XMMS, xine, Amarok, wine,... (177 weitere unter Debian Stable)
libao vorbis-tools, FLAC tools, mpd, mpg321, gnomoradio, somaplayer
aRts(c) (KDE) Player mit aRts support: mplayer, xine; kwave, kaudiocreator,...
PulseAudio Ein paar Programme, die meisten über Plugins. (nicht viel unter Debian Stable)
YIFF y-tools
gstreamer GNOME, Alle GNOME Player. Dieverse andere.

Konzepte und Architektur

(Geplante Zeit: 1 Minuten)


RoarAudio ist zwar in C geschrieben aber größtenteils Objekt-orientiert. Er umfasst im Moment etwa 37 tausend Zeilen C. (EsounD kommt auf rund 15 tausend, PulseAudio 74 tausend und aRts auf 130 tausend).

Clients und Streams

(Geplante Zeit: 5 Minuten)


Vor allem wichtig und nach Außen hin sichtbar sind die Client und Stream Objekte. Ein Client Objekt verkörpert einen (Netzwerk) Client, zum Beispiel einen Player oder ein Steuerprogramm wie roarctl. Es kann auch Stream Objekte assoziiert haben (Beispielsweise im Falle von Abspielen von Musik).

Ein Stream Objekt stellt einen eigentlichen Audio Datenstrom dar. Dieses Objekt beinhaltet diverse Informationen über den Datenstrom: Informationen wie der roard ihn auslesen kann, Sample Rate/Bits/Channels, Meta Daten und vieles mehr. Ein Stream gehört immer zu einem Client, wobei der Client auch der roard selbst sein kann. Er lässt sich durch attachen wechseln. Dies kommt zum Einsatz um Hintergrund-Streams zu ermöglichen.

Bei jedem Audio Datenstrom der in den roard hinein oder heraus fließt handelt es sich um einen Stream. Dies schließt Datenströme zu Geräten wie Soundcards mit ein. Hierdurch ist eine maximale Flexibilität gegeben.

Driver

(Geplante Zeit: 2 Minuten)


Ein Driver ist ein Objekt das eine Schnittstelle zur Verfügung stellt um externe Ressourcen anzusprechen, die sich nicht der UNIX IO Philosophie entsprechend verhalten (Erweiterte Handshake zum Beispiel). Dies können Soundcards oder auch Streaming Server sein. Hierzu zählen als Beispiel der OSS (Open Sound System) und der libshout (Icecast) Treiber.

Codecfilter

(Geplante Zeit: 2 Minuten)


Bei den Codecfiltern handelt es sich um ein Abstraktions Layer welches roard die Möglichkeit gibt höhere Codecs zu sprechen wie etwa Ogg Vorbis. Einige Codecfilter können nur Lesen andere auch Schreiben. Wird ein Stream mit einem unterstützen Codec aufgebaut so wird automatisch eine Instanz eines passenden Codecfilters erzeugt. Sie verhalten sich somit weitgehend transparent.


Sonstiges

(Geplante Zeit: 0 Minuten)


Win32 Port

Ein Win32 Port existiert zum jetzigen Zeitpunkt nicht. Dies liegt an mehren Faktoren: Zum einen ist Win32, was den nahe-realtime Betrieb angeht, nicht zuverlässig genug. Zum anderen ist bei Win32 das Networking kein Teil des Kernels wie auf UNIX und POSIX Systemen: Es ist viel mehr teilweise im Userland. Dies hat zur Folge das zu jedem Zeitpunkt eine Applikation wissen muss von welchem Type ein Filehandle ist, da man Basis Funktionen wie read(), write(), close() nicht auf alle Filehandles anwenden kann. Vielmehr hat jeder Type von Filehandles seinen eigenen Satz Funtionen. RoarAudio verfolgt die UNIX Philosophie: Alles ist eine Datei. Große Patches wären nötig.

Ein Weiteres ist das ein solcher Port viel Zeit in Anspruch nimmt und weder das Projekt noch die Freie Software Bewegung voranbringt.

Im Moment existieren kleinere Patches die vielleicht irgendwann mal Basis Funktionalität mit sich bringen könnten. An ein roard für Win32 ist in absehbarer Zeit nicht zu denken.

Allerdings laufen Teile von RoarAudio in Cygwin mehr oder minder gut. Viele Probleme treten hier auf aber es ist prinzipiell möglich es unter Cygwin zum Laufen zu bringen (außerhalb des nahe-realtime Betriebs).

Es besteht aber die Möglichkeit einige Win32 Applikationen mittels pseudo Web Radio Streams anzubinden.

MP3

  • Kein Streaming
  • Keine Meta Daten
  • Schlechte Qualität
  • Patente

Querverweise

(Geplante Zeit: 5 Minuten)


RAUM Media Container
Für RoarAudio entwickelter Container, vor allem für Speex und CELT.
Icecast - Multimedia streaming server
Software für Webradio und WebTV streaming.
Xiph.Org Foundation
Organisation zur Entwicklung von freien Codecs.
SIP
Standard für VoIP - Internet-Telephonie.

Vorführung

(Geplante Zeit: 15 Minuten)


  • Allgemeiner Betrieb
    • roard
    • roarvorbis/roarcatplay?
    • roarctl
    • xmms
  • Kompatibilitäts Bibliotheken
    • libroaresd:
      • Amarok

Fragen

  • immer gerne