MPEG-4 Player API - Überblick

Slides:



Advertisements
Ähnliche Präsentationen
Be.as WEB Technologie
Advertisements

programmiert April-Juni 2003 von Knut Riechmann
Powerpoint-Präsentation
der Universität Oldenburg
Präsentation PS: Klasse File von Janko Lange, Thomas Lung, Dennis Förster, Martin Hiller, Björn Schöbel.
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Datenbankanbindung mit ASP Wilhelm-Schickard-Schule Tübingen
Der SmartPump-Server Ein tolles Stück Technik. 2Der SmartPump Server Architektur Kontrollkommunikation RTP-Videostrom Client Server RTSP Pipeline Daten.
Sequenzdiagramm.
10 Streams JavaHS Merseburg WS 05/06 E/A - Ströme (Streams) in Java.
Ausnahmen HS Merseburg (FH) WS 06/07.
Threads Richard Göbel.
Java: Dynamische Datentypen
FH-Hof Servlets Richard Göbel. FH-Hof Konzept Servlets werden auf der Server-Seite durch ein Formular aufgerufen werten die Eingaben aus einem Formular.
Indirekte Adressierung
Dateihandles Um in Perl eine bestimmte Datei zum Lesen, Schreiben oder Anhängen zu öffnen, benötigt man so genannte Dateihandles. Ein Dateihandle ist der.
Ein Beispiel in Java.
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
JAVA RMI.
Technische Universität Ilmenau
Zwischenverteidigung der Diplomarbeit Technische Universität Ilmenau
Packages Vortrag : Cornelia Hardt 23. November 1999.
DVG Dateien. DVG Die Klasse File Die Klasse File stellt die Verbindung zwischen dem File-System des Rechners und dem JAVA-Programm her.
DVG Klassen und Objekte
Wir müssen also überlegen: Implementierung der Knoten, Implementierung der Kanten, daraus: Implementierung des Graphen insgesamt. Annahme: die Knoteninhalte.
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
Informatikunterricht mit Java
FH-Hof 1 XML-Parser Richard Göbel. FH-Hof 2 XML-Parser- DOM Object Tree Parser Objekt der Klasse 'DocumentBuilderFactory' mit 'newInstance()' erzeugen.
Einfach verkettete Listen (OOP)
von Julia Pfander und Katja Holzapfel E 12/2
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 4 Folie 2 Message Passing mittels Sockets (1) s.a.
Java ohne Kara. Java ohne Kara Ab jetzt: Java ohne Kara Ziel: Erfahrungen sammeln mit ersten Java Programmen.
Learning By Doing TCP/IP Netzwerke mit TCP/IP Das Internet verwendet weitgehend das rund 30-jährige TCP/IP-Protokoll (TCP: Transmission Control Protocol,
Einführung in die Programmierung
PSI - Überblick und Szenarien
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Von der Planung bis zum Hauptmenü Seminar: Softwaretechnologie II Dozent: Prof. Manfred Thaller Referent: Jan Bigalke.
Netzwerkprogrammierung
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
CGI (Common Gateway Interface)
Präsentation von Lukas Sulzer
Netzwerke.
Torque in Turbine Team 4 Josef Bohninger Thomas Lindenhofer
Voyager Eigenschaften/Vorzüge Universalität: –ROI-Modelle: CORBA, RMI, DCOM –verschiedene Namens-, Verzeichnisdienste Nachrichtentypen: synchron, oneway,
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
3. Beschreibung von Abläufen durch Algorithmen 3.4 Zufall
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Internet-Grundtechnologien. Client / Server Client („Kunde“): fordert Information / Datei an im Internet: fordert Internetseite an, z.B.
Java-Applets und URLs APP Philip Graf, Andreas Bößl.
A Workshop About this chapter General description Units Time Schedule
NE2000: Hardware und Design eines Treibers 1 AKBPII: Abschlusspräsentation NE2000: Hardware und Design eines prototypischen Treibers bearbeitet.
Einführung in die OOP in Java
1 Servlets Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Netzwerke - Protokolle
Netzwerk - Programmierung
Netzwerk - Programmierung
1. Die rekursive Datenstruktur Liste 1.5 Das Entwurfsmuster Kompositum
Implementieren von Klassen
Felder in der Informatik
1. Die rekursive Datenstruktur Liste 1
 Präsentation transkript:

MPEG-4 Player API - Überblick Inhalt Vorstellung des ISO-Modells für einen MPEG4-Player: Objekte Wichtigen Funktionen und Nachrichten Schwerpunkt Öffnen und Schließen einer Datei sowie Datentransferwege. Erwähnung von Besonderheiten der Implementierung des IM1. Textlegende Blau Objekte des ISO-Referenzmodells Fett Hervorhebung von Überschriften und für den IM1 abgeleiteten Objekten. Diagrammlegende Hervorhebung des erläuterten ISO-Referenzobjekts. Erzeugt… Ruft Funktion auf… Schickt Daten an… Benachrichtigung über ein Ereignis/eigenen Status Objekt enthält die Funktionen/Methoden: F1(), F2(), … „Objektname“ „Objektname“ F1() F2()

MPEG-4 Player API - Überblick Komponenten eines MPEG-4 Players

MPEG-4 Player API - Überblick Klassen

MPEG-4 Player API - Überblick ISO: Application Basisklasse für das Objekt, welches beim Aufruf der Applikation instanziiert wird. Aufgaben/Ablauf Ein Ausgabefenster erzeugen Executive instaziieren Name der Quelle ermitteln. Entweder eine lokale Datei oder eine IP für eine „remote session“ Executive-Sitzung starten Steuerungsnachrichten an Executive weitergeben (Paint, Stop,…) Sitzung beenden Executive löschen Beenden Application Erzeugen Steuern Löschen Status Executive

MPEG-4 Player API - Überblick IM1-Implementierung: Application <Application.h> Die Klassen CMmiDoc und OpenGLApplication teilen sich die Funktionalität von Application. Die Klasse CMmiDoc erfüllt weitestgehend die eben genannten Funktionen von Application (Fenster, Executive instanziieren, etc.). Deren Basisklasse CDocument beschreibt eine Dokumentenklasse für ein MDI-Fenster. Dadurch ist der IM1 dafür angelegt mehrere MP4-Dateien parallel zu öffnen. OpenGLApplication ist direkt von Application abgeleitet. Die Klasse kümmert sich um die Behandlung der OnXxx()-Nachrichten. OnConnect() z.B. initialisiert unter anderem OpenGL für das Darstellungsfenster. class Application { … } <OpenGLApplication.h> class OpenGLApplication: public Application { … } CWinApp CMmiView::OnInitialUpdate CMmiDoc::CreateExecutive() CMmiDoc (CDocument) … mpoApp = new OpenGLApplication(hWnd); mpoExec = new Executive3d(this, mpoApp, hWnd); CMmiView (CView)

MPEG-4 Player API - Überblick ISO/IM1: Application – Wichtige Mitteilungen void OnConnect (CONNECTION_RESULT result = CONNECTION_SUCCESS) Aufgerufen von Executive, wenn eine Sitzung erfolgreich eingerichtet oder fehlgeschlagen ist. void OnFinish (SERVICE_TERMINATION reason = END_OF_SERVICE) Aufgerufen von Executive, wenn eine Sitzung beendet wird, das heißt, wenn das Ende der Datei erreicht ist oder der Server das Ende der Sitzung anzeigt. void OnError (NON_FATAL_ERROR error) Aufgerufen von Executive wenn ein unkritischer Fehler auftritt, das heißt, wenn der Fehler nicht das erstellen der Hauptsitzung und Konstruieren der anfänglichen Szene verhindert. ISO: IM1: Application Executive Application (=OpenGLApplication) Executive Session established OnConnect() OnConnect() Start() Session is terminated OnFinish() OnFinish() Non-fatal error OnError() OnError() Error() CMmiDoc Executive3d OnFinish() OnFinish()

MPEG-4 Player API - Überblick ISO: Executive Dieses Objekt kontrolliert den Datenfluss einer Sitzung. Es läuft in einem eigenen Thread. Ablauf Presenter instanziieren Den primären ALManager (Adaption Layer) und den passenden Service instanziieren Den ersten OD (Object Descriptor) analysieren der beim Verbinden mit einem Service ankommt BIFSDecoder(s) instanziieren Die DataChannels, von BIFS und „OD stream“, über MediaStreams mit BIFSDecoder verbinden. Wenn nötig weitere ALManager erzeugen für Streams die eine eigene URL haben. Steuerungsnachrichten an Presenter weitergeben (Paint, user-events,…) Sitzung beenden Application benachrichtigen wenn Sitzung beendet (OnFinish()) Erzeugen Application Executive OnConnect() OnFinish() OnError() Media Stream Service ALManager BIFSDecoder Presenter Flex Demux DataChannel DataChannel Media Stream Decoder DataChannel

MPEG-4 Player API - Überblick IM1: Executive <Executive.h> Im Projekt Core wird eine Klasse Executive deklariert. Der IM1 leitet eine eigene Klasse Executive3d davon ab und deklariert diese als Element von CMmiDoc. Executive3d wird von CMmiView erzeugt wenn diese Klasse initialisiert wird. class Executive : Application_Sink { … } Core <mmiDoc.h> class CMmiDoc : public CDocument { … Executive3d * mpoExec; } CDocument Player3d (IM1) <Executive3d.h> CView new Executive3d class Executive3d : public Executive { … } void CMmiView::OnInitialUpdate() { … if (GetDocument()->mpoExec==NULL) { GetDocument()->CreateExecutive(m_hWnd); }

MPEG-4 Player API - Überblick ISO: Executive – Wichtige Funktionen Application Executive ALManager Service Local file Remote-service … Start() Connect() Stop() Service established OnConnect() Session is terminated OnFinish() void Start (LPCSTR szURL) Von Application aufgerufen um eine Sitzung zu starten. Erzeugt einen ALManager und ruft dessen Connect() auf. Der ALManager erzeugt einen passenden Service. Diese Funktion arbeitet asynchron. Erfolg oder Misserfolg werden über OnConnect() an Application mitgeteilt. void Stop () Initiiert das Ende der Sitzung (asynchron). Nur so wird voller logischer Stop und „Cleanup“ erreicht. Das endgültige Sitzungsende wird über OnFinish() an Application mitgeteilt. void OnConnect (ALManager *pAL, CONNECTION_RESULT result, const ZString &initOD) Aufgerufen von ALManager, wenn ein Service eingerichtet wurde oder fehlgeschlagen ist. Bei einem Fehlschlag wird Executive gelöscht. void OnFinish (ALManager *pAL, SESSION_TERMINATION reason = END_OF_SESSION) Aufgerufen von ALManager, wenn die zugehörige Sitzung beendet wird/ist, das heißt, wenn das Ende der lokalen Datei erreicht ist oder der Server das Ende der Sitzung anzeigt. Wenn die Hauptsitzung beendet ist wartet die Funktion bis alle Streams zuende gespielt sind und ruft Application::OnFinish() auf.

MPEG-4 Player API - Überblick ISO: Service Diese Klasse implementiert die DMIF-Schicht (Delivery Multimedia Integration Framework). Die Applikation öffnet über die Dienste dieser Schicht ein odere mehrere Datenkanäle, durch die dann elementary-streams übertragen werden. Von der Basisklasse Service werden spezifische Klassen abgeleitet die spezielle Protokolle implementieren (z.B. das File-Protokoll für lokale Dateien, usw.). Ablauf ALManager::Connect() erzeugt ein passendes Service-Objekt in Abhängigkeit vom benötigten Protokoll (Im Dateinamen enthalten) und ruft dann Service::Connect() auf. Service::Connect() erzeugt ein oder mehrere Threads und initiiert die Bereitstellung der Dienste durch diese Threads. Datenkanäle werden angefordert mit Service::OpenChannels(). Die Threads initialisieren die Dienste, erzeugen die Datenkanäle, empfangen Daten und beenden schließlich die Dienste wieder ordnungsgemäß. Vorfälle beim Lesen aus Dateien/dem Netzwerk werden der Basisklasse oder dem ALManager über OnXXX()-Funktionen mitgeteilt. Application ALManager Service Connect() Connect() Executive DataChannel File-service DataChannel Remote-service DataChannel … … OnXXX() OnXXX()

MPEG-4 Player API - Überblick ISO: ALManager Implementiert die “Anpassungs- oder Zwischenschicht” (adaption-layer) des Players. Der ALManager empfängt über Services Datenpakete aus elementary-streams, interpretiert die Packet-Header und gibt diese über MediaStreams an die passenden Objekte weiter. Media Stream Service ALManager Flex Demux DataChannel DataChannel Media Stream DataChannel

MPEG-4 Player API - Überblick ISO: ALManager – Wichtige Funktionen Executive ALManager Service Local file Remote-service … Start() Connect() Stop() AttachStream() Service established OnConnect() RequestChannels () RequestChannels () Session is terminated OnFinish() Confirm request Instantiate Open DataChannel MediaStream DataChannel MediaStream void AttachStream (int nESid, MediaStream *pStream, ALConfigDescriptor *pConfigParams, … ) Fordert das Anhängen von einem Stream an. Erzeugt ein DataChannel-Objekt und verbindet es mit dem angegebenen MediaStream. void RequestChannels () Fordert das Öffnen aller Kanäle für Streams die angehängt, aber noch nicht geöffnet worden sind. Die Funktion ruft Service :: RequestChannels() mit einer Liste von ES-IDs auf. Die Trennung von AttachStream und RequestChannels erfolgt für: Eine bessere Synchronisierung – es werden zuerst alle ODs interpretiert und die Decoder initialisiert. Ist die Szene fertig konstruiert, wird die Bereitschaft signalisiert mit dem Datenempfang zu beginnen. Einige Server entscheiden dynamisch, bei Anforderung von Streams, wie diese in ein oder mehrere FlexMux-Kanäle zu gruppieren sind.

MPEG-4 Player API - Überblick ISO: ALManager – Wichtige Funktionen Executive ALManager Service confirm OnChannelOpen() preempt DataChannel NULL or pointer to DataChannel OnFinish() service terminated delete DataChannel *OnChannelOpen (int nESid, int nTag) Aufgerufen von Service wenn eine Kanal eingerichtet ist. Entweder nachdem ein solcher Kanal angefordert wurde oder der Server bietet von sich aus einen Kanal an. ALManager gibt entweder einen Zeiger auf ein DataChannel-Objekt zurück oder NULL, um anzuzeigen, dass die Applikation an diesem Stream nicht interessiert ist. void OnFinish (SERVICE_TERMINATION reason = END_OF_SERVICE) Aufgerufen von Service wenn der Service beendet ist, das heißt das Dateiende erreicht ist oder der Server das Ende. Die Information wird an Executive weitergegeben. Executive benachrichtigt Application und löscht den Service.

MPEG-4 Player API - Überblick ISO: DataChannel Implementiert die “Anpassungs- oder Zwischenschicht” (adaption-layer) des Players, d.h. empfängt über Services Datenpakete aus elementary-streams, interpretiert die AU-Header und gibt Header und Daten auf MediaStreams aus. Das Einrichten von Datenkanälen erfolgt in 4 Schritten Die Applikation erhält Informationen über einen elementary-stream in einem Object Descriptor (OD). Sie ruft ALManager :: AttachStream() auf. Die Funktionen erzeugt ein passendes DataChannel-Objekt, verbindet es mit einem MediaStream. Wenn die Applikation mit dem Datenempfang beginnen will, ruft sie ALManager :: RequestChannels() auf (siehe oben). Um das Öffnen eines Kanals zu bestätigen ruft Service die Funktion ALManager :: OnChannelOpen() auf und erhält einen Zeiger auf ein DataChannel-Objekt. Wenn die Applikation mit der Datenübertragung beginnen will, ruft sie die Funktion DataChannel::ChannelReady() auf. ALManager AttachStream() RequestChannels() OnChannelOpen() MediaStream DataChannel ChannelReady()

MPEG-4 Player API - Überblick ISO: FlexDemux Das Objekt implementiert die FlexMux-Schicht. Es empfängt FlexMux-Pakete, “demultiplext” sie in elementary-stream packets und leitet Sie an entsprechende DataChannel-Objekte weiter. Media Stream Service ALManager Flex Demux DataChannel DataChannel Media Stream DataChannel

MPEG-4 Player API - Überblick ISO: BIFSDecoder Das Objekt läuft in einem eigenen Thread und interpretiert entweder BIFS oder ODs. Der BIFSDecoder konstruiert die Szene (plattformunabhängig), die dann vom Presenter dargestellt wird (plattformabhängig). Presenter Media Stream Root Scene Object BIFSDecoder Media Object Media Stream Media T Stream Decoder

MPEG-4 Player API - Überblick ISO: Decoder Basisklasse für alle speziellen Dekoder. Jeder Dekoder läuft in seinem eigenen Thread. Er ist mit zwei MediaStreams verbunden, einem Eingabe-Stream und einem Ausgabe-Stream. Die Basisklasse empfängt coded units aus dem Eingabe-Stream (EBs, Elementary stream buffers) und sendet deise an den Ausgabe-Stream (PBs). Presenter Media Stream Root Scene Object BIFSDecoder Media Object Media Stream Media T Stream Decoder

MPEG-4 Player API - Überblick ISO: PresenterBase Plattformunabhängige Basisklasse für die plattformabhängige Presenter-Klasse. Läuft in einem eigenen Thread und kontrolliert die Präsentation der Szene. Ablauf Executive instanziiert einen Presenter Wenn der BIFSDecoder die Szene fertig konstruiert hat, wird Presenter::Init() aufgerufen. Diese Funktion muß PresenterBase::Init() aufrufen, diese startet den Presenter-Thread. Der Presenter-Thread läuft in einer Schleife die alle x Millisekunden die Funktion Render() der Szene aufruft (scene-root). Jedes MediaObject rendert sich selbst und seine Unterknoten Am Ende wird Presenter::Terminate() aufgerufen. Dies beinhaltet Aufräumarbeiten wie das löschen des Fensters und das Aufrufen der Funktion von PresenterBase::Terminate(). Diese beendet den Thread. Nach Terminate(), löscht Executive die Szene!! Media Object Presenter Root Scene

MPEG-4 Player API - Überblick ISO: ClockReference Media streams transportieren Daten die einen “Zeitstempel” tragen können. Diese Zeitstempel werden für jeden Stream mit einem eigenen Zeitgeber abgeglichen. Die Implementierung liefert die Klasse ClockReference. MediaStreams die zusammen den Weg eines Streams bilden bekommen den gleichen Zeitgeber zugewiesen. ClockReference Media T Stream Media T Stream Decoder ISO: MediaStream Diese Objekt kontrolliert die Pufferung und die Weiterleitung von Datenströmen. MediaStream beinhaltet einen Zwischenspeicher, der nach dem FIFO-Prinzip Daten speichert und weiterleitet. Das Objekt stellt auch Dienste für die zeitliche Kontrolle des Datenstroms zur Verfügung. Gespeicherte Daten können einen Zeitstempel tragen, und es werden nur “gereife” Daten weitergeleitet.

MPEG-4 Player API - Überblick ISO: Capabilities Diese Objekt liefert Informationen über die Leistungen eines Decoder, eines Presenter oder eines bestimmten Knotens. Wird verwendet um einen Decoder so einzurichten, daß er mit dem Leistungsumfang des Presenter kompatibel ist.

MPEG-4 Player API - Überblick Ende Vielen Dank für Ihre Aufmerksamkeit!

CloseDocument(), DeleteContents(), Finish() MPEG-4 Player API - Überblick IM1-Implementierung: Executive – Wichtige Funktionen void Start (LPCSTR szURL) Von CMmiDoc aufgerufen um eine Sitzung zu starten. void OnConnect (ALManager *pAL, CONNECTION_RESULT result, const ZString &initOD) Nicht implementiert. ServiceAttach() könnte als Ersatz angesehen werden. void OnFinish (ALManager *pAL, SESSION_TERMINATION reason = END_OF_SESSION) ALManager zeigt an, dass Datei zuende oder Serververbindung beendet. Implementiert aber nicht genutzt. ~ALManager ruft ALManager::Disconnect auf. Nur so wird dieser aus Liste bei Executive gelöscht. void Stop () Löscht den Presenter. Schließt alle Streams. Kein direkter Zugriff auf ALManager. (?) Application (OpenGLApplication) Executive (Executive3d) ALManager Service OnConnect() Start() Local file Remote-service … CreateService() Connect() CMmiDoc Failure /success URL/ Filename OnConnect() Restart() ServiceAttach() URL bestimmt das Protokoll, d.h. den Service der verwendet wird. Form: Protocol: address CloseDocument(), DeleteContents(), Finish() Stop() ~ALManager() DeleteService() Disconnect() OnFinish() OnFinish()