RoarAudio/Programmieren/Stream: Unterschied zwischen den Versionen

Aus UUGRN
(→‎Beispiel: nen nettes komplettes beispiel)
K (→‎Streams erzeugen, verbinden und manipulieren: infos zu den beiden funktionen)
Zeile 103: Zeile 103:
== Streams erzeugen, verbinden und manipulieren ==
== Streams erzeugen, verbinden und manipulieren ==
  int roar_stream_attach_simple (struct roar_connection * con, struct roar_stream * s, int client);
  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);
  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 ==
== Siehe Auch ==

Version vom 8. Februar 2010, 12:43 Uhr

Hier soll kurz anhand der dazu nötigen Funktionen beschrieben werden wie ein Klient Streams generell Manage gen kann.

Arbeiten mit Stream Objekten

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

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

#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

int roar_set_vol      (struct roar_connection * con, int id, struct roar_mixer_settings * mixer, int   channels);
int roar_get_vol      (struct roar_connection * con, int id, struct roar_mixer_settings * mixer, int * channels);

Streams erzeugen, verbinden und manipulieren

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

UUGRN-Wiki verbessern („Stub”)

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.