Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

MPEG-4 Player API - Überblick Inhalt Vorstellung des ISO-Modells für einen MPEG4-Player: Objekte Wichtigen Funktionen und Nachrichten Schwerpunkt Öffnen.

Ähnliche Präsentationen


Präsentation zum Thema: "MPEG-4 Player API - Überblick Inhalt Vorstellung des ISO-Modells für einen MPEG4-Player: Objekte Wichtigen Funktionen und Nachrichten Schwerpunkt Öffnen."—  Präsentation transkript:

1 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 BlauObjekte des ISO-Referenzmodells FettHervorhebung 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 F1() F2()

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

3 MPEG-4 Player API - Überblick Klassen

4 MPEG-4 Player API - Überblick Application 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 Executive Erzeugen Steuern Löschen Status

5 … mpoApp = new OpenGLApplication(hWnd); … mpoExec = new Executive3d(this, mpoApp, hWnd); MPEG-4 Player API - Überblick IM1-Implementierung: Application class Application { … } 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. CMmiDoc (CDocument) CMmiView (CView) CWinApp class OpenGLApplication: public Application { … } CMmiView::OnInitialUpdate CMmiDoc::CreateExecutive()

6 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. Application OnConnect() OnFinish() OnError() Executive Session established Session is terminated Non-fatal error Application (=OpenGLApplication) OnConnect() OnFinish() OnError() Executive Executive3d CMmiDoc OnFinish() Start() Error() ISO:IM1:

7 Flex Demux MPEG-4 Player API - Überblick ISO: Executive ApplicationExecutive 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()) OnConnect() OnFinish() OnError() Presenter ALManagerService Erzeugen DataChannel BIFSDecoder Decoder Media Stream Media Stream

8 MPEG-4 Player API - Überblick IM1: Executive class CMmiDoc : public CDocument { … Executive3d * mpoExec; } class Executive3d : public Executive { … } Player3d (IM1) class Executive : Application_Sink { … } Core void CMmiView::OnInitialUpdate() { … if (GetDocument()->mpoExec==NULL) { GetDocument()->CreateExecutive(m_hWnd); } CDocument CView Executive3d 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. new

9 MPEG-4 Player API - Überblick ISO: Executive – Wichtige Funktionen 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. Application Executive Start() Stop() ALManager Connect() Service Local file Remote- service … OnConnect() OnFinish() Service established Session is terminated

10 Remote-service … File-service 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 Executive ALManager Connect() Service Connect() DataChannel … OnXXX()

11 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. Flex Demux ALManagerService DataChannel Media Stream Media Stream

12 MPEG-4 Player API - Überblick ISO: ALManager – Wichtige Funktionen Executive Start() Stop() ALManager Connect() Service Local file Remote- service … OnConnect() OnFinish() Service established Session is terminated AttachStream() RequestChannels () DataChannel InstantiateOpen 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. MediaStream RequestChannels () Confirm request

13 MPEG-4 Player API - Überblick ISO: ALManager – Wichtige Funktionen ALManager Service OnChannelOpen() confirm preempt NULL or pointer to DataChannel 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. DataChannel OnFinish() Executive service terminated delete

14 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 DataChannel RequestChannels() AttachStream() MediaStream ChannelReady() OnChannelOpen()

15 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. Flex Demux ALManagerService DataChannel Media Stream Media Stream

16 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). Decoder Media Stream Media T Stream Media Object Presenter BIFSDecoder Root Scene Object Media Stream

17 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). Decoder Media Stream Media T Stream Media Object Presenter BIFSDecoder Root Scene Object Media Stream

18 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 Object

19 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. Decoder Media T Stream Media T Stream ClockReference 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.

20 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.

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

22 CMmiDoc Restart() Executive (Executive3d) Start() URL/ Filename 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. (?) ALManager Connect() Service URL bestimmt das Protokoll, d.h. den Service der verwendet wird. Form: Protocol: address OnConnect() Failure /success Local file Remote- service … Stop() OnFinish() OnConnect() CloseDocument(), DeleteContents(), Finish() CreateService() Application (OpenGLApplication) DeleteService() Disconnect() ServiceAttach() ~ALManager()


Herunterladen ppt "MPEG-4 Player API - Überblick Inhalt Vorstellung des ISO-Modells für einen MPEG4-Player: Objekte Wichtigen Funktionen und Nachrichten Schwerpunkt Öffnen."

Ähnliche Präsentationen


Google-Anzeigen