Studienarbeit Implementierung einer IP-Multicast
Transcription
Studienarbeit Implementierung einer IP-Multicast
Universität Paderborn Studienarbeit Implementierung einer IP-Multicast basierten MPEG-2 Streaming-Anwendung Simon Oberthür Matrikelnummer 3660283 Paderborn, den 6. Dezember 2000 Inhaltsverzeichnis 1 Einleitung 1.1 Aufgabenbeschreibung . 1.2 Aufteilung . . . . . . . . 1.2.1 DVB-Cardserver 1.2.2 Applicationserver 1.2.3 CGI . . . . . . . 1.2.4 Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Benutzte Protokolle 2.1 IP-Multicast . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . 2.1.2 Adressierung von IP-Multicastpaketen . . . . . . . . 2.1.3 Multicastlevel . . . . . . . . . . . . . . . . . . . . . . 2.1.4 Senden von IP-Multicastpaketen . . . . . . . . . . . . 2.1.5 Empfangen von IP-Multicastpaketen . . . . . . . . . 2.1.6 Routing von IP-Multicastpaketen . . . . . . . . . . . 2.1.7 Motivation für die Verwendung von IP-Multicast . . 2.2 RTSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Real Time Streaming Protocol . . . . . . . . . . . . . 2.3 RTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.1 Real-Time Transport Protocol . . . . . . . . . . . . . 2.4 Einsatz und Motive für die Verwendung von RTSP und RTP 3 Design und Implementierung 3.1 Vorhandene Software . . . . . . . . . . . . . . 3.1.1 pvatots . . . . . . . . . . . . . . . . . . 3.1.2 linux dvb . . . . . . . . . . . . . . . . 3.1.3 sendrtp ts . . . . . . . . . . . . . . . . 3.1.4 Java Media Framework (JMF) . . . . . 3.1.5 Omnithread . . . . . . . . . . . . . . . 3.2 Benutzerschnittstellen . . . . . . . . . . . . . 3.3 Aufbau und Implementierung des Prototypen 3.3.1 DVB-Cardserver . . . . . . . . . . . . 3.3.2 CGI . . . . . . . . . . . . . . . . . . . 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 3 3 3 4 4 . . . . . . . . . . . . . 6 6 6 7 8 9 10 11 14 15 15 17 17 18 . . . . . . . . . . 20 20 20 20 20 20 21 21 22 23 23 Inhaltsverzeichnis 3.3.3 3.3.4 3.3.5 Applicationserver . . . . . . . . . . . . . . . . . . . . . . . . . 25 Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Beispielkommunikation zwischen den Modulen . . . . . . . . . 27 4 Zusammenfassung und Ausblick 29 4.1 Ergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4.2 Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2 1 Einleitung 1.1 Aufgabenbeschreibung In einem Intranet sollen MPEG-2 codierte TV-Signale von einem Satelliten empfangen, übertragen und von mehreren Clients wiedergegeben werden. Den Benutzern der Anwendung soll es möglich sein, über ein Webinterface einen Fernsehsender aus einer Liste von verfügbaren Sendern auszuwählen und diesen dann mit Hilfe des Clients zu empfangen. Hierfür stehen im Intranet Linuxserver zur Verfügung, die über eine DVB-Karte mit einer Satellitenschüssel verbunden sind. Diese Server sollen das TV-Signal des gewählten Fernsehsenders zu den Clients, die diesen Sender gewählt haben, übertragen. Das TV-Signal soll als MPEG-2 Multicaststream übertragen werden. Um den MPEG-2 Datenstrom darstellen zu können, verfügen die Clients über eine MPEG-2 Decoderkarte. 1.2 Aufteilung Die zu implementierende Anwendung setzt sich aus vier Teilprogrammen zusammen: 1.2.1 DVB-Cardserver Der Cardserver wird auf den Servern mit DVB-Karte gestartet. Das Programm wandelt das Signal der DVB-Karte in einen MPEG-2 Transport Stream“ um und sendet ” diesen an eine Multicastgruppe. Gesteuert wird der Server vom Applicationserver. Der Applicationserver kann veranlassen, dass ein bestimmter Sender eingestellt, der Stream gesendet und das Senden des Streams beendet wird. 1.2.2 Applicationserver Der Applicationserver wartet auf Anfragen des Players der Clientanwendung. Möchte ein Client einen Sender empfangen und der Stream des Senders wird schon gesen- 3 1 Einleitung Cardserv er Client Cardserv er LAN Client Client W ebserv er A pplicat ionserv er Client Abbildung 1.1: Skizze der zu implementierenden Anwendung det oder ein Cardserver ist noch frei, teilt der Applicationserver dem Client die Multicastgruppe mit, auf dem der MPEG-2 Stream zu empfangen ist. Ist noch ein Cardserver frei und der Stream wird noch nicht von einem Cardserver gesendet, verbindet der Applicationserver sich mit dem freien Cardserver und initiiert dort das Senden des entsprechenden Streams. Der Applicationserver überwacht die Verbindung zu den aktiven Clients. 1.2.3 CGI Das CGI wird vom Webserver gestartet, wenn der Benutzer mit seinem Webbrowser die Einstiegsseite der Anwendung aufruft. Es verbindet sich mit dem Applicationserver, fragt ab welche Sender zur Zeit zur Verfügung stehen und erzeugt dann die Einstiegsseite, auf der die einzelnen Sender als URL codiert sind. 1.2.4 Client Wenn der Benutzer einen Sender auf der Einstiegsseite mit seinem Webbrowser auswählt, wird der Player mit der URL aufgerufen, in der der gewünschte Sender codiert ist. Er verbindet sich mit dem Applicationserver und teilt ihm die URL mit. Vom Applicationserver erhält der Player die Multicastadresse auf der der Stream zu 4 1 Einleitung empfangen ist. Die Modularisierung der Anwendung bietet mehrere Vorteile: Die Anwendung kann so auf mehrere Rechner aufgeteilt werden, womit sich die Last wesentlich besser verteilen lässt. Da Applicationserver und CGI nicht viele Ressourcen benötigen, können sie (falls vorhanden) auf dem Webserver des Intranet gestartet werden, dadurch wird keine zusätzliche Hardware für diese Komponenten benötigt. Die Skalierbarkeit wird durch die Modularisierung ebenfalls erhöht: wenn z.B. eine höhere Anzahl an TVSendern, die im LAN gleichzeitig empfangen werden können, gefordert wird, muss nur ein neuer DVB-Cardserver installiert werden. Die Komponenten kommunizieren über das standardisierte Protokoll RTSP, dadurch sind einzelne Komponenten leichter gegen Software Dritter austauschbar. Auch lässt sich die Anwendung so leichter erweitern, z.B. um das Abrufen von Videodaten, die auf anderen Videoservern gespeichert sind und die ebenfalls über eine RTSP-Schnittstelle verfügen. Der Rest dieser Arbeit gliedert sich wie folgt: In Abschnitt 2 werden die verwendeten Protokolle beschrieben (IP-Multicast, RTSP, RTP), Abschnitt 3 beschäftigt sich mit dem Design und der prototypischen Implementierung der Anwendung. Im letzten Abschnitt werden die Ergebnisse der Arbeit und gesammelte Erfahrungen zusammengefasst und ein Ausblick auf weitergehende Arbeiten gegeben. 5 2 Benutzte Protokolle 2.1 IP-Multicast In diesem Kapitel werden die Grundlagen von IP-Multicast [10] (im nachfolgenden Multicast genannt) erklärt. Darüber hinaus wird erläutert wofür Multicast benötigt und wie es realisiert wird. 2.1.1 Einleitung Im Internet werden zur Zeit Videodaten fast ausschließlich über Unicast übertragen, das heißt die Daten werden vom Server für jeden Client einzeln verschickt. Die meisten Internetuser verfügen zur Zeit maximal über einen 64 kBit/s Zugang zum Internet. Beispielszenario: Ein Server ist mit 100 MBit/s an das Internet angebunden, also kann er maximal 1600 Clients mit je einem 64 kBit/s Unicast-Videostrom versorgen. Deshalb werden zur Zeit im Internet nur Videodaten verschickt, die qualitativ nicht mit herkömmlichen TV-Signalen vergleichbar sind. Bei einem MPEG-2 Datenstrom, wie wir ihn benötigen um qualitativ hochwertige TV-Signale zu übertragen, sinkt die Zahl der Clients (wie sie in diesem Szenario auftreten), die ein Server via Unicast bedienen kann, noch einmal stark, da ein MPEG-2 Datenstrom ca. 4 MBit/s an Bandbreite benötigt. Bei Unicast-Übertragungen werden die gleichen Daten mehrfach über eine Leitung geschickt und dadurch Netzwerkressourcen verschwendet. Als Alternative könnte man die Daten per Broadcast übertragen, das heißt die Daten werden vom Server nur noch einmal verschickt, allerdings an alle Clients. Doch auch hier wird wieder Netzwerkbandbreite verschwendet, denn die Daten müssen durch das gesamte Intranet an alle angeschlossenen Hosts geschickt werden, egal ob sie die Daten empfangen wollen oder nicht. Diese Art Daten zu übertragen scheidet daher aus. Multicast erlaubt diese Probleme zu umgehen. Mit Multicast können ein und dieselben Daten an mehrere Clients verschickt werden, ohne sie mehrmals oder an alle Clients verschicken zu müssen. Abbildung 2.1 verdeutlicht den Unterschied zwischen Unicast und Multicast. 6 2 Benutzte Protokolle Em pfänger Em pfänger Sender Sender Abbildung 2.1: Links: Unicast, Rechts: Multicast Bei Multicast sendet der Server einfach seine Daten an eine Multicastgruppe. Dieser Multicastgruppe treten die Clients bei und empfangen von diesem Zeitpunkt an die Daten, die an diese Gruppe gesendet werden. Eine Multicastgruppe ist also eine dynamische Gruppe, die die Hosts beinhaltet, die zur Zeit Daten aus dieser Multicastgruppe empfangen wollen. 2.1.2 Adressierung von IP-Multicastpaketen Hosts im Internet werden über IP-Adressen angesprochen, die sich aus 32 Bits zusammensetzen. Auf IP-Ebene hat man für Multicast den Adressblock 224.0.0.0/4 (224.0.0.0 bis 239.255.255.255) reserviert. Jede IP, die in der Binärdarstellung mit 1110“ beginnt, ist also eine Multicastadresse. Daher reicht die Überprüfung der ” ersten 4 Bits einer IP, um festzustellen ob es sich um eine Multicastadresse handelt. Eine Multicastadresse wird als Multicastgruppe bezeichnet, um zu verdeutlichen, dass hinter dieser IP-Adresse nicht nur ein Host steht, sondern eine ganze Gruppe von Hosts. Um Daten zu empfangen, die an eine Multicastgruppe adressiert sind, ist es notwendig dieser Gruppe beizutreten. Dieser Vorgang wird in Abschnitt 2.1.5 genauer erläutert. Es gibt einige Multicastgruppen, die eine spezielle Bedeutung haben. Der Bereich 7 2 Benutzte Protokolle 224.0.0.0-224.0.0.255 ist z.B. für administrative Zwecke reserviert. Hier die beiden wichtigsten Gruppen aus diesem Bereich: • 224.0.0.1 ist die all-hosts“-Gruppe. Auf ein Ping an diese IP (Multicastgrup” pe) sollten alle Multicast-fähigen Hosts antworten, die sich im selben Subnetz befinden. Ein Host, der Multicast empfangen will, muss also auf jeden Fall dieser Gruppe beitreten. • 224.0.0.2 ist die all-routers“-Gruppe. Dieser Gruppe müssen alle Router bei” treten, die Multicast unterstützen. Weitere spezielle bzw. reservierte Gruppen sind im RFC 1700: Assigned Numbers“ ” [13] definiert bzw. im DNS (Domain Name Service) unter MCAST.NET und 224.INADDR.ARPA aufgeführt. 2.1.3 Multicastlevel Man teilt Hosts in drei verschiedene Multicastklassen (Level) ein: Level 0 Hosts in dieser Klasse unterstützen kein Multicast. Sie können keine Multicastpakete empfangen, senden oder weiterleiten. Sie ignorieren einfach alle Multicastpakete, die sie von anderen empfangen. Im Internet gibt es zur Zeit viele Hosts und auch viele Router, die sich in dieser Klasse befinden, denn in IPv4 ist Multicastunterstützung nicht vorgeschrieben. Level 1 Hosts in dieser Klasse können Multicastpakete nur senden. Sie können keiner Multicastgruppe beitreten und deshalb auch keine Multicastpakete empfangen. Es bedarf nur sehr weniger Änderungen am Sourcecode im IP-Modul eines Level 0“-Hosts, ” um ihn zu einem Level 1“-Host zu machen. ” Level 2 Dieses ist die Klasse der Hosts, die Multicast voll unterstützen, d.h. Multicastpakete empfangen und auch senden können. Hierfür müssen sie wissen, wie man einer Multicastgruppe beitritt und sie wieder verlässt. Deshalb müssen sie auf TCP/IPEbene das Internet Group Management Protocol (IGMP)“ unterstützen, um so ” dem Router, an dem sie angeschlossen sind, mitteilen zu können, welche Multicastgruppen sie empfangen wollen. 8 2 Benutzte Protokolle Da es im Internet noch viele Level 0“-Router gibt, existiert zur Zeit keine ” flächendeckende Multicastunterstützung. Multicast funktioniert also nur in Teilnetzen, sogenannten Multicastinseln“. Diese Teilnetze kann man allerdings mit Hilfe ” von Tunneln über nicht multicastfähige Router verbinden. Das MBone“ (Multi” castbackbone) ist so ein virtuell zusammengeschlossenes Multicastnetz. 2.1.4 Senden von IP-Multicastpaketen TCP als ein Punkt-zu-Punkt Protokoll ist auf Übertragungsebene nicht für Multicast geeignet. Multicastpakete, die man versenden will, behandelt man deshalb fast genauso wie Unicast-UDP-Pakete: Man öffnet ein UDP-Socket und gibt als Zieladresse die Multicast-IP (Gruppe) an. Das heißt auch, dass auf Übertragungsebene nicht garantiert werden kann, dass die Pakete wirklich ankommen. In der im Rahmen dieser Arbeit zu implementierenden Anwendung wird deshalb zusätzlich RTP (vergl. Abschnitt 2.3) benutzt, um Paketverluste festzustellen. Gegenüber einem normalem UDP-Socket gibt es allerdings noch einige besondere Einstellungen, die man vornehmen kann. Befindet sich im Rechner mehr als ein Netzwerkinterface, muss man ein Interface bestimmen, über das der Multicastverkehr geroutet werden soll. Außerdem bieten die meisten Betriebssysteme Funktionen an, mit denen am Socket eingestellt werden kann, ob die gesendeten Daten auch am sendenden Host empfangen werden sollen (loopback). Eine ganz besondere Rolle nimmt beim Multicast das TTL-Feld im IP-Header ein, das im nächsten Absatz beschrieben wird. TTL - Time To Live Wie auch bei IP-Paketen bei denen es sich nicht um Multicastpakete handelt, kontrolliert das TTL-Feld die Lebensdauer eines Multicast-Paketes, um zu verhindern, dass das Paket bei Routingfehlern endlos geroutet wird. Wenn ein Paket einen Router passiert, erniedrigt dieser den TTL-Wert. Beim Erreichen der 0 wird das Paket nicht mehr weiter geroutet. Das TTL-Feld wird bei Multicast aber auch benutzt, um die Reichweite der zu sendenden Pakete zu steuern. Möchte man z.B. — wie im Rahmen der in dieser Arbeit zu programmierenden Anwendung — Videosignale nur innerhalb eines LAN und nicht ins gesamte Internet übertragen, setzt man die TTL mit der man die Pakete senden möchte z.B. auf 31. Bei multicastfähigen Routern gibt es nämlich die Möglichkeit, einen Schwellenwert für jedes Interface zu definieren. Setzt man diesen Schwellenwert bei dem Router, der das LAN mit dem Internet verbindet, auf 32, werden nur Multicastpakete mit einer TTL größer 32 ins Internet weitergeleitet. Hier eine Liste von TTL-Reichweiten”: ” 9 2 Benutzte Protokolle TTL 0 1 <32 <64 <128 <255 Reichweite Beschränkt auf denselben Host. Beschränkt auf dasselbe Subnetz. Beschränkt auf einen bestimmten Standort, Organisation oder Abteilung. Beschränkt auf dieselbe Region. Beschränkt auf denselben Kontinent. Unbeschränkt, global. Wie aus der Liste ersichtlich wird, kann einer TTL keine genaue Reichweite zugeordnet werden. Es liegt immer in der Hand der Router-Administratoren die Schwellenwerte einzustellen. Die Liste gibt aber einen Anhaltspunkt welche Reichweite mit einer bestimmten TTL erlangt werden sollte. 2.1.5 Empfangen von IP-Multicastpaketen Auch das Empfangen von Multicastpaketen läuft ähnlich wie das Empfangen von Unicast-UDP-Paketen ab. Beim Öffnen des Sockets reicht es allerdings nicht aus, nur die IP der Multicastgruppe anzugeben. Wenn eine Anwendung Multicastpakete empfangen möchte, ist es wichtig, dass sie dem Betriebssystem mitteilt, an welchen Gruppen sie interessiert ist, damit das Betriebssystem der/den Multicastgruppe/n beitreten kann. Die Anwendung empfängt dann nur Multicastpakete von den Gruppen, die sie abonniert“ hat. Das UDP-Protokoll benutzt dabei die Multicastadres” sen und Portnummern der Pakete, um diese an die richtigen Sockets zu verteilen. Es ist auch möglich, dass mehrere Programme auf einem Host einer Multicastgruppe beitreten. Eine Anwendung tritt beim Beitreten einer Gruppe nicht unbedingt einer globalen Gruppe bei, sondern einer Gruppe auf einem Netzwerkinterface des Hosts. Dadurch empfängt man nicht automatisch alle Pakete, die weltweit an diese Multicastadresse gesendet werden, denn wie weit IP-Multicastpakete von einem Sender geroutet werden hängt wie beschrieben von der TTL, mit der sie gesendet werden und den dazwischen liegenden Routern ab. Wenn sich der Sender und der potentielle Empfänger in zwei verschiedenen Multicastinseln befinden, die nicht über einen Tunnel miteinander verbunden sind, dann ist eine Multicastkommunikation zwischen Sender und Empfänger nicht möglich. Wenn ein Programm nicht mehr am Empfang von Daten aus einer Multicastgruppe interessiert ist, muss es diese beim Betriebssystem wieder abbestellen“. ” Dieses verlässt die Gruppe allerdings erst wieder, wenn kein Programm mehr diese Multicastgruppe empfangen möchte. 10 2 Benutzte Protokolle Das Protokoll IGMP Das Internet Group Management Protocol (IGMP)“ ist entwickelt worden, um das ” Beitreten und Verlassen von Multicastgruppen zu standardisieren. Alle Hosts in Level 2 müssen IGMP unterstützen. IGMP Version 1 wird im RFC 1112 [6] beschrieben. In dieser Version gibt es zwei Nachrichtentypen: Host Membership Query“ und Host Membership Report“. Ein ” ” Router kann alle Hosts in einem Subnetz periodisch fragen, welche Gruppen sie empfangen möchten, und Hosts können als Antwort auf die Anfrage oder spontan pro Gruppe einen Report abschicken. In Version 1 von IGMP kann ein Host eine Gruppe nicht gezielt verlassen. Er kann nur warten, bis der Router das nächste Mal eine Anfrage stellt und dann darauf nicht antworten. Die wichtigste Änderung an IGMP Version 2 (RFC 2236 [8]) ist ein neuer Nachrichtentyp: Leave Group Message“. Mit dieser Nachricht können die Hosts dem ” Router mitteilen, dass sie eine Gruppe verlassen wollen. Dieses Verfahren verschwendet weniger Bandbreite, da der Router sofort eine Multicastgruppe abbestellen kann, wenn kein Host im Subnetz mehr die Gruppe benötigt und nicht erst wenn er eine Query“ stellt, auf die kein Host antwortet. Außerdem können in Version 2 mehrere ” Multicastrouter in einem Subnetz koexistieren, in dem der Router mit der kleineren IP zum Querier“ ausgewählt wird und alle Fragen übernimmt; fällt er aus, springt ” der nächste ein. Derzeitig unterstützen die meisten Betriebssysteme IGMP Version 1, viele werden auf IGMP Version 2 vorbereitet. Der Vollständigkeit halber sei noch erwähnt, dass es schon eine Version 3 von IGMP [5] gibt, in der es zusätzlich Access Control Lists (ACLs) gibt. Mit den ACLs kann ein Host seinem Router mitteilen, dass er nur Multicast Pakete empfangen möchte, die von einem bestimmten Sender an die Gruppe geschickt werden. 2.1.6 Routing von IP-Multicastpaketen Routing ist im Zusammenhang mit Multicast ein schwieriges Problem, im Folgenden Abschnitt sollen einige der wichtigsten Algorithmen und Protokolle kurz vorgestellt werden. Wenn ein Host einer Multicastgruppe im Internet beitritt, müssen alle Router zwischen einem Sender, der mit einer genügend hohen TTL sendet, und dem Host die Pakete Richtung Host weiterleiten. Das Problem ist, eine geeignete Heuristik auszuwählen, um zu entscheiden, wie Multicastpakete geroutet werden sollen. Ein trivialer Algorithmus wäre, die Daten überall hinzusenden, so dass jeder 11 2 Benutzte Protokolle Router sie weiterleitet, doch wäre dies Broadcast. Bis heute wurden mehrere Algorithmen entwickelt, aber in diesem Bereich wird immer noch Forschung betrieben. Die meisten Verfahren teilt man in Dense Mode“ oder Sparse Mode“ ein. Bei ” ” dichten“ Multicastnetzen liegen die Empfänger nahe beieinander und Router haben ” eine relativ hohe Zahl von Teilnehmern zu bedienen, hierfür sind die Dense Mode“” Algorithmen optimiert. Bei spärlich verteilten Empfängern muss jeder Router nur wenige Teilnehmer bedienen, dafür liegen alle Empfänger einer Multicast Gruppe räumlich weit verteilt, hierfür sind die Sparse Mode“-Algorithmen gedacht. Abbil” dung 2.2 zeigt ein Beispiel für Multicastnetze, in denen die Empfänger nah beieinander liegen, Abbildung 2.3 ein Beispiel für Multicastnetze, in denen die Empfänger spärlich verteilt sind. Sender Router Empfänger Abbildung 2.2: Multicastnetze in denen die Empfänger nah beieinander liegen Flood and Prune Dieses Protokoll wurde früher im MBone benutzt. Da im MBone alle Standleitungen über einen Pauschalpreis abgerechnet wurden, konnte man verschwenderischer“ ” mit der Bandbreite umgehen. Wenn Daten auf einer Multicastgruppe hereinkamen, die bisher nicht benutzt worden war, wurden die Daten einfach“ an alle Router ” weitergeschickt ( Flood“). Die Router bestellten dann die Gruppen wieder ab, wenn ” kein Client diese Gruppen abonniert hatte ( Prune“). ” Der Nachteil ist, dass selbst wenn in einem Subnetz keine Multicast Gruppe benötigt wird, unnötiger Netzwerkverkehr bis zum Router entsteht, bis dieser die nichtbenötigten Gruppen wieder abbestellt. Dadurch entstehen bei einer Standleitung, die nach Volumen abgerechnet wird, Kosten für Multicast selbst wenn gar kein 12 2 Benutzte Protokolle Sender Router Empfänger Abbildung 2.3: Multicastnetze in denen die Empfänger spärlich verteilt sind Multicast benötigt wird. Dieses Protokoll ist ein Dense Mode“-Verfahren. ” DVMRP Das Multicastroutingprotokoll DVMRP (Distance Vector Multicast Routing Protocol), welches im RFC 1075 [16] beschrieben wird, kam lange Zeit im MBone zum Einsatz. Dieses Protokoll baut auf Flood and Prune auf und greift auf Unicastrouting zurück. MOSPF MOSPF (RFC 1585 [11]) ist eine Multicasterweiterung des OSPF-Protokolls (Open Shortest Path First, RFC 1583 [12]) und greift damit auch auf Unicastrouting zurück. Dieses Protokoll benötigt viel RAM und Rechenzeit in den Routern, da beim OSPF der Dijkstra Algorithmus angewendet wird. MOSPF ist heute praktisch bedeutungslos. PIM DVMRP und MOSPF haben den Nachteil, dass sie von einem bestimmten Unicastroutingprotokoll abhängen. Von der Internet Engineering Task Force (IETF) wurde deshalb PIM (Protocol Independent Multicast) entwickelt. PIM-DM [17] ist 13 2 Benutzte Protokolle die Dense Mode“-Variante des PIM-Protokolls. Es ist eine abgewandelte Version ” von DVMRP, die nicht auf Unicast Routing zurückgreift. Die Sparse Mode“-Variante von PIM ist PIM-SM (RFC 2362 [7]). Sie baut auf ” sogenannten Rendezvous Points auf. PIM ist derzeit das meistbenutzte Protokoll. Seine Verbreitung ist darauf zurückzuführen, dass die Firma Cisco in ihren Routern nur PIM unterstützt und ca. 90% der Router im Internet Cisco-Router sind. CBT CBT (Core Based Trees, RFC 2189 [4]) geht von einem zentralen Kernrouter (Core) aus, über den der gesamte Datenverkehr fließt. Der Kernrouter ist die Wurzel des Multicastbaumes. Dieser Algorithmus ist in die Sparse Mode“-Algorithmen einzu” ordnen. 2.1.7 Motivation für die Verwendung von IP-Multicast Gerade bei der hier zu implementierenden Anwendung ist es sinnvoll Multicast zu benutzen. Es sollen MPEG-2 codierte TV-Signale übertragen werden, die ca. 4 MBit/s an Bandbreite benötigen. Da es sich um Livestreams“ handelt, werden die gleichen ” Daten an alle Clients, die denselben Sender empfangen möchten, gesendet. Die Daten nicht mit Multicast zu versenden, wäre Verschwendung der Netzwerkbandbreite. Auch müssen die DVB-Cardserver keine besonders schnelle Netzwerkanbindung haben, es reicht wenn sie über einen normalen 10 MBit/s Anschluss zum Router verfügen — wie er noch weit verbreitet ist — unabhängig davon wieviele Clients einen Stream empfangen sollen. Dies ermöglicht die Skalierbarkeit der Anwendung. 14 2 Benutzte Protokolle 2.2 RTSP 2.2.1 Real Time Streaming Protocol Das Real Time Streaming Protocol (RTSP)“ ermöglicht die Kontrolle über Echtzeit ” Audio- und Videostreams und wird im RFC 2326 [15] beschrieben. Das Protokoll ist nicht für die Übertragung selber, sondern nur für die Steuerung von Multimediaservern zuständig (z.B. Initiieren von Übertragungen). Nachfolgend einige Anwendungsfälle, für die das RTSP-Protokoll entwickelt wurde. In den Beispielen werden einige Funktionen kurz erläutert, die durch das Protokoll zur Verfügung gestellt werden: • Multimediadaten von einem Server empfangen und steuern Ein Client kann bei einem Server eine Beschreibung anfordern und eine Sitzung initialisieren. Der Server kann dem Client dann verschiedene Funktionen zur Verfügung stellen, z.B. abspielen“, pause“ oder vorspulen“. Wenn das ” ” ” Abspielen vom Client initiiert wird, teilt der Server dem Client die Multicastadresse und den Port mit, an die der gewünschte Stream geschickt wird. • Multimediaströme von einem Server aufzeichnen lassen Ein Multimediaserver, der das Aufzeichnen von Multimediaströmen ermöglicht, kann von einem Client veranlasst werden einen Stream, den der Client zum Server sendet, aufzuzeichnen und diesen dann zum Abruf wieder bereitzustellt. • Einen Multimediaserver in einer Konferenz einbinden In einer bestehenden Multimediakonferenz kann ein Multimediaserver so gesteuert werden, dass er Medien in die Konferenz einspielt (z.B. Videos, Folienpräsentationen, Audioannotationen, etc.), aber auch Teile oder die ganze Konferenz aufzeichnet. Dabei können mehrere Teilnehmer dieser Konferenz den Server steuern. Dieses Anwendungsbeispiel kann zum Beispiel in einer verteilten Lernanwendung“ zum Einsatz kommen. ” • Hinzufügen/Ändern von Medien in einer laufenden Präsentation Sinnvoll für Livepräsentationen ist es, dass der Server dem Client mitteilen kann, wenn neue Medien verfügbar sind, zum Beispiel in besserer Qualität 15 2 Benutzte Protokolle oder zusätzliches Material. Zur Lastverteilung kann der Server den Client einem anderen Stream zuordnen und diesen über den neu zu empfangenden Stream informieren. Das Protokoll hat Ähnlichkeiten mit HTTP (RFC 2068 [9]), es benutzt ebenfalls wie dieses eine Text-basierte Syntax und URLs zur Adressierung. Eine RTSP-URL setzt sich aus rtsp://<host>[:<port>]/<media>“ zusammen. ” Hierbei bezeichnet host“ den Internet-Namen oder die IP-Adresse des RTSP-Ser” vers, port“ den Port auf dem der Server Anfragen annimmt und media“ die zu ” ” steuernde Ressource. Die Angabe des Ports ist optional, ist kein Port angegeben wird der Port 554 benutzt. Bei der Ressource kann es sich um einen kompletten Stream oder aber um Teilstreams handeln, die Interpretation liegt beim RTSP-Server und ist nicht im Protokoll festgelegt. Beispiele für RTSP-URLs sind: rtsp://media.beispiel.de:554/dasboot/mpg2video rtsp://media.beispiel.de/dasboot/audio rtsp://media.beispiel.de:554/dasboot/video rtsp://radio.uni-paderborn.de:887/campusradio/mp3 rtsp://media.beispiel.de:554/rekorder/simon 16 2 Benutzte Protokolle 2.3 RTP 2.3.1 Real-Time Transport Protocol Das Real-Time Transport Protocol (RTP)“ ist ein End-zu-End Verbindungsproto” koll, welches Unterstützung für die Übertragung von Daten in Echtzeit gibt. Speziell wurde es für die Übertragung von Audio- und Videodaten in Multimediakonferenzen mit mehreren Teilnehmern entwickelt. RTP ergänzt die zu verschickenden Multimediadaten um einen Header und ermöglicht unter anderem folgende Funktionen: Identifizierung der transportierten Datentypen, Sequenznummerierung, Zeitstempel, Multiplexing und Überwachung der Übertragung. RTP wird in der Anwendungsebene auf das UDP oder Multicastprotokoll aufgesetzt, um zum Beispiel die Sequenznummerierung auszunutzen und den Verlust von Paketen feststellen zu können. Es bietet keine Unterstützung für Quality-Of” Service“, reihenfolgetreue oder garantierte Übertragung. Es wird auch als Rahmen” protokoll“ beschrieben und soll daher nur einen Teil der Funktionen standardisieren, die benötigt werden um Echtzeit Übertragungen zu ermöglichen. Im RFC 1889 [14] wird das Protokoll beschrieben, dort wird auch das RTP ” Control Protocol (RTCP)“ spezifiziert. RTCP wurde unter anderem konzipiert um Quality-Of-Service“-Aspekte einer Übertragung überwachen zu können. ” Die folgenden Anwendungsfälle beschreiben Szenarien, in denen das RTP-Protokoll zum Einsatz kommt. An ihnen sollen einige Funktionen von RTP beschrieben werden. • Eine Multicastaudiokonferenz Für eine Audiokonferenz einer Arbeitsgruppe wird im Internet eine Multicastgruppe genutzt. Die Software, die jeder Teilnehmer verwendet, sendet kleine RTP-Pakete, die 20 Millisekunden Audiodaten enthalten, an die Multicastgruppe. In jedem dieser RTP Pakete enthält der Header Informationen über die Codierung der Audiodaten (PCM, MP3, etc.), damit kann während der Konferenz die Codierung geändert werden. Dies ist z.B. sinnvoll, wenn ein neuer Teilnehmer der Konferenz beitritt, der nur mit einer geringen Bandbreite ans Internet angeschlossen ist oder wenn die Netzwerkverbindung schlechter wird. Bei IP-Multicast kann es vorkommen, dass einzelne Pakete verloren gehen oder in der falschen Reihenfolge ankommen. Hier hilft der Anwendung die Sequenznummer und die Timing-Informationen zur Fehlerkorrektur der Audiodaten. Sequenznummer und Timing-Informationen sind deshalb in jedem RTP-Header enthalten. 17 2 Benutzte Protokolle • Eine Audio- und Videokonferenz Wenn Audio- und Videodaten in einer Konferenz übertragen werden sollen, können die Daten in getrennten RTP-Strömen übertragen werden. Dies ist sinnvoll, wenn beispielsweise Teilnehmer nur die Audiodaten empfangen wollen. Auch hierbei können die Timing Informationen, die bei RTP übertragen werden, genutzt werden um Ton und Bild zu synchronisieren. • Mixer“ ” Bei einer Multimediakonferenz sind die Teilnehmer mit unterschiedlicher Bandbreite an das Internet angeschlossen. Die Teilnehmer mit einer geringeren Bandbreite können nur Multimediadaten in niedriger Qualität empfangen. Damit nicht alle Teilnehmer die Multimediadaten in niedrigen Qualität empfangen müssen, unterstützt das RTP-Protokoll das sogenannte Mixer“ Kon” zept. Hierbei werden die Teilnehmer in zwei Klassen eingeteilt. Ein Server übernimmt dann die Funktion des Mixers. Dieser Server verbindet die beiden Klassen, indem er die Multimediadaten von hoher Qualität in niedrige Qualität umrechnet und an die Teilnehmer mit schlechter Anbindung den veränderten RTP-Strom sendet. • Translator“ ” Eine Multimediakonferenz soll mit Hilfe von IP-Multicast übertragen werden, die Teilnehmer befinden sich aber in zwei verschiedenen Multicastinseln, Multicastpakete werden nicht zwischen den beiden Inseln geroutet. In diesem Fall sieht das RTP das Konzept der Translatoren“ vor. Je ein Server übernimmt ” pro Insel die Funktion eines Translators“, d.h. die RTP-Pakete werden durch ” die beiden Translatoren getunnelt. 2.4 Einsatz und Motive für die Verwendung von RTSP und RTP RTSP Das RTSP kommt an mehreren Stellen in der hier zu implementierenden Anwendung zum Einsatz: zwischen CGI und Applicationserver, zwischen Applicationserver und Cardserver und zwischen Applicationserver und Java-Applet. RTSP findet als Standard zum Steuern von Multimediaservern immer mehr Einsatz und lässt sich durch seine Offenheit an viele Anwendungsfälle anpassen. Es kommt außerdem zum Einsatz, da das Austauschen einzelner Komponenten der Anwendung so wesentlich einfacher zu realisieren ist; daher kann ein anderer Player eingebunden werden, wenn dieser MPEG-2 und RTSP unterstützt. Auch wäre es 18 2 Benutzte Protokolle denkbar, einen Digitalen Videorekorder“ über RTSP in die Anwendung zu inte” grieren. RTP Der Cardserver sendet die MPEG-2 codierten TV-Signale über das RTP. RTP wird verwendet da es sich als Standard für das Übertragen von EchtzeitMultimediadaten durchgesetzt hat. Dieses Protokoll zu benutzen erleichtert auch die Portierbarkeit der Clientanwendung auf andere Betriebssysteme. Es ist einfacher, für andere Betriebssysteme einen Player zu finden, wenn ein standardisiertes Protokoll benutzt wird. 19 3 Design und Implementierung In diesem Abschnitt werden die prototypische Implementierung der Streaming-Anwendung und die bei der Implementierung verwendeten Programme und Bibliotheken beschrieben. 3.1 Vorhandene Software Nachfolgend werden die Programme beschrieben, auf denen die Anwendung aufbaut. 3.1.1 pvatots Die DVB-Karte liefert kein Standard MPEG-2 Signal, sondern nur ein verwandtes PVA-Signal. Das C-Programm pvatots“ wandelt Videodaten, die im PVA-Format ” vorliegen, in einen MPEG-2 Transport Stream“ um. ” 3.1.2 linux dvb linux dvb“ ist der Treiber für die vorhandene Fujitsu-Siemens DVB-PCI-Karte. ” Über ihn lässt sich die DVB-Karte ansprechen. Dieser Treiber ist ein Open-SourceProjekt [2] und steht unter der GNU General Public License (GNU GPL)“. ” 3.1.3 sendrtp ts Das C-Programm sendrtp ts“ kann einen MPEG-2 Transport Stream“ über RTP ” ” an eine Multicastadresse versenden. Es steht ebenfalls unter der GNU General Pub” lic License“. 3.1.4 Java Media Framework (JMF) Das JMF ist eine Java-API von Sun [1], die Unterstützung für Audio und Video in Java-Applikationen und -Applets bereitstellt. Sie bietet nicht nur Unterstützung für 20 3 Design und Implementierung das Abspielen und Aufnehmen von Medien, sondern auch für deren Echtzeitübertragung und -empfang. In der aktuellen Version unterstützt es RTP und RTSP. Weiterhin bietet Sun Beispiel-Applets im Sourcecode an, denen eine RTSP-URL übergeben wird und die dann einen JMF-Player zum Abspielen von Medien instantiieren. 3.1.5 Omnithread Omnithread ist eine Bibliothek, die Threadfunktionen für C++-Programme zur Verfügung stellt. Sie ist Teil des OmniORB-Paketes von AT&T Laboratories [3]. Auch dieses Paket ist frei verfügbar. 3.2 Benutzerschnittstellen Es gibt zwei verschiedene Personengruppen, die auf die Anwendung zugreifen. Die Benutzer, die TV Signale empfangen möchten, und die Administratoren des Systems, die die Server verwalten. Für beide Gruppen müssen verschiedene Funktionen zur Verfügung gestellt werden. Das Usecasediagramm in Abbildung 3.1 veranschaulicht diese Funktionen. DVB−Card− server s atu n St rage f ab <Admin> DV B−Card− serv er v erwalten Appli cati on− TV −Sender v erwalten server Status abfragen TV Signal ansehen Cli ent Ap plic a ein tions e tra ge rv er n ste erli nd fen e S bru a mm gra o Pr ählen w CG I Abbildung 3.1: Usecasediagramm der Anwendung 21 <B enut zer> 3 Design und Implementierung Der Administrator soll am Cardserver den Port einstellen können, auf dem er Befehle vom Applicationserver entgegen nimmt, und Statusmeldungen auslesen können. Am Applicationserver soll der Administrator für jeden Cardserver dessen IPAdresse und Port einstellen können. Außerdem soll er festlegen können, an welche Multicastgruppe und auf welchem Port ein Cardserver die Signale sendet. Weiterhin soll er die TV-Sender mit den benötigten Parametern übergeben können, dieses beinhaltet unter anderem den Namen der Sender und deren Trägerfrequenz. Auch beim Applicationserver soll eine Statusabfrage möglich sein, die den Stand der Cardserver und der Clients wiedergibt. Das CGI benötigt die IP-Adresse und den Port des Applicationservers, der Administrator soll dieses am CGI einstellen können. Der Benutzer möchte aus einer Liste einen TV-Sender auswählen können, diese wird von CGI erzeugt. Mit dem Player soll der Benutzer den MPEG-2 Multicast Stream empfangen und wiedergeben können. 3.3 Aufbau und Implementierung des Prototypen Die Abbildung 3.2 gibt einen Überblick über die Zusammenhänge und Schnittstellen der Teilprogramme (Module). M P E G−2 über M ul ti cast DVB−Card− server RTP Client RTP RTSP RTSP Webbrowser/HTML RTSP Webserver/ HTML Application− server RTSP RTSP Cgi Abbildung 3.2: Zusammenhang und Schnittstellen der Module 22 3 Design und Implementierung Für die Realisierung der Anwendung stehen Server mit DVB-Karten, ein Server mit installiertem Apache-Webserver und PC-Workstations mit MPEG-2 Decoderkarten zur Verfügung. Auf den Servern kommt das Open-Source Betriebssystem Linux und auf den Workstations das Betriebssystem Windows 98“ von Microsoft ” zum Einsatz. 3.3.1 DVB-Cardserver Der DVB-Cardserver kommt auf den Linuxrechnern mit DVB-Karte zum Einsatz und ist in C++ geschrieben. Er spricht die DVB-Karte an, stellt den zu empfangenden Sender ein und liest das PVA-Signal aus. Dieses Signal wandelt der Cardserver in einen MPEG-2 Transport Stream“ um und sendet diesen mittels RTP an eine ” Multicastgruppe. Über eine RTSP-Schnittstelle lässt er sich vom Applicationserver steuern. Der Applicationserver kann den Cardserver anhalten, so dass er nicht mehr sendet; weiterhin kann er veranlassen dass ein neuer Sender eingestellt wird und dass der Cardserver zu senden beginnt. Hierfür unterstützt der RTSP-Server die Kommandos: SETUP“, SET PARAMETER“, PLAY“ und TEARDOWN“. ” ” ” ” Der DVB-Cardserver besteht aus mehreren Threads. Die main“-Routine nimmt ” die RTSP-Verbindungen (Connects) entgegen und erzeugt für jeden Client ein neues Klassenobjekt vom Typ RTSPServer“. Jedes dieser Objekte bildet einen Thread. ” Die RTSPServer“ nehmen die RTSP-Kommandos der Clients entgegen und verar” beiten diese. Ein anderer Thread baut auf pvatots“ auf und konvertiert die PVA” Daten aus dem Videodevice (der DVB-Karte) in einen MPEG-2 Transport Stream“, ” dieser Stream wird in eine Pipe geleitet. Dieser Thread wird mit Hilfe des Klassenobjekts Cardcontroller“ implementiert, welches auch Operationen zum Ansteuern ” der DVB-Karte bereitstellt. Das Programm sendrtp ts“ wird mit der Pipe als Ein” gabe gestartet, es sendet den MPEG-2 Transport Stream“ mittels RTP an die ” Multicastadresse, die vom Applicationserver im SETUP“-Befehl übermittelt wur” de. Abbildung 3.3 verdeutlicht diesen Prozess. Konfiguriert wird der Cardserver über die Konfigurationsdatei cardserver.conf“, ” die der Server in dem Verzeichnis sucht, in dem er gestartet wurde. Der Prototyp gibt Statusmeldungen auf die Standard-Ausgabe (stdout) aus. 3.3.2 CGI Das CGI ist ein C++-Programm, das von einem Linuxwebserver gestartet wird, wenn der Benutzer die Einstiegsseite der Anwendung in seinem Browser aufruft. Es schickt ein RTSP-Kommando GET PARAMETER“ an den Applicationserver in ” dem es Informationen über den Parameter tvchannels“ anfordert. Als Antwort wird ” 23 3 Design und Implementierung DVB−Cardserver Applic at ion− s erver main conne ct a ccep t C a r d con tr o le r R T SPSe r v e r R T SP: SET _ PAR AMET ER f r equen cy,symbo lr a te , ... C ard− c ont roler R T SP− Server se tFr equen cy se tSymbo lr a te ... R T SP− An two r t: OK clo se conne ct a ccep t R T SPSe r v e r R T SP: SET U P R T SP− Server tune C hanne l() R T SP− An two r t: OK clo se conne ct a ccep t R T SPSe r v e r R T SP− Server R T SP: PL AY signa l R T SP− An two r t: OK p ipe =popen ( "send r tp_ ts 224 .1 .2 .3 6778 12 ","w") s endrt p_ t s clo se p v a_ to_ ts( p v a Str ea m,p ipe ) R T SPSe r v e r R T SP: T EARD O WN Pipe : MPEG− 2 T r an spo r t Str ea m R T SP− Server R T P übe r Mu ltica st: MPEG− 2 T r an spo r t Str ea m conne ct a ccep t p la y = f a lse r e tu r n ( 0 ) R T SP− An two r t: OK p clo se ( p ipe ) clo se Abbildung 3.3: Kommunikation der Cardserver-Threads und Applicationserver 24 3 Design und Implementierung eine Liste der Sender geschickt, die zur Zeit zur Verfügung stehen. Diese Sender werden als RTSP-URL codiert und in einer HTML-Seite zum Webserver zurückgegeben. Der Webserver überträgt diese HTML-Seite dann zum Browser des Benutzers. Die Abbildung 3.4 zeigt einen Screenshot einer so erzeugten HTML-Seite. Die RTSP-URL, an die die Anfrage geschickt wird, steht in der Konfigurationsdatei tvapp.conf“ im CGI-Verzeichnis in dem sich auch das Programm befindet. ” Abbildung 3.4: Screenshot einer vom CGI erzeugten HTML-Seite 3.3.3 Applicationserver Der Applicationserver existiert nur einmal im LAN. Er bedient die Cardserver und verwaltet die Verbindungen der Clients. Er ist ein C++-Programm mit dem Namen mpgtvappd“ und kann auf dem Rechner gestartet werden, auf dem auch der ” Webserver des LANs läuft. In drei Listen verwaltet das Programm die Clients, TV-Sender und Cardserver, in denen es pro Server, TV-Sender und Client ein Objekt anlegt. In diesem Objekt werden alle wichtigen Informationen gespeichert, zum Beispiel für jeden Client welchen Sender dieser Client empfängt (vergl. Abbildung 3.5). 25 3 Design und Implementierung my Client s : Client : Client : Client int socketID = 15 St ring channel = "A RD" int socketID = 20 St ring channel = "ZDF" int socketID = 21 St ring channel = "RT L" : Client : Client int socketID = 17 St ring channel = "PRO7" int socketID = 18 St ring channel = "A RD" NULL Abbildung 3.5: Beispielskizze der Clientliste zur Laufzeit Das Programm öffnet ein Socket, an dem auf RTSP-Verbindungen gewartet wird. Für jeden Client bzw. CGI wird ein eigener Thread gestartet, der die RTSP-Anfragen des Clients oder CGI entgegennimmt und verarbeitet. Stellt das CGI eine GET PARAMETER“-Anfrage nach dem Parameter tv” ” channels“, schickt das Programm eine Antwort mit den zur Zeit verfügbaren Sendern zurück. Das sind alle Sender, falls noch ein Cardserver frei ist; sonst die Sender, die gerade von den Cardservern ausgestrahlt werden. Der Client sendet bei jeder Anfrage zum Applicationserver die RTSP-URL, in der der gewünschte Sender codiert ist, um im Programm dem Client einen Sender zuordnen zu können. Sendet ein Client das RTSP-Kommando SETUP“, überprüft das Programm, ” ob der gewünschte Sender schon von einem Cardserver ausgestrahlt“ wird. Wenn ” noch ein Server frei ist (d.h. keinen Stream ausstrahlt), wird die Anfrage positiv beantwortet und für den Client in der Datenstruktur vermerkt, dass der Client den Sender empfangen will. Ist kein Cardserver mehr frei, wird der Client abgewiesen. Tritt der Fall ein, dass noch kein Cardserver den Sender ausstrahlt“, schickt ” der Applicationserver zu einem freien Cardserver RTSP-Kommandos um den Sender einzustellen“. In dem RTSP-Kommando SET PARAMETER“ werden alle ” ” für den Sender benötigten Daten, wie z.B. Polarisation und Trägerfrequenz, zum Cardserver übermittelt. Mit dem RTSP-Kommando SETUP“ wird der Sender mit ” den zuvor übermittelten Daten an der DVB-Karte eingestellt und die Multicastadresse, der Port und die TTL übermittelt. Außerdem wird in dem Datenobjekt, das zu dem Cardserver gehört, der Sender festgehalten. Dem Client wird in der RTSP-Antwortnachricht die Multicastadresse und der Port mitgeteilt, auf dem der 26 3 Design und Implementierung MPEG-2 RTP-Stream zu empfangen ist nachdem das PLAY“-Kommando abge” setzt wurde. Sendet ein Client nach dem SETUP“-Befehl das RTSP-Kommando PLAY“, ” ” schickt der Applicationserver dem Cardserver, der seine DVB-Karte auf den Sender eingestellt hat, das RTSP-Kommando PLAY“, falls der Cardserver den Sender ” noch nicht ausstrahlt. Der Applicationserver hält die TCP-Verbindung, die beim RTSP-Protokoll zustande kommt, aufrecht. Dadurch kann er feststellen, ob der Client aktiv ist. Diese Information ist wichtig, da er so die Clients den einzelnen Cardservern zuordnen und feststellen kann, wenn kein Client mehr von einem DVB-Cardserver Signale empfängt. Bricht die Verbindung zwischen Client und Applicationserver ab oder sendet der Client das RTSP-Kommando TEARDOWN“, überprüft das Programm, ob noch ” weitere Clients den Stream empfangen. Ist dies nicht der Fall, wird zum Cardserver ein TEARDOWN“-Befehl geschickt und festgehalten, dass der Cardserver wieder ” frei“ ist. ” Auch der Prototyp des Applicationserver gibt Statusmeldungen auf die StandardAusgabe aus. 3.3.4 Client Der Client ist ein Java-Applet von Sun welches auf JMF aufbaut. Vom Browser wird das Applet gestartet, wenn ein Sender ausgewählt wird. Beim Start wird dem Applet die RTSP-URL übergeben und es verbindet sich mit dem Applicationserver über RTSP. Vom Server erhält es die Adresse, die die Multicastgruppe und den Port enthält, auf dem der MPEG-Stream zu empfangen ist. 3.3.5 Beispielkommunikation zwischen den Modulen Die Abbildung 3.6 zeigt den Ablauf der Kommunikation zwischen den Modulen an einem Beispiel, in dem ein Benutzer auf die Anwendung zugreift. In diesem Beispiel ist ein Cardserver noch frei und der Benutzer wählt einen Sender aus, der noch nicht von einem anderen Cardserver ins LAN via MPEG-2 Multicaststream übertragen wird. Wenn der Benutzer den Sender nicht mehr Empfangen möchte, benötigt auch kein anderer Client diesen Sender mehr. 27 3 Design und Implementierung Web− browser Webserver/ CG I Appli cati on− server DVB− Cardserver GET htt p://t v . upb. de/ cgi/t v app. cgi GET _ PAR AMET ER channels rt sp://t v . upb. de/t v app R T SP− An two r t: Sende r liste H T ML − Se ite mit Sende r liste r tsp ://tv .upb .de /tv /channe l/ARD Cli ent (Java− Appl et) SET U P rt sp://t v . upb. de /t v / channels/ A RD SET _ PAR AMET ER rt sp:// cs01. upb. de/t v / channel R T SP− An two r t: OK SET U P rt sp:// cs01. upb. de/t v / channel T ransport: 224. 1. 2. 3: 6778 R T SP− An two r t: OK R T SP− An two r t: OK T ransport: 224. 1. 2. 3: 6778 PL AY rt sp://t v . upb. de /t v / channels/ A RD PL AY rt sp:// cs01. upb. de/t v / channel R T SP− An two r t: OK R T SP− An two r t: OK RT P M PEG−2 M u l ticast Stream T EARD O WN rt sp:// t v . upb. de/t v / channels/ A RD T EARD O WN rt sp:// cs01. upb. de/t v / channel R T SP− An two r t: OK R T SP− An two r t: OK Abbildung 3.6: Beispiel des Nachrichtenaustausches der Module 28 4 Zusammenfassung und Ausblick In diesem Kapitel werden die Ergebnisse zusammengefasst und die technischen Probleme aufgeführt, die sich während der Implementierung des Prototypen ergeben haben. Außerdem werden Ideen zur Erweiterung der Anwendung kurz vorgestellt. 4.1 Ergebnisse Die prototypische Implementierung überträgt das qualitativ hochwertige Videosignal über ein IP basiertes LAN. IP-Multicast wird verwendet um die Netzwerkressource nicht unnötig hoch zu belasten und den restlichen Datenverkehr im Intranet nicht zu beeinträchtigen. Durch Verwendung von standardisierten Komponenten (RTSP, RTP, Webinterface) steht einer Erweiterbarkeit der Anwendung nichts im Weg. Die Modularisierung der Anwendung fördert die Portierbarkeit einzelner Teile der Anwendung auf verschiedene Betriebsysteme. Durch Verwendung von IP-Multicast und der Wahl eines modularen Aufbaus ist die implementierte Anwendung skalierbar. Es können sowohl eine große Anzahl von Benutzern bedient werden, als auch eine variable Anzahl von gleichzeitig ausgestrahlten Sendern gehandhabt werden. Die Anzahl der Benutzer ist sogar nahezu beliebig groß, wenn alle den gleichen Sender anfordern. Durch das Webinterface kann die Anwendung ins Intranet eingebettet werden, da das Interface auf HTML aufbaut, ist es leicht an das Layout des Intranets anzupassen. Technische Probleme bei der Implementierung Vorhandene Software JMF selbst unterstützt keine Decodierung eines MPEG-2 Streams. Das JMF gibt es in mehreren Ausführungen, als reine Java-API und als sogennante Performance ” Packs“. Diese Packs“ sind jeweils für ein Betriebsystem optimiert. Das Windows ” ” Perfomance Pack“ des JMF gibt die eingehenden Multimediadaten weiter an die Direct Show“-Schnittstelle von Microsofts Direct X“. Mit Hilfe einer MPEG-2 ” ” Decoderkarte unterstützt Direct Show“ die Wiedergabe von MPEG-2 Transport ” ” Streams“. So ist es möglich mit den Beispielprogrammen des JMF einen MPEG-2 ” Transport Stream“ aus einem File wiederzugeben, da hier die Datentyperkennung 29 4 Zusammenfassung und Ausblick von Direct Show“ übernommen wird. Die Typenerkennung des MPEG-2 Multicast” streams im JMF stellte sich aber als Problem dar. Das JMF empfängt die via Multicast verschickten Daten, unterstützt aber den Payload“-Typ des Streams nicht, ” der für MPEG-2 Streams im RTP-Header vorgesehen ist. Aus diesem Grund gibt das Java-Applet das Videosignal nicht wieder. Multicast im Informatik Rechnerbetrieb (IRB) der Universität Paderborn Wie in Abschnitt 2.1.3 beschrieben, ist die Unterstützung von Multicast in IPv4 nicht vorgeschrieben. Die Linux Rechner, auf denen der Prototyp des Cardserver entwickelt wurde, unterstützten zu Beginn der Entwicklung kein Multicast. Um die Unterstützung von Multicast zu ermöglichen, musste hierfür ein neuer Linuxkernel installiert werden. Die Cisco-Router die im IRB zum Einsatz kommen, sowie der Windows 98 Rechner auf dem der Client gestartet wird, unterstützen Multicast. 4.2 Ausblick Die Übertragung der Videoströme mit RTP macht die Anwendung offen für das in Abschnitt 2.3 beschriebene Mixer“-Konzept, d.h. denkbar ist eine Skalierung ” der MPEG-Ströme. Das Signal kann in MPEG-1 umgerechnet werden, welches immer noch eine vergleichbare Qualität mit VHS-Video bietet. Über dieses Konzept könnten auch Rechner als Client fungieren, die über keine MPEG-2 Decoderkarte verfügen oder auf denen ein anderes Betriebsystemen als Windows 98 installiert ist. Durch die Benutzung des RTSP-Protokolls ist es möglich, Multimediaserver, die Videomaterial bereitstellen, in die Anwendung zu integrieren. Auch die Integration eines digitalen Videorekorders, der RTSP unterstützt ist denkbar. Das Management der Cardserver für große LANs könnte verbessert werden. Wenn in solchen Netzen die Cardserver topologisch an verschiedenen Stellen aufgestellt werden, macht es Sinn die Wahl des Senders, dessen codiertes Signal ein Cardserver versendet und die Wahl der TTL, mit der er sendet, flexibler zu gestalten. Zur Zeit sendet ein Cardserver einen Stream eines Senders solange aus, bis kein Client mehr den Stream empfängt. Wenn aber in einem Netzwerksegment des LANs, in dem die Hosts topologisch nah beieinander liegen, viele Clients einen speziellen Sender empfangen, ist es sinnvoll einen Cardserver aus diesem Netzwerksegment die Videodaten ausstrahlen zu lassen und nicht einen Cardserver in einem entfernten Segment. 30 Literaturverzeichnis [1] JMF Home Page. http://java.sun.com/products/java-media/jmf/index.html. Sun Microsystems, Inc. [2] Linux TV. http://www.linuxtv.org/dvb. [3] omniORB Free High Performance CORBA 2 ORB. http://www.uk.research.att.com/omniORB/. AT&T Laboratories Cambridge. [4] A. Ballardie. Core Based Trees (CBT version 2) Multicast Routing. http://www.ietf.org/rfc/rfc2189.txt, 1997. RFC 2189. [5] Brad Cain, Steve Deering, Bill Fenner, Isidor Kouvelas, and Ajit Thyagarajan. Internet Group Management Protocol, Version 3. http://www.ietf.org/internetdrafts/draft-ietf-idmr-igmp-v3-05.txt, 2000. draft-ietf-idmr-igmp-v3-05.txt. [6] S. Deering. Host Extension for http://www.ietf.org/rfc/rfc1112.txt, 1989. RFC 1112. IP Multicasting. [7] D. Estrin, D. Farinacci, A. Helmy, D. Thaler, S. Deering, M. Handley, V. Jacobson, C. Liu, P. Sharma, and L. Wei. Protocol Independent Multicast-Sparse Mode (PIM-SM): Protocol Specification. http://www.ietf.org/rfc/rfc2362.txt, 1998. RFC 2362. [8] W. Fenner. Internet Group Management Protocol, http://www.ietf.org/rfc/rfc2236.txt, 1997. RFC 2236. Version 2. [9] R. Fielding, J. Gettys, J. Mogul, H. Frystyk, and T. Berners-Lee. Hypertext Transfer Protocol – HTTP/1.1. http://www.ietf.org/rfc/rfc2068.txt, 1997. RFC 2068. [10] Juan-Mariano de Goyeneche. Multicast http://www.linuxdoc.org/, March 1998. over TCP/IP HOWTO. [11] J. Moy. MOSPF: Analysis and Experience. http://www.ietf.org/rfc/rfc1585.txt, 1994. RFC 1585. [12] J. Moy. OSPF Version 2. http://www.ietf.org/rfc/rfc1583.txt, 1994. RFC 1583. 31 Literaturverzeichnis [13] J. Reynolds and J. Postel. Assigned http://www.ietf.org/rfc/rfc1700.txt, 1994. RFC 1700. Numbers. [14] H. Schulzrinne, S. Casner, R. Frederick, and V. Jacobson. RTP: A Transport Protocol for Real-Time Applications. http://www.ietf.org/rfc/rfc1889.txt, 1996. RFC 1889. [15] H. Schulzrinne, A. Rao, and R. Lanphier. Real Time Streaming Protocol (RTSP). http://www.ietf.org/rfc/rfc2326.txt, 1998. RFC 2326. [16] D. Waitzman, C. Partridge, and S. Deering. Distance Vector Multicast Routing Protocol. http://www.ietf.org/rfc/rfc1075.txt, 1988. RFC 1075. [17] L. Wei, et. al. Protocol Independent Multicast Version 2 Dense Mode Specification. http://www.ietf.org, 1999. draft-ietf-pim-v2-dm-03.txt. 32