Special Interest Groups

RDK-B Working Groups
RDK-V Working Groups
UI-UX Research and Development


[Americas Summit]
[Euro Summit]
[Technology Summit]

Preferred Resources

Skip to end of metadata
Go to start of metadata


What is RDK reference image ?

This is documentation page of a new RDK reference image that integrates newer version of operator reference application, now Lightning based, and the required and updated RDK components below.  It is successor of image that contains first generation of Operator Reference Application that was written for in mean time deprecated spark/optimus environment and is documented here

It's goal (and its on evolution path towards that) is to :

  • support same functionality as previous refapp (same GUI allowing IP & QAM playback via sessiongmr & aamp and launching of HTML5, Lightning, Native APPs)
  • allow new functionality to be added in stages: DRM, DAC
  • leverage new Thunder based RDKservices & unifications agreed between Comcast, Liberty Global, RDKM and others
  • only add in image what is really needed for app to work (simplify)
  • ensure it can work easily & be maintained efficiently across different Hardware Platforms (currently rpi and broadcom 972180hbc refboard Video Accelerator) by using proper yocto methods for this. 

"current" and "next" version

At the moment there are 2 versions of the new reference image and each have associated purpose and rdk meta-layer described in section below .

  • "current" one defined in "meta-cmf-video-reference" meta-layer that is making use of recipes and code that are currently available in stable "rdk-next" branch (which is equivalent of Comcast stable2 branch). This image supports aamp IP playback with Playready3 DRM using OCDM. It also contains alpha/beta quality DAC support. There is an RDK CI flow on it to ensure it keeps on working on broadcom 972180hbc reference board with SVP support. 
  • "next" one defined in "meta-cmf-video-reference-next" meta-layer that is running a bit ahead in order to be able to use & develop new functionality like fireboltmediaplayer, already available in RDK open source development, but for which recent code or recipe updates have not been merged yet in rdk-next/stable2 branch of meta-rdk-video or meta-rdk as that can take significant time. The "next" version will add fireboltmediaplayer soon. You will want to use the "next" version to follow development more closely. Or when you're doing actual development.  Here is a video of "next" version of end of 2020 running on rpi3  https://drive.google.com/file/d/1j_28U-AgKmNHItzvowhjdjL1pofKkkId/view

"current" : meta-cmf-video-reference 

This layer support the "current" rdk-generic-reference-image  :

  • it uses deployed/stable2 versions of Thunder and rdkservices (main branch) with the associated recipes from meta-rdk-video version in stable2/rdk-next branch (see associated recipe for Thunder aka wpeframework & rdkservices)
  • It includes new "Lightning" based refapp (refapp2). It is auto-started on startup via the webkitbrowser plugin of RDKServices.
  • Includes several RDKServices plugins like RDKShell, OCIContainer and Packager for DAC support. It also includes Dobby and crun.

Find the meta layer here: https://code.rdkcentral.com/r/plugins/gitiles/components/generic/rdk-oe/meta-cmf-video-reference

Note : This layer no longer supports the "old" spark based refapp with spark, optimus & appmanager nor the "old" rdk-generic-hybrid-refapp-image. The "old" and deprecated wiki page can be found here: Operator Reference Application

"next" : meta-cmf-video-reference-next

This layer support the "next" rdk-generic-reference-image image, which follows development more closely:

  • it uses newer version of RDKServices (from sprint branches) for needed new functionality and to be able to develop/enhance the plugins.
  • it uses its own recipes for Thunder aka wpeframework and RDKServices for that. In fact these recipes are "on their way" to the normal RDK layers but not there yet. But we need the latest version for development reasons.
  • this layer will add fireboltmediaplayer plugin in the future
  • this layer provides reference-next.inc in which you can override settings from reference.inc.

Find the meta layer here: https://code.rdkcentral.com/r/plugins/gitiles/components/generic/rdk-oe/meta-cmf-video-reference-next

Reference image and distro include 

With this new refapp we try to avoid introducing a new RPI machine like we did for the old refapp. Instead we want to introduce and use a distro include file "reference.inc" which holds the special config needed to make reference image builds. On 972180hbc the standard broadcom machine config is used. On RPI we had to introduce a new and clean machine to work with. See the next section.

In short this reference.inc handles the following:

  • add several DISTRO_FEATURES like wpeframework, opencdm, refapp and aamp
  • set several OVERRIDES: wpe:refApp:reference
  • BBMASKs several recipe paths (TBD)
  • it also holds several RPI specific config settings

Besides this reference.inc file a new image target was introduced called "rdk-generic-reference-image". It does not include nor require other images since we wanted to minimise the packages it includes. It also does not include other package groups except for one: packagegroup-rdk-baserootfs. In short it adds the following to the reference image:

  • packagegroup-rdk-baserootfs
  • several RDKServices like iarmmgrs and rmfstreamer
  • several open-source tools like tcpdump and iptables
  • wpewebkit, wpeframework, RDKServices and westeros-sink
  • refapp (currently still the old one), cobalt, sessionmgr, appmanager
  • several RPI specific packages
  • several broadcom specific packages like refsw and wpeframework-ocdm-playready-nexus-svp

RPI machine

The purpose is to have a clean RPI3 machine for the reference image on RPI. Clean in the sense that there are no BBMASKs or non-RPI DISTRO features nor MACHINEOVERRIDES set. This machine can also be used in the future by other RPI images that wish to include distro inc files to activate bigger features.

The new raspberrypi-rdk-hybrid-generic.conf only sets these MACHINEOVERRIDES: raspberrypi3:rpi:hybrid. It only activates these DISTRO_FEATURES: wifi bluez5 bluetooth

RPI "current" build script and prebuild 

"current" buildscript, using meta-cmf-video-reference: https://github.com/stagingrdkm/wpeopencdm/blob/master/scripts/fetch-reference-rpi-nosrc.sh . 

pre-built image from 7 May 2021 here: https://drive.google.com/file/d/1eIyIgpjuuCWjXoIdQP8d8Nd7g-8eiVQ5/view?usp=sharing

RPI "next" build script and prebuild 

"next" buildscript, using meta-cmf-video-reference-next: https://github.com/stagingrdkm/wpeopencdm/blob/master/scripts/fetch-reference-next-rpi-nosrc.sh .

pre-built image from 3 May 2021 here: https://drive.google.com/file/d/1N-hrIW1t9pcqGpAmwgNxsSH-z_9whdVF/view?usp=sharing

Untargz the tarball and flash it to sdcard. For flashing you can use balenaEtcher.

972180hbc build script

Information regarding broadcom reference devices is restricted. Please refer to this page instead: RDK reference image (broadcom)

Playready on 972180hbc

Information regarding playready and broadcom reference devices is restricted. Please refer to this page instead: RDK reference image (broadcom)

The list of test videos used is not restricted. You can find them below.

# Playready working
*1 https://bitmovin-a.akamaihd.net/content/art-of-motion_drm/mpds/11331.mpd
*2 https://demo.unified-streaming.com/video/tears-of-steel/tears-of-steel-dash-playready.ism/.mpd

# Playready but HDCP required?
*3 http://amssamples.streaming.mediaservices.windows.net/bf657309-71d9-4436-b94b-8ac0d2ca222b/SintelTrailer.ism/manifest(format=mpd-time-csf)
*4 http://amssamples.streaming.mediaservices.windows.net/de1470b3-7b3c-4902-ab53-d19b37ef3bd7/TearsOfSteelTeaser.ism/manifest(format=mpd-time-csf)

# Clear video
*5 http://b028.wpc.azureedge.net/80B028/Samples/a38e6323-95e9-4f1f-9b38-75eba91704e4/5f2ce531-d508-49fb-8152-647eba422aec.ism/Manifest(format=mpd-time-csf)
*6 http://amssamples.streaming.mediaservices.windows.net/683f7e47-bd83-4427-b0a3-26a6c4547782/BigBuckBunny.ism/manifest(format=mpd-time-csf)
*7 http://wowzaec2demo.streamlock.net/vod/_definst_/ElephantsDream/smil:ElephantsDream.smil/manifest_mvtime.mpd

# 1: widevine, 2: playready

Video of dac applications running on reference image for rpi

Rpi3 video of "next" prebuild of 23 Dec 2020 https://drive.google.com/file/d/1j_28U-AgKmNHItzvowhjdjL1pofKkkId/view

Rpi3  old video https://drive.google.com/file/d/1lU3aXXnffWiLmKqWSC8r8SuAlgD4QexG/view

Downloadable Application Containers

By default refapp2 starts in the webkitbrowser plugin. It uses RDKServices Packager and RDKShell to install and run DAC apps. There are three demo DAC apps you can try: you.i, flutter and wayland-egl-test.

Here are some manual wscat demo commands that might be useful

export BOX=
wscat -c ws://$BOX/jsonrpc -s notification -x '{"jsonrpc":"2.0","id":1,"method":"Packager.1.getInstalled" }'
wscat -c ws://$BOX/jsonrpc -s notification -x '{"jsonrpc":"2.0","id":1,"method":"Packager.1.getAvailableSpace" }'
wscat -c ws://$BOX/jsonrpc -s notification -x '{"jsonrpc":"2.0","id":1,"method":"Packager.1.install", "params":{ "pkgId": "mypkgid", "type": "DAC", "url": "" } }'
wscat -c ws://$BOX/jsonrpc -s notification -x '{"jsonrpc":"2.0","id":1,"method":"Packager.1.isInstalled", "params":{ "pkgId": "mypkgid"} }'
wscat -c ws://$BOX/jsonrpc -s notification -x '{"jsonrpc":"2.0","id":1,"method":"Packager.1.getPackageInfo", "params":{ "pkgId": "mypkgid"} }'
wscat -c ws://$BOX/jsonrpc -s notification -x '{"jsonrpc":"2.0","id":1,"method":"org.rdk.RDKShell.1.launchApplication", "params":{ "client": "test", "mimeType": "application/dac.native", "uri": "mypkgid" } }'
wscat -c ws://$BOX/jsonrpc -s notification -x '{"jsonrpc":"2.0","id":1,"method":"org.rdk.RDKShell.1.suspendApplication", "params":{ "client": "test" } }'
wscat -c ws://$BOX/jsonrpc -s notification -x '{"jsonrpc":"2.0","id":1,"method":"Packager.1.remove", "params":{ "pkgId": "mypkgid" } }'

Browser/html5 apps

Refapp2 also demonstrates starting a webapp. You can also do this manually like this:

export BOX=
wscat -c ws://$BOX/jsonrpc -s notification -x '{"jsonrpc":"2.0","id":1,"method":"org.rdk.RDKShell.1.launch", "params":{ "callsign": "google", "uri": "http://www.google.com", "type": "HtmlApp"} }'

T4H remote control

The T4H remote control can be used with the refapp. Only Bluetooth and no IR is supported. The remote must also be manually paired before use. Steps for pairing:

  1. On the RPI start bluetoothctl in a shell.
  2. Then issue the command "scan on"
  3. Press both the volume up and channel up buttons on the remote and hold them several seconds until the green LED on the remote stops flashing and stays steady.
  4. Now, after a while, or after repeating step 3, you should see something like "Device F8:8A:5E:23:57:B3 Name: Notus S1"
  5. Now issue the command "pair F8:8A:5E:23:57:B3", of course using your particular BT scanned device ID
  6. Some logging will appear and if everything worked, your remote is now paired. You can verify with command "paired-devices".

Now should be able to navigate the refapp using the arrow keys and OK button to select menu items. Sometimes you have to press a few keys before it works. Use the ← key to navigate backwards inside the refapp. Use the home key to exit a started DAC app. To see a picture of the T4H remote check here: Pair Tech4home remote

Architecture Drawing new reference image


to be updated, deleting previous one as its not fully correct and will confuse

  • No labels