31.10.2012 Aufrufe

DIPLOMARBEIT

DIPLOMARBEIT

DIPLOMARBEIT

MEHR ANZEIGEN
WENIGER ANZEIGEN

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 Audio­Eingabe ü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());

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!