La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

HbbTvBrowserPlugin U ne utilisation avancée de NPAPI Stanislas Selle 8 Novembre 2011.

Présentations similaires


Présentation au sujet: "HbbTvBrowserPlugin U ne utilisation avancée de NPAPI Stanislas Selle 8 Novembre 2011."— Transcription de la présentation:

1 HbbTvBrowserPlugin U ne utilisation avancée de NPAPI Stanislas Selle 8 Novembre 2011

2 Sommaire Contexte OpenHbb : le hbbtvplayer Rappel des principes de NPAPI NPObject, NPClass Architecture de HbbTVBrowserPlugin NPVariant Events et callbacks Conclusions 2HbbTVBrowser plugin et NPAPI Stanislas Selle - TSI - Telecom Paristech - 2011

3 Contexte OpenHbb : le hbbtvplayer Objectif : créer un terminal Hbbtv sur PC Emuler une télévision recevant un signal Hbbtv Avec interaction par une télécommande virtuelle Interprétation du Mpeg-TS Affichage du flux Vidéo Affichage et interaction des applications hbbtv HbbtvTerminal et HbbtvBrowserPlugin 3HbbTVBrowser plugin et NPAPI Stanislas Selle - TSI - Telecom Paristech - 2011

4 Rappel des principes de NPAPI Un plugin est un élément logiciel venant ajouter des capacités au navigateur. Sous forme de librairie dynamique NPAPI = Netscape Plugin Application Programming Interface npfunctions.h, npapi.h, … fournit avec XulRunner 4HbbTVBrowser plugin et NPAPI Stanislas Selle - TSI - Telecom Paristech - 2011

5 Rappel des principes de NPAPI Détection par le navigateur répertoire spécifique, fichier de configuration ou en ligne de commande Api pour accés aux données spécifiques du plugin et du MIMEtype pris en charge. Lorsque le navigateur rencontre un objet de type inconnu, il parcourt ses plugins pour trouver celui qui pourrait supporter cet objet. 5HbbTVBrowser plugin et NPAPI Stanislas Selle - TSI - Telecom Paristech - 2011

6 Rappel des principes de NPAPI Les fonctions d’initialisation : NPError NP_Initialize(NPNetscapeFuncs*, NPPluginFuncs*) -Pour le chargement du plugin dans le browser. NPError NP_Shutdown() -Lors de la désactivation du plugin. NPError NP_GetValue(void *instance, NPPVariable var, void* value) -Récupération de variable prédefinies et du contexte. char* NP_GetPluginVersion() -Récupération du numéro de version. char* NP_GetMIMEDescription() -Chaîne de description MIMEtype supporté par le plugin (simple ou multiple) 6HbbTVBrowser plugin et NPAPI Stanislas Selle - TSI - Telecom Paristech - 2011

7 Rappel des principes de NPAPI Les fonctions de plugins: NPPluginFuncs Struct regroupant une liste de pointeur sur fonction a initialisé par le plugin. Si le pointeur est valide, ces fonctions seront appelé par le navigateur : -NPP_New(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc, char *argn[], char *argv[], NPSavedData *saved); -NPP_Destroy(NPP instance, NPSavedData **save); -NPP_SetWindow(NPP instance, NPWindow *window); -NPP_HandleEvent(NPP instance, void* Event); -NPP_GetValue(NPP instance, NPPVariable variable, void *value); -NPP_SetValue(NPP instance, NPNVariable variable, void *value); 7HbbTVBrowser plugin et NPAPI Stanislas Selle - TSI - Telecom Paristech - 2011

8 Rappel des principes de NPAPI Les fonctions de browser: NPNetscapeFuncs Struct regroupant une liste de pointeur sur fonction a initialisé par le browser. Si le pointeur est valide, ces fonctions peuvent être appelé par le plugin : -NPN_GetValue -NPN_SetValue -NPN_MemAlloc -NPN_MemFree -Fonctions de NPObject -Fonctions de Identifier -Fonctions de NPVariant 8HbbTVBrowser plugin et NPAPI Stanislas Selle - TSI - Telecom Paristech - 2011

9 NPObject et NPClass NPObject : Struct NPObject { NPClass *_class; uint32_t referenceCount; /* * Additional space may be allocated here by types of NPObjects */ } NPClass : struct NPClass { uint32_t structVersion; NPAllocateFunctionPtr allocate; NPDeallocateFunctionPtr deallocate; NPInvalidateFunctionPtr invalidate; NPHasMethodFunctionPtr hasMethod; NPInvokeFunctionPtr invoke; NPInvokeDefaultFunctionPtrinvokeDefault; NPHasPropertyFunctionPtrhasProperty; NPGetPropertyFunctionPtrgetProperty; NPSetPropertyFunctionPtr setProperty; NPRemovePropertyFunctionPtr removeProperty; NPEnumerationFunctionPtr enumerate; NPConstructFunctionPtr construct; }; 9HbbTVBrowser plugin et NPAPI Stanislas Selle - TSI - Telecom Paristech - 2011

10 Architecture de HbbTVBrowserPlugin L’entrée : Hbbtvbrowserplugin.c (.h) –Les mime type, les fonctions d’initialisation Les extensions à chaque objet : oipfapplicationmanager.c, oipfconfiguration.c, videobroadcast.c … Les extensions de classes et d’objet : application.c, keyset.c, … L’api pour callback depuis le terminal :hbbtvbrowserpluginapi.c 10HbbTVBrowser plugin et NPAPI Stanislas Selle - TSI - Telecom Paristech - 2011

11 Architecture de HbbTVBrowserPlugin 11HbbTVBrowser plugin et NPAPI Stanislas Selle - TSI - Telecom Paristech - 2011 Les requêtes sur le plugin ont lieu : Lors du chargement Lors d’un appel sur une propriété videoelt.fullScreen Lors d’un appel d’une méthode videoelt.setFullScreen(false); Lors de la fin de session.

12 Architecture de HbbTVBrowserPlugin 12HbbTVBrowser plugin et NPAPI Stanislas Selle - TSI - Telecom Paristech - 2011 Chargement d’une page avec des objets hbbtv Le navigateur recherche le plugin avec mimetype associé Appel de NPP_New (pluginType, npp, mode, argc, agrn, argv, saved) -Création de NPObject (createobject), et association des fonctions jointes –Appel Allocate avec un NpClass défini if (strcmp(argv[i], "application/oipfApplicationManager") == 0) { obj = sBrowserFuncs->createobject(instance, fillOAMpclass()); } -Sauvegarde dans le pdata de l’instance d’un objet HbbTVPluginData NPObject* obj; char* type; NPWindow* window; NPP npp;

13 Architecture de HbbTVBrowserPlugin 13HbbTVBrowser plugin et NPAPI Stanislas Selle - TSI - Telecom Paristech - 2011 NPClass stOAMclass; NPClass* pOAMclass = NULL; NPClass* fillOAMpclass(void) { TRACEINFO; if (pOAMclass == NULL) { stOAMclass.allocate = OAM_Allocate; stOAMclass.deallocate = OAM_Deallocate; stOAMclass.invalidate = OAM_Invalidate; stOAMclass.hasMethod = OAM_HasMethod; stOAMclass.invoke = OAM_Invoke; stOAMclass.invokeDefault = OAM_InvokeDefault; stOAMclass.hasProperty = OAM_HasProperty; stOAMclass.getProperty = OAM_GetProperty; stOAMclass.setProperty = OAM_SetProperty; stOAMclass.removeProperty = OAM_RemoveProperty; stOAMclass.enumerate = OAM_Enumerate; pOAMclass = &stOAMclass; } return pOAMclass; }

14 Architecture de HbbTVBrowserPlugin 14HbbTVBrowser plugin et NPAPI Stanislas Selle - TSI - Telecom Paristech - 2011 typedef struct { NPObject header; NPP npp; NPObject* ownerApplication; } NPObj_OAM; NPObject * OAM_Allocate(NPP npp, NPClass *theClass) { if (!v_bOAMIdentifiersInitialized) { v_bOAMIdentifiersInitialized = true; OAMinitializeIdentifiers(); } NPObj_OAM* newapplicationmanager = MEMALLOC(sizeof(NPObj_OAM)); newapplicationmanager->npp = npp; newapplicationmanager->ownerApplication = sBrowserFuncs->createobject(npp, fillAPPLICATIONpclass()); return (NPObject *)newapplicationmanager; }

15 Architecture de HbbTVBrowserPlugin 15HbbTVBrowser plugin et NPAPI Stanislas Selle - TSI - Telecom Paristech - 2011 #define kAPPLICATION_ID_PROPERTY_VISIBLE 0 #define kAPPLICATION_ID_PROPERTY_PRIVATEDATA 1 #define kAPPLICATION_NUM_PROPERTY_IDENTIFIERS 2 #define kAPPLICATION_ID_METHOD_CREATEAPPLICATION 0 #define kAPPLICATION_ID_METHOD_DESTROYAPPLICATION 1 #define kAPPLICATION_ID_METHOD_SHOW 2 #define kAPPLICATION_ID_METHOD_HIDE 3 #define kAPPLICATION_NUM_METHOD_IDENTIFIERS 4 static bool v_bAPPLICATIONIdentifiersInitialized = false; static NPIdentifier v_APPLICATIONPropertyIdentifiers[kAPPLICATION_NUM_PROPERTY_IDENTIFIERS]; static const NPUTF8 * v_APPLICATIONPropertyNames[kAPPLICATION_NUM_PROPERTY_IDENTIFIERS] = { "visible", "privateData" }; static NPIdentifier v_APPLICATIONMethodIdentifiers[kAPPLICATION_NUM_METHOD_IDENTIFIERS]; static const NPUTF8 * v_APPLICATIONMethodNames[kAPPLICATION_NUM_METHOD_IDENTIFIERS] = { "createApplication", "destroyApplication", "show", "hide" }; static void APPLICATIONinitializeIdentifiers(void) { sBrowserFuncs->getstringidentifiers( v_APPLICATIONPropertyNames, kAPPLICATION_NUM_PROPERTY_IDENTIFIERS, v_APPLICATIONPropertyIdentifiers ); sBrowserFuncs->getstringidentifiers( v_APPLICATIONMethodNames, kAPPLICATION_NUM_METHOD_IDENTIFIERS, v_APPLICATIONMethodIdentifiers ); }

16 Architecture de HbbTVBrowserPlugin 16HbbTVBrowser plugin et NPAPI Stanislas Selle - TSI - Telecom Paristech - 2011 Lors d’un appel d’une propriété : Hasproperty GetProperty / SetProperty typedef struct { NPObject header; NPP npp; double* value; double* maximumValue; } NPObj_KeySet; if (name == v_KEYSETPropertyIdentifiers[kKEYSET_ID_PROPERTY_VALUE]) { double* value = keysetobj->value; DOUBLE_TO_NPVARIANT(*value, *result); fctresult = true; }

17 Architecture de HbbTVBrowserPlugin 17HbbTVBrowser plugin et NPAPI Stanislas Selle - TSI - Telecom Paristech - 2011 Lors d’un appel d’une méthode : Hasmethod Invoke /** implementation **/ void OAM_ObjectMain_Invoke_GetOwnerApplication(NPObj_OAM* obj,const NPVariant* args, uint32_t argCount, NPVariant* result) { TRACEINFO; sBrowserFuncs->retainobject(obj->ownerApplication); OBJECT_TO_NPVARIANT((NPObject*)(obj->ownerApplication), *result); }

18 Architecture de HbbTVBrowserPlugin 18HbbTVBrowser plugin et NPAPI Stanislas Selle - TSI - Telecom Paristech - 2011 Exemple : … window.onload = function() { DebugConsole.init(); menuinit(); var appman = document.getElementById("oipfAppMan"); var app = appman.getOwnerApplication(document); app.show(); var mask = app.privateData.keyset.RED + app.privateData.keyset.GREEN + app.privateData.keyset.YELLOW + app.privateData.keyset.BLUE + app.privateData.keyset.NAVIGATION; app.privateData.keyset.setValue(mask); DebugConsole.log("app.privateData.keyset.value : " + app.privateData.keyset.value ); }

19 Architecture de HbbTVBrowserPlugin 19HbbTVBrowser plugin et NPAPI Stanislas Selle - TSI - Telecom Paristech - 2011 Fin de session : -Destroy plugin -Deallocate de chaque objet. void OAM_Deallocate(NPObject* obj) { TRACEINFO; NPObj_OAM* oamobj = (NPObj_OAM*)obj; sBrowserFuncs->releaseobject(oamobj->ownerApplication); MEMFREE(oamobj); return; }

20 Architecture de HbbTVBrowserPlugin 20HbbTVBrowser plugin et NPAPI Stanislas Selle - TSI - Telecom Paristech - 2011 Autres functions utiles : NPP_HandleEvent NPP_SetWindow Variable utiles coté plugin : (NP_GetValue) NPPVpluginNameString NPPVpluginDescriptionString NPPVpluginWindowBool NPPVpluginTransparentBool Variable utiles coté browser : (NPN_GetValue) NPNVjavascriptEnabledBool NPNVSupportsWindowless

21 NPVariant typedef struct _NPVariant { NPVariantType type; union { bool boolValue; int32_t intValue; double_t doubleValue; NPString stringValue; NPObject *objectValue; } value; } NPVariant; NPVARIANT_TO_BOOLEAN()NPVARIANT_TO_BOOLEAN()Extracts the boolean value from v. NPVARIANT_TO_INT32()NPVARIANT_TO_INT32()Extracts a signed 32-bit integer value from v. NPVARIANT_TO_DOUBLE()NPVARIANT_TO_DOUBLE()Extracts a double precision floating point value from v. NPVARIANT_TO_STRING()NPVARIANT_TO_STRING()Extracts the NPString value from v. NPVARIANT_TO_OBJECT()NPVARIANT_TO_OBJECT()Extracts the NPObject value from v. VOID_TO_NPVARIANT()VOID_TO_NPVARIANT()Initialize v to a variant of type NPVariantType_Void. NULL_TO_NPVARIANT()NULL_TO_NPVARIANT()Initialize v to a variant of type NPVariantType_Null. BOOLEAN_TO_NPVARIANT()BOOLEAN_TO_NPVARIANT()Initialize v to a variant of type NPVariantType_Bool with the value val. INT32_TO_NPVARIANT()INT32_TO_NPVARIANT() Initialize v to a variant of type NPVariantType_Int32 with the value val. 21HbbTVBrowser plugin et NPAPI Stanislas Selle - TSI - Telecom Paristech - 2011

22 Events et callbacks -void OnAPPLICATION_Show(); -void OnAPPLICATION_Hide(); -void OnVIDBRC_SetFullScreen(int fullscreenparam); -void OnKEYSET_SetValue(double param); -void OnKEYSET_Allocate(); Déclarer dans hbbtvbrowserplugin.c, ces fonctions sont implémenté dans le terminal. Ex : lorsqu’il y a un appel à la methodz setFullScreen de l’objet videobroadcast, la méthode OnVIDBRC_SetFullScreen() est appelée, c’est au terminal de la résoudre (car c’est le terminal qui a la main sur le flux vidéo, l’interface graphique, etc. ). 22HbbTVBrowser plugin et NPAPI Stanislas Selle - TSI - Telecom Paristech - 2011

23 Le code de SmarDTV TPT HbbtvbrowserPlugin -Un seul plugin, multiple MIMEType -Interaction via callback avec le terminal (gpac + gtk) -Implémentation incomplète mais fidèle à la norme 23HbbTVBrowser plugin et NPAPI Stanislas Selle - TSI - Telecom Paristech - 2011 SmarDTV WebOnTV - Plusieurs Plugins avec chacun un MIMEtype - Interaction avec Comedia - Implementation de presque tout les objets - pas 100% fidéle a la norme

24 Conclusions Les documents importants pour comprendre Dans le projet : -Tableau d’ état d’avancement des implémentations (xls) -Cette présentation et la première présentation NPAPI -Documentation dans le wiki Externe -Documents de la norme HBBTV, OIPF-DAE et CEA2014 -NPAPI https://developer.mozilla.org/en/Gecko_Plugin_API_Referencehttps://developer.mozilla.org/en/Gecko_Plugin_API_Reference Suite et avenir sur OpenHBB 24HbbTVBrowser plugin et NPAPI Stanislas Selle - TSI - Telecom Paristech - 2011


Télécharger ppt "HbbTvBrowserPlugin U ne utilisation avancée de NPAPI Stanislas Selle 8 Novembre 2011."

Présentations similaires


Annonces Google