Aufgabe 2 - Media-Streaming: Aufgabenstellung
Innerhalb der zweiten Aufgabe soll die Kommunikationskomponente fuer eine Videokonferenz-Software entwickelt werden. Dabei konzentrieren wir uns auf die
Uebertragung von Videodaten.Rahmenbedingungen
Da uns lediglich die Uebertragung der Daten interessiert, bleibt die Aufnahme von Videobildern und der nachfolgende Kompressionsschritt aussen vor. Daher gehen wir davon aus, dass der zu uebertragendeVideostrom bereits in komprimierter Form verfuegbar ist. Als Kompressionsverfahren kommt H.261 zur Anwendung.
Auf der Empfaengerseite setzen wir das Videokonferenztool vic ein. Dieses empfaengt die Datenpakete und uebernimmt Dekompression und Anzeige der Videodaten.
Kommunikationskomponente und Gesamtsystem
Der Ablauf einer Videouebertragung aus Sicht der Senderseite laesst sich folgendermassen darstellen:
- Aufnahme der Videobilder (capture)
- Kompression der Videobilder (encode)
- Zerlegen der Bilder in Einheiten fuer die Uebertragung (packetize)
- Hinzufuegen von Informationen fuer den Fehlerfall (packetize)
- Versenden der Pakte (send)
Aufgaben der Kommunikationskomponente
Wir beschreiben zunaechst nur die Senderseite der Kommunikationskomponente, da der Empfang der Daten ueber vic abgewickelt werden soll.
Obwohl ein komprimierter Videostrom ein kontinuierlicher Bitstrom ist, betrachten wir das Versenden dieses Stroms als die Uebertragung aufeinanderfolgender Einzelbilder. D.h die Kommunikationskomponente soll so ausgelegt werden, das jeweils ein gesamtes Bild verschickt wird, danach wird das naechste (komprimierte) Bild eingelesen und uebertragen usw. Diese Vorgehensweise waehlen wir aus Gruenden der Vereinfachung. Prinzipiell koennte man sich auch ein Thread-Modell vorstellen, in dem ein Encoder-Thread die komprimierten Daten in einen Puffer schreibt und ein Transmit-Thread sich nach Bedarf bedient.
Das eingelesene Bild wird in Pakete geeigneter Groesse zerlegt. Als Grundlage dazu dient die Struktur des H.261-kodierten Datenstroms. Diese Pakete werden mit zusaetzlichen Informationen versehen, welche eine Dekodierung gewaehrleisten sollen, auch wenn vorhergehende Pakete verlorengegangen sind. Hier kommen das real-time transport protocol (RTP) sowie spezifische Erweiterungen fuer die Uebertragung von H.261-kodierten Daten (RTP payload for H.261 video streams) zum Einsatz.
Aspekte der Implementierung
Die Software wird in Standard-C++ entwickelt.