DIPLOMARBEIT
DIPLOMARBEIT
DIPLOMARBEIT
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
3.4 Verbinden der Komponenten<br />
Als nächstes muss die soeben erwähnte Instanz der Klasse OutputStream verfolgt werden. Diese<br />
wurde dem RtpStreamReceiver bereits bei der Instanziierung übergeben, daher muss nach der<br />
Stelle gesucht werden, wo der RtpStreamReceiver erstellt wird. Die entsprechende Stelle fin‐<br />
det man in der Klasse JAudioLauncher:<br />
AudioFormat format = new AudioFormat(codec, sample_rate,<br />
8*sample_size, 1, sample_size, sample_rate, big_endian);<br />
audio_output = new AudioOutput(format);<br />
receiver = new RtpStreamReceiver(audio_output.getOuputStream(),<br />
socket);<br />
Hier wird eine Instanz der Klasse AudioOutput gebildet. Dabei wird auch das Format angegeben,<br />
in dem die Audiodaten vorliegen. Auf das Format der Audiodaten wird im späteren Verlauf noch ein‐<br />
gegangen. Der OutputStream wird dem RtpStreamReceiver folglich von der Klasse<br />
AudioOutput mit Hilfe der Methode getOutputStream() zur Verfügung gestellt.<br />
Betrachtet man die Klasse AudioOutput, so stellt man fest, dass dort die eigentliche Audioausgabe<br />
erfolgt. Dies geschieht mit Hilfe der Methode AudioSystem.getLine(). Die Klasse<br />
AudioSystem ist Teil von Java und stellt Methoden zur Verfügung, um die Audio‐Hardware an‐<br />
zusprechen. Das Ergebnis ist eine Instanz der Klasse SourceDataLine 16 . Mit Hilfe der Methode<br />
write() dieser Instanz kann man nun Audiodaten ausgeben lassen. Auch der OutputStream<br />
wird hier angelegt:<br />
audio_output_stream = new AudioOutputStream(source_line, format);<br />
Es ist zu erkennen, dass es sich bei diesem OutputStream um eine spezialisierte Form mit dem<br />
Namen AudioOutputStream handelt. Diese Klasse ist Bestandteil des VoIP‐Clienten. Der Instanz<br />
des AudioOutputStreams wird die SourceDataLine übergeben. Somit wurde die Verbin‐<br />
dung zwischen den ankommenden Paketen bis hin zur Audioausgabe hergestellt. Allerdings lässt sich<br />
bisher noch keine geeignete Stelle finden, an der man an die Audiodaten auch tatsächlich heran‐<br />
kommt.<br />
Nun ist es an der Zeit, die Klasse AudioOutputStream genauer zu untersuchen. Im Konstruktor<br />
der Klasse AudioOutputStream findet man folgende Zeilen:<br />
this.source_line = source_line;<br />
PipedInputStream piped_input_stream = new PipedInputStream();<br />
output_stream = new PipedOutputStream(piped_input_stream);<br />
AudioInputStream audio_input_stream = new AudioInputStream( piped_input_stream,<br />
format, -1);<br />
16 Eigentlich würde man unter Source (engl., die Quelle) eine Audioeingabe vermuten (z.B. Mikrofon). Aus der<br />
Sichtweise des Audio‐Mixers handelt es sich aber um eine Datenquelle.<br />
61