IP Client based STB on Raspberrypi 3
Introduction
RDK-V IP Client is a IP based Client Set-Top-Box (STB) with RDK 4.0 features which connnects directly with Network Gateways. Targets on Accelerator platforms and utilizes only open-sourced RDK components.
Host Setup
Refer to the below link for Host Machine Setup
How to Build#SettinguptheHostEnvironment
Yocto Build Setup
All RPi based RDK images with the latest features are from the rdk-next branch
Initializing the Build Environment
To build RDK images from ipstb_bringup branch, follow the below build procedure
mkdir workspace
cd workspace
# initialize the manifest with repo tool
repo init -u https://code.rdkcentral.com/r/rdkcmf/manifests -b dunfell -m rdkv-extsrc.xml
repo sync -j `nproc` –no-clone-bundle –no-tags
mkdir workspace
cd workspace
# initialize the manifest with repo tool
repo init -u https://code.rdkcentral.com/r/rdkcmf/manifests -b rdk-next -m rdkv-extsrc.xml
repo sync -j `nproc` –no-clone-bundle –no-tags
MACHINE=raspberrypi-rdk-ipmc source meta-cmf-raspberrypi/setup-environment bitbake rdk-generic-ipclient-image
Image build
- Note. The kernel Image and root filesystem will be created under the ./tmp/deploy/images/raspberrypi-rdk-ipmc folder
Flashing Procedure
The micro SD card should not have any partition while flashing the image. The complete memory of the card should be free.
# Insert the micro SD card to the host system and mention the card's device file name # of - output file (the device file for the inserted micro SD card bzcat <image name> | sudo dd of=/dev/<sd file> bs=4M iflag=fullblock oflag=direct conv=fsync
System View
JIRA Tracker
Compilation Errors(Now all are resolved)
S.No | Component | Recipe | Dependent on | Remarks |
---|---|---|---|---|
1 | sysint | No bb file | It is not yet opensourced | If added in meta-rdk it is fixed |
2 | sysint-conf | No bb file | Removing from package oss file | Build is proceeding further |
3 | virtual/mfrlib | Opensourcing | ||
4 | tenablehdcp-dev | meta-rdk-video/recipes-extended/tenablehdcp/tenablehdcp_git.bb | iarmmgrs | virtual/mfrlib |
5 | ledmgr-dev | meta-rdk-video/recipes-extended/ledmgr/ledmgr_git.bb | iarmmgrs | |
6 | iarm-query-powerstate-dev | meta-rdk-video/recipes-extended/sys_mon_tools/iarm-query-powerstate_git.bb | iarmmgrs | virtual/mfrlib |
7 | tr69hostif-dev | meta-rdk-video/recipes-thirdparty/tr69hostif/tr69hostif_git.bb | Bluetooth-mgr -> audiocapture -> iarmargs | |
8 | Netsrvmgr-pni-controller, netsrvmgr-pni-settings-loader, netsrvmgr-dev | meta-rdk-video/recipes-extended/networkmgr/netsrvmgr_git.bb | iarmmgrs | |
9 | iarm-set-powerstate-dev | meta-rdk-video/recipes-extended/sys_mon_tools/iarm-set-powerstate_git.bb | iarmmgrs | |
10 | rdkservices-dev | meta-rdk-video/recipes-extended/rdkservices/rdkservices_git.bb | iarmmgrs | |
11 | Key-simulator-dev | meta-rdk-video/recipes-extended/sys_mon_tools/key-simulator_git.bb | iarmmgrs | |
12 | iarmmgrs-dev | meta-rdk-video/recipes-extended/iarmmgrs/iarmmgrs_git.bb | virtual/mfrlib | |
13 | ledmgr-extended-noop-dev | meta-rdk-video/recipes-extended/ledmgr/ledmgr-extended-noop_git.bb | iarmmgrs | |
14 | bluetooth-mgr-dev | meta-rdk/recipes-connectivity/bluetooth/bluetooth-mgr_git.bb | Audiocapturemgr -> iarmargs | |
15 | aamp | meta-rdk-video/recipes-extended/aamp/gst-plugins-rdk-aamp_git.bb, meta-rdk-ext/recipes-extended/webkitbrowser-plugin/webkitbrowser-plugin_git.bb, meta-rdk-video/recipes-extended/injectedbundle/injectedbundle.bb | iarmmgrs | |
16 | mfrlibs-rpi | |||
17 | Wpe-webkit-dev, wpe-webkit-web-inspector-plugin, wpe-webkit | meta-rdk-ext/recipes-extended/wpe-webkit/wpe-webkit_2.22.2.bb | ||
18 | audiocapturemgr, audiocapturemgr-dev | virtual/media-utils iarmbus iarmmgrs | iarmmgrs | virtual/mfrlib |
19 | tts | meta-cmf-video/recipes-graphics/tts/tts.bbappend | wpeframework-clientlibraries | security agent library is added to LD flag to fix the issue |
20 | mediautils | removed mediautils |
Testing Procedure
- Controller UI : For connecting Controller UI, use URL: http://<machineip>:9998
- Enabling / Disabling the Plugins from controller UI.
- Wi-Fi Services: Wifi related services can be triggered from Wi-Fi tab in controller UI. We can scan and select from available networks.
- R-Pi Board Console Access : Execute ssh root@machineip from your host PC
- Image Details Verification: For verifying the image details, we can use cat /version.txt command.
root@raspberrypi-rdk-ipmc:~# cat /version.txt imagename:rdk-generic-ip-stb-client_rdk-next_20210902101930 BRANCH=rdk-next YOCTO_VERSION=dunfell SPIN=0 BUILD_TIME=”2021-09-02 10:19:30″ Generated on Thu Sep 02 10:19:30 UTC 2021 root@raspberrypi-rdk-ipmc:~# |
---|
- Playing a video using gstreamer, with aamp as gstreamer plugin element by using aamp:// in the uri:
eg :- gst-launch-1.0 playbin uri=aamp://bitdash-a.akamaihd.net/content/MI201109210084_1/m3u8s/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.m3u8 video-sink=westerossink
- Playing a video using gstreamer, with gst-launch-1.0.
eg :- gst-launch-1.0 playbin uri=aamp://bitdash-a.akamaihd.net/content/MI201109210084_1/m3u8s/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.m3u8 video-sink=westerossink
- Playback through Youtube Application : For launching youtube from controller UI, enable cobalt plugin, youtube page will be loaded in TV UI.
UI Navigation
For details on UI page, visit RDK Accelerator Home UI – Version 2.0#ControllerUI.
Cobalt lifecycle using terminal:
Launching cobalt using RDK Shell : execute below command from ssh terminal
curl –data-binary ‘{“jsonrpc”:”2.0″, “id”:3, “method”:”org.rdk.RDKShell.1.launch”, “params”:{“callsign”: “Cobalt”, “type”:””, “uri”:””}}’ -H ‘content-type:text/plain;’ http://127.0.0.1:9998/jsonrpc
Setting a video URL using deeplink method.
curl –data-binary ‘{“jsonrpc”:”2.0″, “id”:3, “method”:”Cobalt.1.deeplink”,”params”: “<videoURL>”}’ -H ‘content-type:text/plain;’ http://127.0.0.1:9998/jsonrpc
Sending enter key to proceed video playback
curl –header “Content-Type: application/json” –request POST –data ‘{“jsonrpc”:”2.0″, “id”:3, “method”:”org.rdk.RDKShell.1.generateKey”, “params”:{“keys”:[ {“keyCode”: 13,”modifiers”: [],”delay”:1.0}]}}’ http://127.0.0.1:9998/jsonrpc
Suspending the plugin using RDKShell
curl –data-binary ‘{“jsonrpc”:”2.0″, “id”:3, “method”:”org.rdk.RDKShell.1.suspend”, “params”:{“callsign”: “Cobalt”}}’ -H ‘content-type:text/plain;’ http://127.0.0.1:9998/jsonrpc
Resuming the plugin
curl –data-binary ‘{“jsonrpc”:”2.0″, “id”:3, “method”:”org.rdk.RDKShell.1.launch”, “params”:{“callsign”: “Cobalt”, “type”:””, “uri”:””}}’ -H ‘content-type:text/plain;’ http://127.0.0.1:9998/jsonrpc
Destroy
curl –data-binary ‘ {“jsonrpc”:”2.0″, “id”:3, “method”:”org.rdk.RDKShell.1.destroy”, “params”:{“callsign”:”Cobalt”}}’ -H ‘content-type:text/plain;’ http://127.0.0.1:9998/jsonrpc
Trouble Shooting
- Overcoming build time fetch errors:
- If fetch failure occurs for libinput, comment SRC_URI related changes from meta-cmf/recipes-graphics/libinput/libinput_git.bbappend.
- If fetch failure occurs for gst-plugins-ugly,use mirror source, for that comment out SRC_URI related changes from meta-cmf/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_git.bbappend.
- If the wireless networks are not listed in controller wifi page, try after disabling and enabling wifi from Network page, networks will be listed.
- Disable cntlm-main.service if device reboot occasionally.
ERROR: ParseError at …./meta-rdk-video/recipes-extended/ctrlm/ctrlm-xraudio-hal.bb:17: Could not inherit file classes/vsdk-utils.bbclass
Z-Ben Zmood “/meta-rdk-video/recipes-extended/ctrlm” can be masked temporarily till the issue is fixed.