
{"id":10303,"date":"2022-06-21T09:29:26","date_gmt":"2022-06-21T09:29:26","guid":{"rendered":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/rdkservices\/wpeframework_thunder_evaluation\/"},"modified":"2024-12-11T09:34:47","modified_gmt":"2024-12-11T09:34:47","slug":"wpeframework_thunder_evaluation","status":"publish","type":"page","link":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/rdkservices\/wpeframework_thunder_evaluation\/","title":{"rendered":"WPEFramework (Thunder) Evaluation"},"content":{"rendered":"\n <div class=\"toc-macro client-side-toc-macro  conf-macro output-block\" data-headerelements=\"H1,H2,H3,H4,H5,H6,H7\" data-hasbody=\"false\" data-macro-name=\"toc\"> <\/div><h3 class=\"wp-sub-header\">1.Repos:<\/h3><p><br><\/p><div class=\"table-wrap\"> <table class=\"relative-table wrapped confluenceTable\"><colgroup><col style=\"width: 169.0px\"><col style=\"width: 457.0px\"><col style=\"width: 471.0px\"><\/colgroup><thead><tr><th class=\"highlight-blue confluenceTh\" colspan=\"1\" data-highlight-colour=\"blue\"><p><strong>Repo Name<\/strong><\/p><\/th><th class=\"highlight-blue confluenceTh\" colspan=\"1\" data-highlight-colour=\"blue\"><p><strong>URL<\/strong><\/p><\/th><th class=\"highlight-blue confluenceTh\" colspan=\"1\" data-highlight-colour=\"blue\"><p><strong>Comment<\/strong><\/p><\/th><\/tr><\/thead><tbody><tr><td colspan=\"1\" class=\"confluenceTd\">WPEFramework<\/td><td colspan=\"1\" class=\"confluenceTd\"><a rel=\"nofollow\" class=\"rdk-inside-table\" href=\"https:\/\/github.com\/WebPlatformForEmbedded\/WPEFramework\">https:\/\/github.com\/WebPlatformForEmbedded\/WPEFramework<\/a><\/td><td colspan=\"1\" class=\"confluenceTd\">Main repo for Thunder\/WPEFramework<\/td><\/tr><tr><td class=\"confluenceTd\">WPEFrameworkPlugins<\/td><td class=\"confluenceTd\"><a href=\"https:\/\/github.com\/WebPlatformForEmbedded\/WPEFrameworkPlugins\" rel=\"nofollow\" class=\"rdk-inside-table\">https:\/\/github.com\/WebPlatformForEmbedded\/WPEFrameworkPlugins<\/a><\/td><td class=\"confluenceTd\">Various WPEFramework plugins<\/td><\/tr><tr><td class=\"confluenceTd\">Lightning SDK<\/td><td class=\"confluenceTd\"><a href=\"https:\/\/github.com\/WebPlatformForEmbedded\/Lightning\" rel=\"nofollow\" class=\"rdk-inside-table\">https:\/\/github.com\/WebPlatformForEmbedded\/Lightning<\/a><\/td><td class=\"confluenceTd\"><p><span>WPE UI Framework (JS &amp; WebGL library for developing web apps)<\/span><\/p><\/td><\/tr><tr><td colspan=\"1\" class=\"confluenceTd\">WPEReferenceUX<\/td><td colspan=\"1\" class=\"confluenceTd\"><a rel=\"nofollow\" class=\"rdk-inside-table\" href=\"https:\/\/github.com\/WebPlatformForEmbedded\/WPEReferenceUX\">https:\/\/github.com\/WebPlatformForEmbedded\/WPEReferenceUX<\/a><\/td><td colspan=\"1\" class=\"confluenceTd\">Sample UI\/Demo app which demonstrates WPEFramework and Lightning use<\/td><\/tr><tr><td colspan=\"1\" class=\"confluenceTd\">WPEPluginLauncher<\/td><td colspan=\"1\" class=\"confluenceTd\"><a class=\"rdk-inside-table\" rel=\"nofollow\" href=\"https:\/\/github.com\/WebPlatformForEmbedded\/WPEPluginLauncher\">https:\/\/github.com\/WebPlatformForEmbedded\/WPEPluginLauncher<\/a><\/td><td colspan=\"1\" class=\"confluenceTd\"><span>Plugin to &#8220;Launch&#8221; linux applications and scripts<\/span><\/td><\/tr><\/tbody><\/table><\/div><h3 class=\"wp-sub-header\">2. WPEFramework<\/h3><p>WPEFramework provides a unified web-based interface with a consistent navigation model. In this model, plugins (custom or generic) are controlled and queried, through the WPEFramework application.<\/p><p>The main responsibilities of WPEFramework application are:<\/p><ul><li>Modular loading and unloading of plugins.<\/li><li>Plugin process localization. In or out-of-process communicating with the framework over a lightweight RPC communication channel.<\/li><li>Runtime enabling\/disabling of tracing information within the plugins and the WPEFramework application.<\/li><li>Light-weight implementation of the HTTP [RFC2616] specification.<\/li><li>Light-weight implementation of the WebSocket [RFC6455] specification.<\/li><\/ul><p>Each instance of a plugin in the WPE id identified by a name. This name is referred to as<span>&nbsp;<\/span><em><u>Callsign<\/u><\/em><span>&nbsp;<\/span>of the plugin. The callsign must be unique in the context of all configured plugins.<\/p><p><br><\/p><h3 class=\"wp-sub-header\">3. HTTP Restful API<\/h3><p>All request and response bodies should use the JSON format for data.<\/p><h3 id=\"WPEFramework(Thunder)Evaluation-3.1Methods\">3.1 Methods<\/h3><div class=\"table-wrap\"> <table class=\"wrapped confluenceTable\"><colgroup><col><col><\/colgroup><thead><tr><th class=\"highlight-blue confluenceTh\" data-highlight-colour=\"blue\"><p>Method<\/p><\/th><th class=\"highlight-blue confluenceTh\" data-highlight-colour=\"blue\"><p>Function<\/p><\/th><\/tr><\/thead><tbody><tr><td class=\"confluenceTd\">GET<\/td><td class=\"confluenceTd\">Retrieve information from WPEFramework or a plugin<\/td><\/tr><tr><td class=\"confluenceTd\">POST<\/td><td class=\"confluenceTd\">Update new information or new objects at WPEFramework or a plugin<\/td><\/tr><tr><td class=\"confluenceTd\">PUT<\/td><td class=\"confluenceTd\">Update new information or new objects at WPEFramework or a plugin<\/td><\/tr><tr><td class=\"confluenceTd\">DELETE<\/td><td class=\"confluenceTd\">Delete information at WPEFramework or a plugin<\/td><\/tr><\/tbody><\/table><\/div><h3 id=\"WPEFramework(Thunder)Evaluation-3.2WebAPIPath\">3.2 Web API Path<\/h3><p>All WPEFramework commands start with the &ldquo;Service&rdquo; prefix followed by the Plugin name:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">   (GET|POST|PUT|DELETE) \/Service\/&lt;PluginName&gt;[\/OptionalPaths] HTTP\/1.1<\/pre><h3 id=\"WPEFramework(Thunder)Evaluation-3.3Examples\">3.3 Examples<\/h3><p>Retrieve the list of all active plugins:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">    curl -X GET <a rel=\"nofollow\" class=\"external-link\" href=\"http:\/\/192.168.1.122:9998\/Service\/Controller\">http:\/\/192.168.1.122:9998\/Service\/Controller<\/a><\/pre><p>Deactivate OCDM plugin:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">   curl -X PUT <a rel=\"nofollow\" href=\"http:\/\/192.168.1.122:9998\/Service\/Controller\/Deactivate\/OCDM\" class=\"external-link\">http:\/\/192.168.1.122:9998\/Service\/Controller\/Deactivate\/OCDM<\/a><\/pre><p>Send a Scan command to the WIFI controller plugin:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">   curl -X PUT&nbsp;<a href=\"http:\/\/192.168.1.122:9998\/Service\/WifiControl\/Scan\" class=\"external-link\" rel=\"nofollow\">http:\/\/192.168.1.122:9998\/Service\/WifiControl\/Scan<\/a><\/pre><p>Update the WebktiBrowser config:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">curl -X POST&nbsp;<a class=\"external-link\" rel=\"nofollow\" href=\"http:\/\/192.168.1.122:9998\/Service\/WebKitBrowser\/Config\">http:\/\/192.168.1.122:9998\/Service\/WebKitBrowser\/Config<\/a>&nbsp;--data \"config.json\"<br><br><\/pre><h3 class=\"wp-sub-header\">4. WebSockets for events &amp; notifications<\/h3><p>The architecture of the WPEFramework offers event based feedback to clients. This functionality is realized using web socket connections to a plugin. Over these web socket connections, the plugin will notify the client on the other side of the web socket of events specific to the plugin.<\/p><p>The syntax for opening a web socket to the plugin is equal to the syntax of the RESTfull API:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">   Request: ws:\/\/&lt;IP Address and port of WPEFramework&gt;\/Service\/&lt;Callsign&gt;<br>   protocol: notification<\/pre><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">In Javascript, the socket would be opened like:<br>   socket = new WebSocket(\"<a href=\"9998\/Service\/Controller\" rel=\"nofollow\">ws:\/\/192.168.1.122:9998\/Service\/Controller<\/a>\", \"notification\");<\/pre><p>using wscat tool: (shows notification for OCDM plugin being deacticated)<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">   09:23 $ wscat -c <a rel=\"nofollow\" href=\"9998\/Service\/Controller\">ws:\/\/192.168.1.122:9998\/Service\/Controller<\/a> -s notification --no-color<br>   connected (press CTRL+C to quit)<br>   &lt; {\"callsign\":\"OCDM\",\"state\":\"deactivated\",\"reason\":\"Requested\"}<br>   &lt; {\"subsystems\":{\"Decryption\":false}}<br>   &gt;<\/pre><p>Using the<span>&nbsp;<\/span><em>Controller<\/em><span>&nbsp;<\/span>callsign, one can listen to all the notifications. If a specific plugin callsign is used when opening the websocket connection, only events from that plugin will be received.<\/p><h3 class=\"wp-sub-header\">5. Filesystem installation (config files &amp; shared libs)<\/h3><h3 id=\"WPEFramework(Thunder)Evaluation-5.1Configfiles\">5.1 Config files<\/h3><p>Config files are stored under \/etc\/WPEFramework:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">   cd \/etc\/WPEFramework# find .<br>   .<br>   .\/config.json<br>   .\/plugins<br>   .\/plugins\/OCDM.json<br>   .\/plugins\/DeviceInfo.json<br>   .\/plugins\/Tracing.json<br>   .\/plugins\/Monitor.json<\/pre><p>&nbsp;config.json is the main configuration file for the WPEframework and port number and network interface for the main HTTP API are set here:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">    \"version\":\"1.0.0000000\",<br>    \"port\":9998,<br>    \"binding\":\"0.0.0.0\",<br>    \"ipv6\":false,<br>    \"idletime\":180,<br>    \"persistentpath\":\"\/opt\",<br>    \"datapath\":\"\/usr\/share\/WPEFramework\",<br>    \"systempath\":\"\/usr\/lib\/wpeframework\/plugins\",<br>    \"proxystubpath\":\"\/usr\/lib\/wpeframework\/proxystubs\",<br>    \"redirect\":\"\/Service\/Controller\/UI\",<\/pre><p>Each plugin has a json config file under \/etc\/WPEFramework\/plugins. For example, OCDM plugin config file OCDM.json:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">   cd \/etc\/WPEFramework# cat plugins\/OCDM.json<br>   {<br>    \"locator\":\"libWPEFrameworkOCDM.so\",<br>    \"classname\":\"OCDM\",<br>    \"precondition\":[<br>    \"Provisioning\"<br>    ],<br>    \"autostart\":true,<br>    \"configuration\":{<br>    \"outofprocess\":true,<br>    \"mapping\":[<br>    {<br>    \"key\":\"com.youtube.playready\",<br>    \"system\":\"PlayReady\"<br>    },<br>    {<br>    \"key\":\"com.microsoft.playready\",<br>    \"system\":\"PlayReady\"<br>    },<br>    {<br>    \"key\":\"com.widevine.alpha\",<br>    \"system\":\"WideVine\"<br>    }<br>    ]<\/pre><p>Generic plugin properties like preconditions, autostart and outofprocess are set here as well as plugin specific ones. In this case, supported KeySystems (DRMs) are listed in the config file.<\/p><h3 id=\"WPEFramework(Thunder)Evaluation-5.2Executables\">5.2 Executables<\/h3><p>Two executables are installed in \/usr\/bin:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">   \/usr\/bin\/WPEFramework-1.0.0000000<br>   \/usr\/bin\/WPEProcess -&gt; WPEProcess-1.0.0000000 (each out-of-process plugin will run in a seperate WPEProcess)<br>   \/usr\/bin\/WPEProcess-1.0.0000000<br>   \/usr\/bin\/<span>WPEFramework<\/span> -&gt; WPEFramework-1.0.0000000 (main WPEFramework process, started with systemd, Controller and in-process plugins run in this process)<\/pre><h3 id=\"WPEFramework(Thunder)Evaluation-5.3Sharedlibs\">5.3 Shared libs<\/h3><p>wpeframework core libraries are in \/usr\/lib:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">   cd \/usr\/lib# ls -l libWPEFramework*<br>   libWPEFrameworkCore.so -&gt; libWPEFrameworkCore.so.1<br>   libWPEFrameworkCore.so.1 -&gt; libWPEFrameworkCore.so.1.0.0000000<br>   libWPEFrameworkCore.so.1.0.0000000<br>   libWPEFrameworkCryptalgo.so -&gt; libWPEFrameworkCryptalgo.so.1<br>   libWPEFrameworkCryptalgo.so.1 -&gt; libWPEFrameworkCryptalgo.so.1.0.0000000<br>   libWPEFrameworkCryptalgo.so.1.0.0000000<br>   libWPEFrameworkPlugins.so -&gt; libWPEFrameworkPlugins.so.1<br>   libWPEFrameworkPlugins.so.1 -&gt; libWPEFrameworkPlugins.so.1.0.0000000<br>   libWPEFrameworkPlugins.so.1.0.0000000<br>   libWPEFrameworkProtocols.so -&gt; libWPEFrameworkProtocols.so.1<br>   libWPEFrameworkProtocols.so.1 -&gt; libWPEFrameworkProtocols.so.1.0.0000000<br>   libWPEFrameworkProtocols.so.1.0.0000000<br>   libWPEFrameworkTracing.so -&gt; libWPEFrameworkTracing.so.1<br>   libWPEFrameworkTracing.so.1 -&gt; libWPEFrameworkTracing.so.1.0.0000000<br>   libWPEFrameworkTracing.so.1.0.0000000<\/pre><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">OCDM library is also part of WPEFramework:<\/pre><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">   cd \/usr\/lib# ls -l libocdm.so*<br>   libocdm.so -&gt; libocdm.so.1<br>   libocdm.so.1 -&gt; libocdm.so.1.0.0000000<br>   libocdm.so.1.0.0000000<\/pre><p>Plugin shared libs are located in \/usr\/lib\/wpeframework:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">   cd \/usr\/lib\/wpeframework# find .<br>   .\/plugins\/libWPEFrameworkMonitor.so<br>   .\/plugins\/libWPEFrameworkOCDM.so<br>   .\/plugins\/libWPEFrameworkWebKitBrowser.so<br>   .\/plugins\/libWPEFrameworkTraceControl.so<br>   .\/plugins\/libWPEFrameworkDeviceInfo.so<br>   .\/proxystubs<br>   .\/proxystubs\/libWPEFrameworkInterfaces.so.1.0.0000000<br>   .\/proxystubs\/libWPEFrameworkInterfaces.so<br>   .\/proxystubs\/libWPEFrameworkProxyStubs.so.1<br>   .\/proxystubs\/libWPEFrameworkProxyStubs.so.1.0.0000000<br>   .\/proxystubs\/libWPEFrameworkInterfaces.so.1<br>   .\/proxystubs\/libWPEFrameworkProxyStubs.so<\/pre><h3 class=\"wp-sub-header\">6. Memory Usage<\/h3><p>WPEFramework runs as a systemd service. The main process is named<span>&nbsp;<\/span>WPEFramework and runs the main controller plugin as well as the other in-process plugins (such as monitor, tracing etc).&nbsp;<\/p><p>The out-of-process plugins such as OCDM plugin run in seperate &#8220;<em>WPEProcess<\/em>&#8221; processes. For example, in a configuration with Trace, Monitor and DeviceInfo in-process plugins and OCDM out-of-process plugin, the following processes are present:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">   cd \/etc\/WPEFramework# ps ax | grep -i wpe<\/pre><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">   11317 ? Ssl 0:00 \/usr\/bin\/<span>WPEFramework<\/span> -b<br>   11340 ? Sl 0:00 WPEProcess -a \/usr\/bin\/ -c OCDMImplementation -d \/usr\/share\/WPEFramework\/OCDM\/ -i 85 -l libWPEFrameworkOCDM.so -m \/usr\/lib\/wpeframework\/proxystubs\/ -p \/opt\/OCDM\/ -r \/tmp\/communicator -s \/usr\/lib\/wpeframework\/plugins\/<\/pre><p>Top command output:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">   PID   USER PR NI  VIRT  RES  SHR S %CPU %MEM   TIME+  COMMAND<br>   25712 root 20 0 105156 3040 2432 S  0.3  0.5 0:00.08 <span>WPEFramework<\/span><br>   25737 root 20 0 322284 6120 5064 S  0.0  1.1 0:00.19 WPEProcess<\/pre><p>The main WPEFramework process &#8220;<span>WPEFramework<\/span>&#8221; uses ~<strong>3MB<\/strong><span>&nbsp;<\/span>RES memory with monitor, trace and deviceinfo plugins enabled. WPEProcess (OCDM) plugin is using<span>&nbsp;<\/span><strong>6MB<\/strong><span>&nbsp;<\/span>(in idle state, it uses more when there are active DRM sessions).<\/p><h3 class=\"wp-sub-header\">7. Disk space usage<\/h3><p>Plugins: (Monitor, OCDM,TraceControl,DeviceInfo, WebkitBrowser) use about<span>&nbsp;<\/span><strong>409KB<\/strong><span>&nbsp;<\/span>of file space:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">   cd \/usr\/lib\/wpeframework# du -ah<br>   75.0K .\/plugins\/libWPEFrameworkMonitor.so<br>   103.0K .\/plugins\/libWPEFrameworkOCDM.so<br>   104.0K .\/plugins\/libWPEFrameworkWebKitBrowser.so<br>   67.0K .\/plugins\/libWPEFrameworkTraceControl.so<br>   59.0K .\/plugins\/libWPEFrameworkDeviceInfo.so<br>   409.0K .\/plugins<br><\/pre><p>Core shared libraries use about<span>&nbsp;<\/span><strong>600KB<\/strong><span>&nbsp;<\/span>of file space:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">   cd \/usr\/lib# du -ah libWPEFramework*.so.1.0.0000000<br>   146.0K libWPEFrameworkCore.so.1.0.0000000<br>   34.0K libWPEFrameworkCryptalgo.so.1.0.0000000<br>   152.0K libWPEFrameworkPlugins.so.1.0.0000000<br>   162.0K libWPEFrameworkProtocols.so.1.0.0000000<br>   39.0K libWPEFrameworkTracing.so.1.0.0000000<\/pre><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">   67.0K <span>libocdm.so<\/span>.1.0.0000000<\/pre><p>ProxyStubs use an additional of<span>&nbsp;<\/span><strong>207KB<\/strong>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">   cd \/usr\/lib\/wpeframework\/proxystubs# du -ah<br>   143.0K .\/libWPEFrameworkInterfaces.so.1.0.0000000<br>   63.0K .\/libWPEFrameworkProxyStubs.so.1.0.0000000<\/pre><p>Executables use<span>&nbsp;<\/span><strong>367KB<\/strong>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">   cd \/usr\/bin# du -ah WPE*<br>   276.0K WPEFramework-1.0.0000000<br>   91.0K WPEProcess-1.0.0000000<br><br><\/pre><h3 class=\"wp-sub-header\">8.Comparison between SystemD vs Thunder<\/h3><p>Comparison of high level features of<span>&nbsp;<\/span><a href=\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/rdkservices\/wpeframework_thunder_evaluation\/systemd_vs_thunder_feature_comparison\/\" rel=\"nofollow\">systemd vs Thunder<\/a><\/p><h3 class=\"wp-sub-header\">8. WebKitBrowser plugin &amp; rdkbrowser2<\/h3><p>WebKitBrowserPlugin allows WPEFramework clients to launch WPE instances, set the URL, suspend&amp;resume browser processes. It works similar to rdkbrowser2 but instead of the rtRemote interface, HTTP API is used.<\/p><h3 class=\"wp-sub-header\">Further Reading:<\/h3><p><a href=\"https:\/\/wiki.rdkcentral.com\/display\/RDK\/How+to+Make+a+Thunder+Nano+Service\" rel=\"nofollow\">How to Make a Thunder Nano Service<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1.Repos: Repo Name URL Comment WPEFramework https:\/\/github.com\/WebPlatformForEmbedded\/WPEFramework Main repo for Thunder\/WPEFramework WPEFrameworkPlugins https:\/\/github.com\/WebPlatformForEmbedded\/WPEFrameworkPlugins Various WPEFramework [&hellip;]<\/p>\n","protected":false},"author":28,"featured_media":0,"parent":10275,"menu_order":7,"comment_status":"open","ping_status":"closed","template":"","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"footnotes":""},"class_list":["post-10303","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>WPEFramework (Thunder) Evaluation - RDK Documentation Portal | Documentation<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/rdkservices\/wpeframework_thunder_evaluation\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"WPEFramework (Thunder) Evaluation - RDK Documentation Portal | Documentation\" \/>\n<meta property=\"og:description\" content=\"1.Repos: Repo Name URL Comment WPEFramework https:\/\/github.com\/WebPlatformForEmbedded\/WPEFramework Main repo for Thunder\/WPEFramework WPEFrameworkPlugins https:\/\/github.com\/WebPlatformForEmbedded\/WPEFrameworkPlugins Various WPEFramework [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/rdkservices\/wpeframework_thunder_evaluation\/\" \/>\n<meta property=\"og:site_name\" content=\"RDK Documentation Portal | Documentation\" \/>\n<meta property=\"article:modified_time\" content=\"2024-12-11T09:34:47+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/rdkservices\/wpeframework_thunder_evaluation\/\",\"url\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/rdkservices\/wpeframework_thunder_evaluation\/\",\"name\":\"WPEFramework (Thunder) Evaluation - RDK Documentation Portal | Documentation\",\"isPartOf\":{\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/#website\"},\"datePublished\":\"2022-06-21T09:29:26+00:00\",\"dateModified\":\"2024-12-11T09:34:47+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/rdkservices\/wpeframework_thunder_evaluation\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/rdkservices\/wpeframework_thunder_evaluation\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/rdkservices\/wpeframework_thunder_evaluation\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Documentation\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"RDK Video\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Sub-Systems\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/?page_id=10158\"},{\"@type\":\"ListItem\",\"position\":5,\"name\":\"RDKServices\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/rdkservices\/\"},{\"@type\":\"ListItem\",\"position\":6,\"name\":\"WPEFramework (Thunder) Evaluation\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/#website\",\"url\":\"https:\/\/developer.rdkcentral.com\/documentation\/\",\"name\":\"RDK Documentation Portal | Documentation\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/developer.rdkcentral.com\/documentation\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"WPEFramework (Thunder) Evaluation - RDK Documentation Portal | Documentation","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/rdkservices\/wpeframework_thunder_evaluation\/","og_locale":"en_US","og_type":"article","og_title":"WPEFramework (Thunder) Evaluation - RDK Documentation Portal | Documentation","og_description":"1.Repos: Repo Name URL Comment WPEFramework https:\/\/github.com\/WebPlatformForEmbedded\/WPEFramework Main repo for Thunder\/WPEFramework WPEFrameworkPlugins https:\/\/github.com\/WebPlatformForEmbedded\/WPEFrameworkPlugins Various WPEFramework [&hellip;]","og_url":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/rdkservices\/wpeframework_thunder_evaluation\/","og_site_name":"RDK Documentation Portal | Documentation","article_modified_time":"2024-12-11T09:34:47+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/rdkservices\/wpeframework_thunder_evaluation\/","url":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/rdkservices\/wpeframework_thunder_evaluation\/","name":"WPEFramework (Thunder) Evaluation - RDK Documentation Portal | Documentation","isPartOf":{"@id":"https:\/\/developer.rdkcentral.com\/documentation\/#website"},"datePublished":"2022-06-21T09:29:26+00:00","dateModified":"2024-12-11T09:34:47+00:00","breadcrumb":{"@id":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/rdkservices\/wpeframework_thunder_evaluation\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/rdkservices\/wpeframework_thunder_evaluation\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/rdkservices\/wpeframework_thunder_evaluation\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/developer.rdkcentral.com\/documentation\/"},{"@type":"ListItem","position":2,"name":"Documentation","item":"https:\/\/developer.rdkcentral.com\/documentation\/"},{"@type":"ListItem","position":3,"name":"RDK Video","item":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/"},{"@type":"ListItem","position":4,"name":"Sub-Systems","item":"https:\/\/developer.rdkcentral.com\/documentation\/?page_id=10158"},{"@type":"ListItem","position":5,"name":"RDKServices","item":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_video_documentation\/sub-systems\/rdkservices\/"},{"@type":"ListItem","position":6,"name":"WPEFramework (Thunder) Evaluation"}]},{"@type":"WebSite","@id":"https:\/\/developer.rdkcentral.com\/documentation\/#website","url":"https:\/\/developer.rdkcentral.com\/documentation\/","name":"RDK Documentation Portal | Documentation","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/developer.rdkcentral.com\/documentation\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/10303","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/comments?post=10303"}],"version-history":[{"count":3,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/10303\/revisions"}],"predecessor-version":[{"id":12000,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/10303\/revisions\/12000"}],"up":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/10275"}],"wp:attachment":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/media?parent=10303"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}