MPEG-4 Player API - Überblick Inhalt Vorstellung des ISO-Modells für einen MPEG4-Player: Objekte...

22
PEG-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. gende Objekte des ISO-Referenzmodells Hervorhebung von Überschriften und für den IM1 abgeleiteten Objekten. mmlegende 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()

Transcript of MPEG-4 Player API - Überblick Inhalt Vorstellung des ISO-Modells für einen MPEG4-Player: Objekte...

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

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

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

...

Network

Layer

AL Layer

ALManager

DataChannel

Decompression Composition andRendering

Scene Description(BIFS Decoder)

H263Decoder

G723Decoder

JPEGDecoder

BIFSDecoder

MediaObject::Parse()

NodeField ::Parse()

MediaObject::Render()

Presenter

VisualRenderer

AudioRenderer

Elementary streambuffers (EBs)implemented byMediaStream

Composition buffers (CBs)implemented byMediaStream

DMIF

Service

FileService

RemoteService

FlexDemux

MPEG-4 Player API - Überblick

Komponenten eines MPEG-4 Players

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

MediaObject NodeField

StreamConsumer

Application

Executive

PresenterBase

Service

Decoder xxx1Decoder

xxx2Decoder

MediaStream ClockReference

Capabilities

xxx1Service

xxx2Service

DataChannel

FlexDemux

Solid lines mean inheritance (lower class derived from the upper class). Dotted lines mean instantiation (lower class is instantiated by upper class).

ALManager

Presenter

BIFSDecoder

MPEG-4 Player API - Überblick

Klassen

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

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

ErzeugenSteuernLöschen

Status

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

…mpoApp = new OpenGLApplication(hWnd);…mpoExec = new Executive3d(this, mpoApp, hWnd);

MPEG-4 Player API - Überblick

IM1-Implementierung: Application

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

CMmiDoc (CDocument)

CMmiView(CView)

CWinApp

class OpenGLApplication: public Application{ … }

<OpenGLApplication.h>

CMmiView::OnInitialUpdate

CMmiDoc::CreateExecutive()

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

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

ExecutiveSession established

Session is terminated

Non-fatal error

Application(=OpenGLApplication)

OnConnect()

OnFinish()

OnError()

Executive

Executive3dCMmiDoc

OnFinish() OnFinish()

Start()

Error()

ISO: IM1:

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

FlexDemux

MPEG-4 Player API - Überblick

ISO: Executive

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

OnConnect()OnFinish()OnError()

Presenter

ALManagerService

Erzeugen

DataChannel

DataChannel

DataChannel

BIFSDecoder

Decoder

MediaStream

MediaStream

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

MPEG-4 Player API - Überblick

IM1: Executive

class CMmiDoc : public CDocument{

…Executive3d * mpoExec;

}

<mmiDoc.h>

class Executive3d : public Executive{

…}

<Executive3d.h>Player3d (IM1)

class Executive : Application_Sink{

…}

<Executive.h>

Core

void CMmiView::OnInitialUpdate() {

…if (GetDocument()->mpoExec==NULL) {

GetDocument()->CreateExecutive(m_hWnd);}

CDocument

CViewExecutive3d

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

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

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

Serviceestablished

Session isterminated

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

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

DataChannel

DataChannel

…OnXXX() OnXXX()

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

MPEG-4 Player API - Überblick

ISO: ALManagerImplementiert 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.

FlexDemux

ALManagerService

DataChannel

DataChannel

DataChannel

MediaStream

MediaStream

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

MPEG-4 Player API - Überblick

ISO: ALManager – Wichtige Funktionen

Executive

Start()

Stop()

ALManager

Connect()

Service• Local file• Remote-

service• …

OnConnect()

OnFinish()

Serviceestablished

Session isterminated

AttachStream()

RequestChannels ()

DataChannel

DataChannel

Instantiate Open

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

MediaStream

RequestChannels ()

Confirm request

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

MPEG-4 Player API - Überblick

ISO: ALManager – Wichtige Funktionen

ALManager Service

OnChannelOpen()

confirm

preempt

NULL orpointer toDataChannel

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

serviceterminated

delete

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

MPEG-4 Player API - Überblick

ISO: DataChannelImplementiert 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()

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

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.

FlexDemux

ALManagerService

DataChannel

DataChannel

DataChannel

MediaStream

MediaStream

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

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

DecoderMediaStream

Media TStream

MediaObject

PresenterBIFSDecoder Root Scene

ObjectMediaStream

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

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

DecoderMediaStream

Media TStream

MediaObject

PresenterBIFSDecoder Root Scene

ObjectMediaStream

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

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

MediaObject

PresenterRoot SceneObject

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

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.

DecoderMedia TStream

Media TStream

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.

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

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.

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

MPEG-4 Player API - Überblick

Ende

Vielen Dank für Ihre Aufmerksamkeit!

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

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

OnConnect()

CloseDocument(), DeleteContents(),

Finish()

CreateService()

Application (OpenGLApplication)

DeleteService() Disconnect()

ServiceAttach()

~ALManager()