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 />
3.4 Verbinden der Komponenten<br />
3.4.1 AudioEingabe über VoIP<br />
3.4.1.1 Analyse des Datenflusses<br />
3.4.1.1.1 Einleitung<br />
Die wichtigste Eigenschaft des Demonstrators ist die Spracheingabe über VoIP. Lässt sich diese Eigen‐<br />
schaft realisieren, so kann man bereits abschätzen, ob das Projekt machbar ist. Aus diesem Grund ist<br />
der erste Schritt die Umleitung der über VoIP empfangenen Sprachdaten an den Spracherkenner.<br />
Dazu muss untersucht werden, wie der Fluss der Daten im VoIP‐Client verläuft und wo sich eine ge‐<br />
eignete Stelle zum Abgriff der eingehenden Audiodaten befindet.<br />
3.4.1.1.2 Datenfluss VoIP‐Client<br />
Am Anfang steht ein Paketstrom, der vom VoIP‐Clienten über das Netzwerk empfangen wird. VoIP<br />
benutzt, wie schon im Grundlagenteil erwähnt, das Real Time Transfer Protokoll (RTP) zur Übertra‐<br />
gung der Medienströme. Der Empfang der RTP‐Pakete wird von Klasse RtpStreamReceiver<br />
durchgeführt. Es handelt sich dabei um eine Ableitung der Klasse Thread. Ein Thread ist ein Ausfüh‐<br />
rungsstrang, der parallel zum Hauptprogramm läuft und dabei meistens eine kontinuierliche Arbeit in<br />
einer Schleife verrichtet. Die entscheidende Methode der Klasse Thread ist run(), in der die Tä‐<br />
tigkeit des Ausführungsstrangs festgelegt ist.<br />
In der Methode run() des RtpStreamReceivers wird zuerst ein Buffer angelegt, in dem später<br />
ein eingehendes Datenpaket abgespeichert wird:<br />
In einer while‐Schleife wird nun kontinuierlich auf ein eingehendes Datenpaket gewartet. Die An‐<br />
weisung dafür lautet folgendermaßen:<br />
Nachdem ein Paket empfangen worden ist, wird der Inhalt des Paketes in eine Instanz von<br />
OutputStream kopiert. Die Daten aus dem Paketheader werden verworfen:<br />
Anschließend beginnt die Ausführung der Schleife von Vorne und es wird auf das nächste Paket ge‐<br />
wartet. Der Paketstrom wird so in einen kontinuierlichen Datenstrom zurückgewandelt.<br />
60<br />
byte[] buffer = new byte[BUFFER_SIZE];<br />
RtpPacket rtp_packet = new RtpPacket(buffer,0);<br />
rtp_socket.receive(rtp_packet);<br />
output_stream.write(rtp_packet.getPacket(),<br />
rtp_packet.getHeaderLength(), rtp_packet.getPayloadLength());