Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

MPEG-4 Player API - Überblick

Ähnliche Präsentationen


Präsentation zum Thema: "MPEG-4 Player API - Überblick"—  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 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()

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

3 MPEG-4 Player API - Überblick
Klassen

4 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

5 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)

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. 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()

7 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

8 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); }

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

10 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()

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. Media Stream Service ALManager Flex Demux DataChannel DataChannel Media Stream DataChannel

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

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

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

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. Media Stream Service ALManager Flex Demux DataChannel DataChannel Media Stream DataChannel

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

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

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

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

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 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()


Herunterladen ppt "MPEG-4 Player API - Überblick"

Ähnliche Präsentationen


Google-Anzeigen