1. Introduction

RDK Services are the RDK components implemented as the Thunder Nano services. RDK services are the services that are developed based on the Thunder (WPE) Framework. Services each other or a particular service can be controlled through JSON RPC commands and it has a web-based controller UI.

The graphics UI services like WebKit Browser and so on are run on top of RDK Shell. RDK Shell is a native component that gives the Wayland composition with application management.

For the Integration of RDK Services on Generic RDK image, below are the important components

  • RDK Shell
  • WPE's Thunder Framework
  • RDK Services (Thunder Nano services developed by Comcast)
  • WPE Framework's UI (for Controller UI)
  • WebKit Browser Plugin (A Thunder Nano service for WPE WebKit Browser)


Table of Contents

2. Yocto build

The links are given here provide the instructions to

  • setup host environment
  • Use the Yocto 3.1 (Dunfell) build framework to create images for the Media Client and Hybrid Gateway.
  • the instruction to flash the images to a micro SD card

These instructions are made for the execution of the RDK media stack on the Raspberrypi 4.

3. User Interface

User Interface involves graphics display on TV to show the app launched on the box and a controller UI that can be launched from the host machine's web browser to control all RDK services remotely.

3.1. App UI

SwitcherApp is a Lightning framework based JS application that launches on a WebKit Browser instance. The URL and other parameters of this WebKit Browser instance can be controller from the ResidentApp service on controller UI (from the Host machine's web browser).

SwitcherApp URL: https://px-apps.sys.comcast.net/lightning_apps/SwitcherApp/dist/index.html

Note: App's can be navigated through a Keyboard or an IR (especially Xfinity) remote connected to the RPi

3.1.1. ResidentApp

Resident App is a WebKit browser instance where it loads the App resides in the box. By default, it loads with Switcher App URL. The switcher App loads different WebKit browser engine for various apps

Switcher APP UI

Swither App launches through ResidentApp (WebKit Browser) Instance

SwitcherApp Home screen

Note: Numerical `1` key is used to come out of any apps on this URL

3.1.2. LightningApp

LightningApp is another WebKit browser instance specifically for apps designed through the Lightning framework.

Metrological's App Functionality

Metrological's App launches on LightningApp (WebKit Browser) Instance. Though it available on Switcher App it launches in a different browser instance.

Metrological's App contains

  • live video playback
  • Vimeo (VOD playback) and other video applications
  • Other Applications

Live stream playback through AAMPVimeo Home ScreenVimeo VOD Playback

3.1.3. Cobalt

Cobalt is an RDK service that gives a lightweight HTML5/CSS/JS based lightweight application container that is mainly designed for a rich animation environment. This service is mainly used for Youtube TV.

Youtube TV

Youtube from Switcher App launches through Cobalt.

Youtube can be launched from

  • Switcher App
  • Cobalt Service

Bouncing Ball

Bouncing ball is a Lightning framework based Graphics rendering App) that comes as one of an app in the Switcher App. On launching the bouncing ball, a LightningApp (WebKit browser) instance will be created.

3.1.4. SearchandDiscoveryApp

SearchandDiscoveryApp is another WebKit Browser instance mainly used for setup functionality

Setup

Setup configuration and settings which is from Switcher App that contains

  • Install summary - Info page to display the device and image details
  • Network Connection - Info page to display network interfaces details
  • Cable Card - Info page about the Media supported
  • Bluetooth Settings - Settings page to set up a Bluetooth Audio device connection
  • WiFi Settings - Settings page to set up a WiFi network connection


3.1.5. HTMLApp

HTMLApp is another WebKit browser instance or service that mainly used for HTML-based applications.

3.1.6. WebKitBrowser

WebKit Browser is a base browser service where any external URL can be loaded.

3.2. App Vs Instance

Below given apps will be loaded on the corresponding UI browser service

Metrological App - Lightning App

Switcher App URL - Resident App

Youtube - Cobalt

Bouncing Ball - Lightning App

Setup menu on Switcher App - SearchAndDiscoveryApp

3.3. Controller UI

Controller UI is a web UI that can be launched from a host machine's (machine under the same network where RPi resides) browser. This UI can be loaded with the RPi box's IP address with port number 9998.
URL: http://<Rpi's IP address>:9998

Controller: List of plugins

In the Controller tab, any plugins can be enabled or disabled. On loading the controller UI initially, it loads the Controller tab with all possible services with the enable or disable status.

3.3.1. ResidentApp Control

As this is a WebKit browser instance, preset and custom URL can be loaded from the controller UI.

ResidentApp Control

4. RDK Services

Each RDK Service can be validated through JSON RPC Commands through HTTP. It has a request and response in JSON format. Some RDK Services which have graphics UI can be validated through the controller UI as well.

As the JSON RPC commands to control the RDK service through HTTP, requests can be sent from the target and from the remote (a host connected on the same network) machines.

  • On target - Use box's IP or the local host's IP
  • On Remote - Use only the box's IP

Any service can be enabled or disabled also through JSONRPC commands.

Function Request Response Remarks
activate curl http://localhost:9998/jsonrpc --header "Content-Type: application/json" --request POST --data '{ "jsonrpc":"2.0", "id":3, "method":"Controller.1.activate", "params":{"callsign":"org.rdk.RDKShell"} }' {"jsonrpc":"2.0","id":3,"result":{"success":true}} callsign argument can accept all plugins
Note: the argument is case sensitive
deactivate curl http://localhost:9998/jsonrpc --header "Content-Type: application/json" --request POST --data '{ "jsonrpc":"2.0", "id":3, "method":"Controller.1.deactivate", "params":{"callsign":"org.rdk.RDKShell"} }' {"jsonrpc":"2.0","id":3,"result":{"success":true}}
environment curl http://localhost:9998/jsonrpc --header "Content-Type: application/json" --request POST --data '{ "jsonrpc":"2.0", "id":3, "method":"Controller.1.environment@XDG_RUNTIME_DIR"}' {"jsonrpc":"2.0","id":3,"result":"/tmp"}
  • No labels