RoarAudio/Programmieren/Stream
Hier soll kurz anhand der dazu nötigen Funktionen beschrieben werden wie ein Klient Streams generell Manage gen kann.
Arbeiten mit Stream Objekten[Bearbeiten]
int roar_stream_new_empty(struct roar_stream * s); int roar_stream_new_by_id(struct roar_stream * s, int id); int roar_stream_new (struct roar_stream * s, unsigned int rate, unsigned int channels, unsigned int bits, unsigned int codec);
Diese Funktionen erzeugen ein Stream Objekt anhand der ihnen zur Verfügung gestellten Daten. roar_stream_new_by_id() ist vor allem zu verwenden um aus einer vorliegenden Stream ID ein Stream Objekt zu generieren um es für spätere API Call zus verwenden.
int roar_stream_set_rel_id(struct roar_stream * s, int id); int roar_stream_get_rel_id(struct roar_stream * s);
Diese Funktionen dienen dazu die so genannte relative stream position ID zu setzen oder zu lesen.
int roar_stream_set_id (struct roar_stream * s, int id); int roar_stream_get_id (struct roar_stream * s);
Diese Funktionen sind dazu da die Stream ID des Objektes fest zu legen oder aus zu lesen.
int roar_stream_set_dir (struct roar_stream * s, int dir); int roar_stream_get_dir (struct roar_stream * s);
Mittels dieser Funktionen kann die stream direction (dir) für das Stream Objekt manipuliert oder ausgelesen werden.
Hinweis: Diese Funktionen manipulieren lediglich das lokale Objekt und kommunizieren nicht mit dem Server.
Daten über Stream mit Server austauschen[Bearbeiten]
roar_list_streams(c,i,m) /* macro */
Dieses Macro dient dazu aus zu lesen wie viele und welche Streams aktuell mit dem Server verbunden sind.
Beispiel:
int i, num, id; int streams[5]; num = roar_list_streams(&con, streams, 5); for (i = 0; i < num; i++) { id = streams[i]; }
int roar_get_stream (struct roar_connection * con, struct roar_stream * stream, int id);
Diese Funktion dient dazu anhand einer Stream ID ein Stream Objekt vom Server ab zu fragen.
int roar_stream_get_info (struct roar_connection * con, struct roar_stream * s, struct roar_stream_info * info);
Diese Funktion liefert erweitere Informationen über einen Stream aus wie sie für eine erweiterte anzeige (--verbose/Details) interessant sind.
int roar_stream_get_name (struct roar_connection * con, struct roar_stream * s, char * name, size_t len);
Mittels dieser Funktion kann Der Name des Streams ausgelesen werden.
int roar_stream_set_flags (struct roar_connection * con, struct roar_stream * s, int flags, int reset);
Mittels dieser Funktion können flags auf dem Stream gesetzt werden (reset = 0) oder wieder vom Stream entfernt werden (reset = 1).
Hinweis: Wirft die Funktion einen Fehler so ist der Zustand des Streams nur dann definiert sofern nur ein Flag gesetzt wurde. Wirft die Funktion einen Fehler so ist mindestens eines der Flags nicht gesetzt worden. Aus diesem grunde sollten kritische Flags (sync,hwmixer,...) einzeln gesetzt werden. Unkritische Flags (meta,cleanmeta,...) können in Gruppen gesetzt werden.
Beispiel[Bearbeiten]
#include <roaraudio.h> int main (void) { struct roar_connection con; struct roar_stream s; int i; int num; int id[ROAR_STREAMS_MAX]; char name[1024]; if ( roar_simple_connect(&con, NULL, "BeispielApp") == -1 ) { return 2; } if ( (num = roar_list_streams(&con, id, ROAR_STREAMS_MAX)) == -1 ) { return 1; } for (i = 0; i < num; i++) { if ( roar_get_stream(&con, &s, id[i]) == -1 ) { return 1; } if ( roar_stream_get_name(&con, &s, name, 1024) == 0 ) { printf("Stream %i has name: %s\n", id[i], name); } else { printf("Stream %i has no name.\n", id[i]); } } roar_disconnect(&con); }
Hinweis: Das Beispiel beinhaltet keine Fehler-Ausgaben und auch sonst nur eine minimale Fehler Behandlung. Diese sollte in einem echten Programm hinzugefügt werden.
Mixer[Bearbeiten]
int roar_set_vol (struct roar_connection * con, int id, struct roar_mixer_settings * mixer, int channels);
Mit dieser Funktion können die Mixer werte für einen Stream gesetzt werden. Hierzu wird zu erst ein Mixer settings Objekt erzeugt. Dieses wird dann zusammen mit der Stream ID und der Anzahl der Kanäle, welche im Mixer Objekt gesetzt sind, übergeben. Stimmt die Anzahl der Kanäle nicht mit der des Streams überein so ist das Verhalten undefiniert.
int roar_get_vol (struct roar_connection * con, int id, struct roar_mixer_settings * mixer, int * channels);
Diese Funktion liest die aktuellen Mixer Einstellungen aus. Hierzu wird die Stream ID angeben. Die Funktion befüllt nun das Mixer Objekt und setzt die Anzahl der Kanäle in channels die der Stream, und somit auch das Mixer Objekt, beinhalten.
Streams erzeugen, verbinden und manipulieren[Bearbeiten]
int roar_stream_attach_simple (struct roar_connection * con, struct roar_stream * s, int client);
Mittels dieser Funktion kann ein bereits existierender Stream einem neuen Klienten zugeordnet werden.
int roar_kick (struct roar_connection * con, int type, int id);
Mittels der Kick Funktion können verschiedenste Objekte vom Server getrennt werden. Unter anderem auch Streams. Um dies zu tun muss als type ROAR_OT_STREAM angegeben werden.
Beispiel:
ret = roar_kick(&con, ROAR_OT_STREAM, id);
Siehe Auch[Bearbeiten]
Dieser Artikel ist leider sehr kurz. Also: Sei mutig und mache aus ihm bitte einen guten Artikel, wenn du mehr zum Thema „RoarAudio/Programmieren/Stream” weißt.