Configuring and Customizing Apps

Baselines

SmartLabs offers service operators a variety of applications for end-user devices that are compatible with the SmartTUBE solution — including set-top boxes, Smart TVs, mobile iOS/Android devices, and web browsers. The user interface (UI) and user experience (UX) of the SmartTUBE applications can be tailored to specific requirements using a set of configuration files outlined in this section.

Customization of applications is divided into two stages:

  • Basic — carried out during the system’s commissioning phase by SmartLabs experts to align with the corporate identity of a service operator;
  • Operational — conducted by the service provider while the system is in operation.

Basic customization enables the operator to make adjustments to the user interface within the existing structure, such as the layout of main components and animation logic. It encompasses the following capabilities:

  • Interface localization — provides for localization of the user interface of SmartTUBE apps into the operator’s language by the operator. English is supported by default. Localization into languages using fonts containing hieroglyphs, Arabic script and other specific alphabets is discussed separately.
  • Operator logo — can be integrated into various parts of the user interface, such as the upper left corner, placeholders, splash screen, and more.
  • Color customization for element selector
  • Animation customization for waiting states

For a comprehensive list of customizable elements, please see here.

Operational customization enables the operator to modify the visual representation of the UI elements (e.g. Home screen, Movies/Series catalogs, Profile menu, etc.) as well as UX parameters. This can be achieved by uploading the correspondent configuration files to devices using the SmartTUBE Device Manager. The variations in operational customization options for different platforms are outlined in the sub-sections.

Format of Configuration Files

Configuration files for the SmartTUBE applications are structured in JSON format. The composition of files and parameters for each SmartTUBE application varies based on the target device platform. You can find their description in the relevant subsections of Configuring &Customizing Apps section.

Priority of Applying Configuration Parameters

The sequence in which the configuration parameters are executed by the application is as outlined below:  

  1. Default settings retrieved from the local file.
  2. Override settings retrieved from the local file.
  3. Override settings uploaded from the SmartTUBE Device Manager.

Thus, the settings specified in the configuration files uploaded from the SmartTUBE Device Manager hold the utmost precedence.

Local configuration files are installed with the app, stored locally on a device in the [app_container]srcconfigs directory and adhere the following format:

{
// Start of default configuration settings

“param_1”: “value_1”,
“param_2”:
“value_2”,
“set_of_params”: {
  “param_3”:
“value_3”,
  “param_4”:
“value_4”
},

// End of default configuration settings

“overrides”: {  // Overriding settings for the configuration parameters above
  “param_2”:  “value_5”,
  “set_of_params.param_3”:
“value_6”
}
}

Utilizing the “overrides” section enables the safe testing of alternative parameter values while maintaining the default settings. For instance:

{
“baseUrl”:
“https://fe1.some.tv/”,
“player”: {
  “startNumberForDVBChannels”:
1000,
  “subtitlesBackgroundStyle”: {
    “color”:
“000000”,
    “opacity”:
50
  },
“overrides”: {
  “baseUrl”:
“https://fe2.some.tv/”,
  “player.startNumberForDVBChannels”:
500,
  “player.subtitlesBackgroundStyle.opacity”:
70
}
}

Settings uploaded to devices via SmartTUBE Device Manager must be included to the “overrides” section. Example:

{
“overrides”: {
  “baseUrl”:
“https://fe2.some.tv/”,
  “player.startNumberForDVBChannels”:
500,
  “player.subtitlesBackgroundStyle.opacity”:
70
}
}

Also, please note, that the following notation:

{
“player”: {
  “subtitlesBackgroundStyle”: {
    “color”:
“000000”
  }
}

is equivalent to this one:

{
  “player.subtitlesBackgroundStyle.color”:
“000000”
}

Differentiation of Parameter Values Depending on Device Specifics

To optimize configuration management, you can specify the dependence of parameter values on the device specifics. Thus, you can distribute one configuration file to all your end-user devices. For example, you can make the fast forwarding on Smart TVs faster than on other devices. To do this, please follow this example, which can be applied to any configuration parameter:

“seekMultiplier”: [  // Configuration parameter
{
  “value”:
1.75,  // Value for the end-user devices filtered by the “rule” parameter
  “rule”:
“platform = cobalt & deviceType = STB & tenant = best_operator | platform = tizen & platformVersion < 4 & authorized = true”
},
{
  “value”:
1.25 // Value for other end-user devices
}
]

The “rule” parameter is the combination of the filters below, that define the target end-user device. You can use the following logic operators to combine filtering parameters: =, <, >, | (or), & (and).

platform, string

Platform of the end-user device. Acceptable values: tizen, webos, cobalt, web.

platformVersion, number

Version of the end-user device’s platform

deviceType, string

Name of the end-user device’s type. The list of acceptable values is determined by the dictionary SmartTUBE Admin Console > Dictionaries > Device types.

tenant, string

Name of the tenant. The list of acceptable values is determined by the dictionary SmartTUBE Admin Console > Administration > Tenants.

authorized, boolean

Flag of the authorization status of a device

Configuring Large-Screen Apps

Primary UI/UX Settings

The primary UI/UX configuration settings of the SmartTUBE Apps for large-screen and Android Mobile Devices are specified within the setup.json file. This pertains to the most recent generation of the SmartTUBE apps, known as SmartTUBE JUNG.

Changes to the setup.json file are applied only after the application is rebooted.

Parameter Description

baseUrl, string

Base backend URL (absolute, ex. https://10.65.50.71)

apiUrl, string

Default value: /api/v1

Path (relative or absolute) for calling methods of the SmartTUBE End-User Device API

getSettingsPath, string

Default value: /managerapi/manager/getSettingsPath?output=json&board=${deviceType}&mac=${uuid}&current_firmware_version=${appMajorMinorVersion}&currentVersion=${appMajorMinorVersion}

Path (relative or absolute) to get configuration parameters.

title, string

Tab title for the SmartTUBE App for Web Browsers

tenant, string

ID of a tenant. It is used in the multi-tenant system configurations to get customized attributes (fonts, logos, other configuration parameters) belonging to the specified tenant.

configsUrl, string

Path (relative or absolute) to the directory with configuration files. Overrides the default one (/configs/).

logoWidth, number

Default width of logo (in rem)

lang, string

Default language of the SmartTUBE app

langs,  array[string_values]

Languages available in the SmartTUBE app

epg, {object}

Settings for EPG preloading

before, integer

Hours before the current moment to preload the EPG

after, integer

Hours after the current moment to preload the EPG

loadMode, string

Initial load mode: column  makes several requests limited by pregroup interval, standard  makes separate requests for each channel.

dvbTimeOffset, number

DVB time offset in seconds

loadEpgFromTVInput, boolean

Flag to load EPG from the DVB input, even for DVB channels mapped by the mapDvbToSdpChannels parameter.

player, {object}

Integrated media player settings

ignoreSkipAdvertTimeoutForPl, boolean

Deprecated starting from JUNG 9.2 and replaced by the disableSkipBanForCurrentProgram parameter.
Flag to prohibit skipping ads for Pause Live programs, even if the Skip Advert Timeout has not expired.

showAdvBlockedPanel, boolean

Deprecated starting from JUNG 9.2. Flag to display the ad rewind panel

nonSkipableAdvInterval, integer

Deprecated starting from JUNG 9.2. The amount of ads the subscriber cannot skip and rewind, in sec. The value -1 prohibits skipping all ads.

maxSaveAdvertismentTimeout, integer

Deprecated starting from JUNG 9.2. Seconds after exiting standby mode during which it is possible to rewind ads (when the “Do not allow rewind ads” option is enabled on the channel).

resetSkipAdvertTimeoutOnSwitch, boolean

Deprecated starting from JUNG 9.2. Flag to reset the Skip Advert Timeout (see Step 3 of the How-to article) every time the subscriber switches a channel (including nPVR):

  • true — reset when switching a channel;
  • false — reset after viewing an ad block.

disableSkipBanForCurrentProgram, boolean

Flag to prohibit skipping ads for the ongoing program, even if the SmartTUBE Admin Console > Dictionaries> Ad skip restriction policies > [selected policy] > Ad Skip Ban Grace Period has not expired. Applicable if only the Pause Live / TSTV feature is enabled for the channel. This parameter replaces the deprecated parameter ignoreSkipAdvertTimeoutForPl.

openChannelTSTVFromStart, boolean

Flag that controls the behavior of the player when processing playlists:

  • true: the player starts playback from the beginning of the playlist
  • false (by default): the player tends to play as close to the end of playlist as possible (in order to minimize the delay for live)

ads, {object}

Settings for interaction with SmartTUBE Advertisement Decision System (ADS)

playback, string

Ad playback method:

  • single — the ad is played in the same video element as the content
  • double — the ad is played in a separate video element

xml, string

Type of the XML parser to process the VMAP data: external or native

skipBufferingAfterZapping, boolean

Skip buffering after zapping

shakaVersion, string

Version of Shaka module to use

playerSelectionRule, [array{object}]

Rules of player selection depending on platform. See the example here.

alwaysShowTvChannelsButton, boolean

Flag to display the “TV channels” button, even if movie is playing.

startSeekSpeed, integer

The initial speed of content rewinding (multiplier). Then it is replaced by the speed of maxSeekSpeed.

maxSeekSpeed, integer

The max speed of content rewinding (multiplier).

seekMultiplier, double

The multiplier to increase the rewind speed by each keypress. For example, a value of 1.5 will increase the multiplier by 1.5 each time a key is pressed.

  • 1
  • 1×1.5 = 1.5
  • 1.5×1.5 = 2.25
  • 2.25×1.5 = 3.375
  • until maxSeekSpeed is reached.

thumbnailWidth, integer

Width (in rem) of the thumbnail displayed above the progress bar during content seeking

thumbnailHeight, integer

Height (in rem) of the thumbnail displayed above the progress bar during content seeking

resetSeekIfThumbnailShownAfterSec, number

The period of the user inactivity, after which the thumbnail over the progress bar is hidden.

allowSeekAfterLive, integer

Period (in seconds) for which it is allowed to fast forward beyond the live moment.

checkProgramAccessLevelWhileSeeking, boolean

Flag to check programs for access level while seeking to avoid displaying thumbnails of restricted content.

limitPrevNonRecordable, integer

The protective period (in seconds) before the non-recordable program, during which recording is also prohibited.

limitNextNonRecordable, integer

The protective period (in seconds) after the non-recordable program, during which recording is also prohibited.

keepAlivePlayEvent, integer

Frequency (in seconds) of sending the keepalive event during content playback.

movieMinTime, integer

The time (in seconds) from which the playback of VoD content should start. For debugging purposes.

minSecToReloadAfterPause, integer

If playback is paused and the period between the pause time and the live time exceeds the specified one (in sec), the application reloads the playlist.

defaultAspectRatio, string

Default aspect ratio. Acceptable values: letterbox, fullscreen, panAndScan. Not applicable to LG WebOS Smart TVs, as they use native aspect ratio settings.

secMediaPositionIgnore, integer

The minimum time (in sec) to watch a movie or nPVR recording to save the media position.

haltPlayerOnError, boolean

Flag to go back in history in case of a player error

openLastViewedChannelOnStartup, boolean

Flag to open the last viewed channel when the application starts.

adaptiveChannelsBitrateIntervals, {object}

Marking the video quality for channels depending on the bitrate of stream variants. See the Example Configuration for the detailed example.

adaptiveVoDBitrateIntervals, {object}

Marking the video quality for CoD content depending on the bitrate of stream variants. See the Example Configuration for the detailed example.  

enableQualityLabelOverride, boolean

Flag to enable the overwriting stream labels of different quality described in the adaptiveChannelsBitrateIntervals and adaptiveVoDBitrateIntervals sections. For example, you can rewrite the stream quality label Excellent as 2160p. See the Example Configuration for the detailed example.

qualityAliases, {object}

Rules of overwriting stream labels of different quality described in the adaptiveChannelsBitrateIntervals and adaptiveVoDBitrateIntervals sections. See the Example Configuration for the detailed example.  

[bitrate_alias_name], string

Overwritten name of the stream quality label. For example, “Excellent”: “2160p”

qualityListAbbr, {object}

Rules of adding the auxiliary visual label for the stream quality labels.

[quality_alias_name], string

Text of the auxiliary visual label. For example, the “2160p”: “4K” pair can be displayed in the player like 2160p4K.

defaultPlayer, string

The player that should be pre-initialized at the start of the application.

playbackOptimizations, {object}

Content playback optimization settings

profile, string

The value of the “profile” argument added to the playlist request to the streaming server (e.g. SmartMEDIA)

shaka, {object}

Playback optimization settings for the Shaka player

ac3ignorer, boolean

Flag to ignore ac3 tracks

notCleanDRM, boolean

Flag not to clean the DRM keys. It is required for WebOS devices with a platform version less than 5.

stopLiveBeforeOpen, boolean

Flag to stop the previous stream for ux.tvChannelOpenTimeout ms before switching on a new channel when channel zapping.

shakadrmWithoutCredentials, boolean 

Flag to disable the withCredentials headers in the playlist/chunk requests in the Shaka player

shakadrmWithoutCredentials, boolean 

Flag to disable any custom headers in the playlist/chunk requests in the Shaka player

cobalt, {object}

Playback optimization settings for the Cobalt player

args.dashAccumulateDynamicManifest, boolean

Flag to accumulate dynamic manifest (i.e. segments that are not presented in the manifest anymore for args.dashAccumulateDynamicManifestDurationMs but not more than time shift buffer size value)

args.dashAccumulateDynamicManifestDurationMs, integer

See the args.dashAccumulateDynamicManifest parameter

args.dashAccumulateDynamicManifestThresholdUs, integer

Threshold for overlaps between segments to be considered as a sequence (if actual overlap is more than this value then new coming segments is considered as a duplicate) during accumulation.

setChannelPositionOnlyPaused, boolean

Flag to save the channel media positions only on pause

enabledDVBChannels, boolean

Flag to enable DVB channels

startNumberForDVBChannels, number

Start of DVB channel numbering

subtitlesBackgroundStyle, {object}

Background subtitles style

color, string

Color hex 000000

opacity, number

Opacity from 0 to 100

subtitlesMarginBottom, number

Subtitles margin bottom, in rem.

logLevel, integer

Logging level of the media player (Shaka Player):

  • 0 — OFF: logging is switched off;
  • 1 — ERROR: there are problems that need to be solved. The error does not stop the app operation as a whole, other requests can work correctly;
  • 2 — WARNING: there are warnings that need to be taken into account. An unexpected action occurred, despite this, the system executed the request;
  • 3 — INFO: important expected actions;
  • 4 — DEBUG: actions needed for the app debugging;
  • 5 — V1: Verbose 1 level (can generate a lot of output);
  • 6 — V2: Verbose 2 level (extremely noisy).

openTVChannelsInPlayerByOkButton, boolean

Flag to open channel list with the “Ok” button on remote control when the player interface is hidden. If false, the “Ok” button will pause the playback.

renderInterfaceAfter, array[{object}]

Interface opening delay depending on the in-app event. It is necessary to launch the player faster.

event, string

In-app event:

  • open — the app launch
  • play — the player launch

timeout, integer

Interface opening delay, in seconds.

showAfterRender, boolean

Flag to show the interface after an event occurrence of after timeout

progressbarMarginX, {object}

Margins of the progress bar relative to the content playback time on the left and right, in rem.

default, {object}

Margins for the channels and CoD

left, integer

right, integer

movie, {object}

Margins for movies

left, integer

right, integer

trailer, {object}

Margins for trailers

left, integer

right, integer

vodStartTimeString, {object}

Settings for displaying the start time of VoD content (to the left of progress bar)

type, string

Type of the time indication:

  • timeFromStart — time elapsed since the movie beginning;
  • timeToEnd — time remaining until the movie end;
  • endTime — total movie duration;
  • none — do not display the start time.

format, string

Default value: [hh:mm]or[mm:ss]

Time format:

  • hh:mm:ss
  • [hh:mm]or[mm:ss]
  • [hh:mm:ss]or[mm:ss]

vodEndTimeString, {object}

Settings for displaying the end time of VoD content (to the right of progress bar)

type, string

Type of the time indication:

  • timeFromStart — time elapsed since the movie beginning;
  • timeToEnd — time remaining until the movie end;
  • endTime — total movie duration;
  • none — do not display the start time.

format, string

Default value: [hh:mm]or[mm:ss]

Time format:

  • hh:mm:ss
  • [hh:mm]or[mm:ss]
  • [hh:mm:ss]or[mm:ss]

messages, {object}

Settings for the system messages

autohideSetRead, boolean

Flag to mark incoming messages as viewed after auto-hiding

usePopupMessageFlag, boolean

Flag to show messages with the field “popupMesssage”: true as a popup.

appVersion, string

SmartTUBE app version

channelContentProvider, string

ID of the TV channels’ provider on the SmartTUBE side. Must match one of the values of the contentProviders.key parameter. By default, “INTERNAL”.

contentProviders, array[{object}]

Settings for the VoD content providers

key, string

Content provider ID on the SmartTUBE side

provider, string

Content provider type:

  • smartlabs
  • megogo
  • go3

config, {object}

Settings for interaction with external content providers. The smartlabs type does not require any settings in this section. The settings for megogo type are provided below:

partnerId, string

Partner ID for interacting with MEGOGO services

salt, string

A key used to generate the authorization request to the billing

publicKey, string

Public key for interacting with MEGOGO services

privateKey, string

Private key for interacting with MEGOGO services

server, string

Default value: “https://api.megogo.net/v1”

URL of the MEGOGO API endpoint

sendSmartlabsHeaders, boolean

Default value for “provider”: “megogo”: true

Default value for “provider”: “go3”: false

Flag to send the x_smartlabs_mac_address and x-smartlabs-request-id headers in requests for the content. To avoid problems with the blocking access to content from external providers (CORS blocking), set the value to false.

ux, {object}

UX settings of the SmartTUBE Apps

silentAutoplayOnBannersAndChannelRail, string

Default value: UserDefinedDefaultFalse

This feature controls the audio behavior of trailer previews on the main banner and current TV show previews on the channel rail.

  • UserDefinedDefaultTrue: Users can manage this setting through the Settings > System > Mute preview menu, previews are muted by default.
  • UserDefinedDefaultFalse: Users can manage this setting through the Settings > System > Mute preview menu, previews are unmuted by default.
  • true: Previews are muted, and users cannot change this setting via the app’s menu.
  • false: Previews are unmuted, and users cannot change this setting via the app’s menu.

mainMenuType, string

Default value: “horizontal”

Type of the Main menu on the Home screen:

  • horizontal: Horizontal text menu
  • vertical: Vertical sidebar

useUpDownArrowsAsChUpDown, string

Feature that allows the user to switch channels using the D-pad on the remote. This is especially useful for Android STB remotes without dedicated “Channel +/-” buttons. Acceptable values:

  • “UserDefinedDefaultTrue”: User can change the feature behavior in the settings menu. Sets the On value in the menu as default.
  • “UserDefinedDefaultFalse”: User can change the feature behavior in the settings menu. Sets the Off value in the menu as default.
  • true (without quotation marks): Feature is enabled, user can’t change the feature behavior in the settings menu, settings menu doesn’t contain this option.
  • false (without quotation marks): Feature is deactivated, user can’t change the feature behavior in the settings menu, settings menu doesn’t contain this option.

androidTvBanners, boolean

Flag to show apps in the Application rail as banners on the large-screen Android devices

showBannersTrailer, boolean

Flag to show trailers when hovering the selector over the top banner on the home screen

hideBannersTitle, boolean

Default value: true

Flag to hide the movie title overlaid on the banner on the Home screen

subscribeOnlyFromService, boolean

Flag to display a dialog box with two options — “Go to Services menu” and “Cancel” — when a user tries to watch a channel that is not subscribed to.

redesignedTv, boolean

Flag to enable the new TV screen

npvrMetadataUrl, string (channel)

Source of metadata for npvr channel or npvr record

movieSubfilterResetButtonAtBottom, boolean

Flag to place the Reset Filter button at the bottom

vodFilterBackgroundColor, string

Background color for the VoD filters

tvProgramFilter, boolean

Flag to display the filter of TV programs by topic

filtersDimensions, {object}

Settings for the filter panel width depending on the current UI language

tv, {object}

Settings for the TV section

filter, {object}

Settings for the main filter panel

{language_id}, integer

Width of the panel for the {language_id} language (defined in the langs parameter), in rem.

default, integer

Width of the panel for other languages, in rem.

subFilter, {object}

Settings for the subfilter panel

{language_id}, integer

Width of the panel for the {language_id} language (defined in the langs parameter), in rem.

default, integer

Width of the panel for other languages, in rem.

movies, {object}

Settings for the Movies/Series sections

filter, {object}

Settings for the main filter panel

{language_id}, integer

Width of the panel for the {language_id} language (defined in the langs parameter), in rem.

default, integer

Width of the panel for other languages, in rem.

subFilter, {object}

Settings for the subfilter panel

{language_id}, integer

Width of the panel for the {language_id} language (defined in the langs parameter), in rem.

default, integer

Width of the panel for other languages, in rem.

speedTest, {object}

Settings for the integrated network speed test

url, string

URL of the test file to download

engine, string

Method for performing HTTP requests:

  • fetch — method for the Cobalt browser;
  • xhr — method for WebOS 3.

duration, integer

 Download cutoff by time, in seconds.

sizeInBytes, integer

Cutoff by the number of bytes downloaded. Required for the Cobalt browser.

useFakePostfix, boolean

Flag to add the request date to the URL to avoid caching on the nearest cache server

channelDigits, integer

The number of digits in the channel numbers

isRecordStartedProgram, boolean

Flag to allow user to record already airing programs

isRecordStartedProgram, boolean

Flag to allow user to record already airing programs

startChannelNumFromZero, boolean

Flag to start channel numbering from 0

keyboardFullscreen, array[{object}]

Layout for the full screen keyboard. Examples: en, ru, lv.

keyboardSearch, array[{object}]

Keyboard layout for the search screen. Examples: search-en, search-ru, search-lv.

playerBackground, boolean

Flag to enable background playback of content on the home screen

replaceLogoOnMovieByProvider, array[string]

List of content providers that determines the replacement of the in-app logo on the movie details page with the content provider’s logo, which is located in the images/icons/logo_${provider.externalId.toLowerCase()}.png directory.

uiDebounceTime, integer

Debounce time (in ms) for fast scrolling of programs in the TV and EPG sections.

preloadProgressWeight, integer

Weight for progress bar preload, depends on channels count.

noTransitionAfterRetrieveTimeout, number

The period for which the animation is disabled after opening some UI page, in msec. You can apply it for a specific page only using a rule with the route argument. For example, { “value”: 5000, “rule”: “route = /tv” }.

showTvLegend, boolean

Flag to show the tip “Change day [CH+] / [CH-]  Watch [Ok]” in the TV section

npvrQuotaStatus, boolean

Flag to show the nPVR quota status in the “My Profile” > “Recordings” section

requirePinOnStart, boolean

Flag to enable PIN code request on app start.

requirePinOnAwake, boolean

Flag to enable PIN code request after waking up from standby mode.

selectChannelOnEpgGridViaRemote, boolean

Flag to move the focus to the channel and the currently aired program in the EPG section when manually entering the channel number (on the RC or PC keyboard)

vodCategoriesVersion, string

VoD categories config version

mosaicBackgroundUrl, string

URL of the background for the channel mosaic view

canRemoveNpvrItem, boolean

Flag to allow the subscriber to delete his nPVR recordings

shouldFilterTracks, boolean

Flag to not display unsupported tracks (by codec) in the player

preferredNativeLangPronounce, boolean

Flag to display the names of audio tracks in the player in the national language (from the /configs/iso-639-1-2.json file)

showXXXMoviesInPurchaseList, boolean

Flag to show movies with the maximum access level in the list of purchased movies

openPlayerOnLastWatched, boolean

Flag to open the player when clicking on the content poster in the “Continue Watching” rail on the home screen

watchedContentDuration, integer

The movie viewing duration (in ms), after which it is considered viewed.

seekingDelayInitial, integer

Delay (in ms) in the payer’s response to the rewind button

seekingDelayLongPress, integer

Delay (in ms) in the player’s response to a long press of the rewind button

ratings, array[string]

Flags to display ratings (IMDB, etc.) on content posters

checkUnsupportedBrowser, boolean

Flag to prohibit the SmartTUBE app launch, if the built-in web browser is not supported by the app. The corresponding info message is displayed to the user.

showIconChannelLock, boolean

Flag to show the unavailability icon (strikethrough, lock, or similar) on the channel inaccessible to the subscriber.

shouldTerminateOnBack, boolean

Flag to close the app by pressing the “Back” button on the Home screen (with a confirmation dialog)

deliveryRuleVisible, boolean

Flag to display the delivery rule labels (“Subscribe”, “Rent”, “Buy”) on content posters

standbyTimers, array[integer_values]

List of standby timers available to the user (separated by comma and specified in hours). The -1 value adds the “Never” option in the SmartTUBE app. Example: “standbyTimers”: [-1, 1, 2, 3, 4] 

defaultStandbyTimer, integer

Standby timer set by default, in hours. The -1 value sets the “Never” option by default.

standbyModalTimer, integer

The number of seconds provided to the user to respond to the message about the automatic shutdown of the device after the expiration of the standby timer.

switchToLiveModalTimerSecs, integer

The time (in sec) of displaying the notification of switching to Live mode when the device detects that the channel is being played in nPVR mode for too long.

playNowProgramFromGrid, boolean

Selecting an action by clicking on the program in the EPG:

  • false — the program details page opens;
  • true — start playback of the program (or channel, if the nPVR record of the program is not available). If the channel is not subscribed, the correspondent dialog is displayed to the subscriber.

alwaysRequirePinOnProfileEdit, boolean

Flag to require the master-profile PIN when editing profiles, regardless of the “Require PIN code” option in the master-profile settings.

setupWizardSteps, array[{object}]

Settings for the setup wizard, launched on STBs at the first start.

key, string

Identifier of the wizard object:

  • language — UI language selection
  • license — license acception
  • baseUrl — base URL of the SmartTUBE Server

licensePath, string

URL of the TXT file with the license text

hidePassword, boolean

Flag to hide the password by bullets on the login screen

useHTMLInputElement, boolean

Type of input elements:

  • true — native (required value for browsers)
  • false — custom

canUnlinkOtherDevices, boolean

Device unlinking feature:

  • true — the current device can unlink other devices
  • false — the current device can unlink itself only

notFoundStatusProcessing, string

The action of the application when the service account state changes to the TRIAL CLOSED:

  • authorize — open the login page;
  • blockedDialog — block the interaction with UI and display the corresponding message;
  • closableBlockedDialog — display the warning message and close the application;
  • webView — not used

showInitialWizardIfAuthorizationFailed, boolean

Flag to open Initial Wizard in case of failed authorization

lowEndDevice, boolean

Flag to disable the UI animation in the player

cacheEnabled, boolean

Flag to cache EPG data in the indexDB

useSystemLangOnStartup, boolean

For Smart TVs only. Flag to use the Smart TV UI language at the first launch of the SmartTUBE app. If the Smart TV UI language is not supported by the app, the default language from the “lang” setting is used.

canOpenLink, boolean

Flag to allow links to be opened

playerInterfaceWakeOnMouse, integer

Delay in mouse pointer response to mouse awakening, ms.

preloadUrls, {object}

Settings for the applications’ preload. Construct a type with a set of properties K of type T

tv

dispose, boolean

preload, number

applications

dispose, boolean

preload, number

grid

dispose, boolean

preload, number

search

dispose, boolean

preload, number

my-feed

dispose, boolean

preload, number

vod

dispose, boolean

preload, number

home

dispose, boolean

preload, number

closableBlockedDialog, boolean

Flag to allow the subscriber to close the “Your service account is closed” dialog box when the state of his account changes to “CLOSED”.

rebootInterval, integer

The waiting time for user actions before the automatic restart after changing the account status to “CLOSED” and displaying the corresponding dialog box, in seconds.

playerResumeDialogTimeout, integer

Time (in sec) to display the dialog “Continue watching from the last saved position?”

showProgramStatusInGrid, boolean

Flag to display the “TSTV”, “NPVR”, “Reminder” labels on programs in the grid EPG

accessLevelType, string

Folder name (in skins) with a set of access levels

paymentRule, string

Reaction to an attempt to play not subscribed/purchased content:

  • sdp — standard subscription/purchase process (via SmartTUBE SDP)
  • webView — open a WebView. The URL for the WebView is configured by the SmartLabs developing team for each customer individually.
  • dialog — open a dialog box with the paymentText or paymentText_{language_code} message and the paymentImage image

paymentText, string

Default text of the dialog box for the “paymentRule”: “dialog”

paymentText_{language code}, string

Localized text of the dialog box for the “paymentRule”: “dialog”. For example, “paymentText_cz”: “Nejste podepsaní. Prosím, zaregistrujte se na našich webových stránkách.”

paymentImage, string

URL of the dialog box image for the “paymentRule”: “dialog”

allowChangeChannelSortType, boolean

Flag to allow to change the sorting type (user / operator) in the channel list

canRenameDevicesOnDevicesPage, boolean

Allow the subscriber to rename linked devices in the Settings > Devices > My device menu

prependEpisodeNameWithSeasonEpisodeNumbers, boolean

Flag to hide the prefix S(# of season)E(# of episode) before the episode name in the player and list of episodes.

searchHistoryBufferSize, integer

Number of items in the search history

searchHintsSize, integer

Number of the search suggestions

emptySearchHintsSize, integer

Number of the search suggestions for the empty search

mediaPositionLimit, {object}

The maximum number of media positions in the “Continue watching …” rails for movies, TSTV programs, and nPVR recordings.

meta, integer

The maximum number of media positions for the “Continue watching movies” rail

tstv, integer

The maximum number of media positions for the “Continue watching programs” rail

npvr, integer

The maximum number of media positions for the “Continue watching recordings” rail

useNewMy, boolean

Flag to enable the new “My” screen

toggleActiveIcons, boolean

Flag to use the active/inactive icons

grid, {object}

EPG Grid settings

movies, {object}

Grid settings for movies

itemsSpacingBottom, number

showPlayerInGrid, boolean

Flag to display the mini-player on the EPG screen. It displays the ongoing TV show above the program guide next to the program description.

epgGridLeft, number

Left border of the EPG Grid from the current moment, in minutes.

epgGridScale, number

Width of the EPG Grid, in minutes.

remoteEventThrottleTime, number

Throttle time for a remote control

showDvrBadgeOnChannels, boolean

Show DVR badges on a channel

showVODTotalCount, boolean

Show the total count of VoD items

keysUrl, {object}

Key to URL mapping. Allowed values: home, tv, grid, mosaic, video-libraries, movies, applications, applications/weather, applications/currencies, applications/radio, radio, settings, settings/profile/:id, continue-watching, player/:mode/:id, player, program/:id, movie/:id, npvr/:id, my-feed, my, search, profiles.

showProfileSelectOnHome, boolean

Flag to display the Profile switching icon on the Home screen

hideSendReportButton, boolean

Flag to hide the Send Peport button in the Settings menu

tvChannelOpenTimeout, integer

Delay to wait for the key event (e.g. RC button press) before enable a channel stream, in ms.

showLoginHint, boolean

Default value: false

Flag to display a tooltip on the login page

loginFailureMsgTimeout, integer

Default value: 1500

Time for displaying a tooltip when a user attempts to log in unsuccessfully, in ms.

date, {object}

Date and time format for various UI objects. Please, use a time pattern string of the format described here: https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

date, string

Date format for the Purchases page

defaultFormat, string

Default date format

epgheader, string

Date header format for the TV page

gridDate, string

Date format for the pointer in the upper left corner of the EPG grid

messageDate, string

Date format for the list of messages

programdate, string

Date format for the list of program series and program reminder

programinfo, string

Date format for the program details page

statusbar, string

Date format for the status bar

time, string

Date format for the start/end date of the program in the player, program time in the EPG grid, and on the Purchases page (when the program is purchased).

timeSeconds, string

Date format for the media positions and status bar pointer in the player when rewinding

npvrProgramInfo, string

Date format for the nPVR program details page

npvrFeed, string

Date format for the nPVR program rail (“Continue watching” )

availableTill, string

Format for the date of availability of a package/subscription

dateTime, string

Date format for the programs on the Search page

weatherInfo, string

Date format for the weather forecast

weatherForecastInfo, string

Date format for the weather forecast details

currenciesInfo, string

Date format for the current exchange currency rate

currenciesChart, string

Date format for the exchange currency rate chart

shortDateFormat, string

Default value: “EEE dd MMM”

Date format for the SmartTUBE apps for mobile devices (starting from v8.xx). Date, not time. Please, specify time format with the timeFormat parameter.

timeFormat, string

Default value: “HH:mm”

Time format for the SmartTUBE apps for mobile devices (starting from v8.xx)

brandName, string

Operator’s brand name for the Support page

operatorPage, string

URL of the operator web site for the Support page

operatorSupportPhone, string

Operator tech support phone number for the Support page

operatorEmail, string

Operator e-mail address for the Support page

mobileQRCodeUrl, string

URL of the QR code with a link to the operator’s SmartTUBE app for mobile iOS/Android devices

mediaPlayersConfigs, {object}

Settings for integrated media players

shaka, {object}

Settings for the Shaka player. Most of parameters in this sections are bounded to the same-name parameters of the Shaka player’s original config. Their description can be found here.

streaming, {object}

Settings of the stream processing

bufferBehind, integer

The amount of content the player keeps in buffer behind the playhead. For example, if this is 30, the player keeps 30 seconds of content buffered behind the video’s current time. When it have more than 30 seconds buffered behind, content will be removed from the start of the buffer to save memory. This is a minimum; if the stream’s max segment size is longer than the bufferBehind, then that will be used instead.

bufferingGoal , integer

The amount of content the player tries to buffer. For example, if this is set to 30, the player fetches segments until it have at least 30 seconds buffered.

safeSeekOffset, integer

The amount of seconds that should be added when repositioning the playhead after falling out of the availability window or seek. This gives the player more time to buffer before falling outside again, but increases the forward jump in the stream skipping more content. This is helpful for lower bandwidth scenarios. Defaults to 5 if not provided.

inaccurateManifestTolerance, integer

The maximum difference, in seconds, between the times in the manifest and the times in the segments. Larger values allow us to compensate for more drift (up to one segment duration). Smaller values reduce the incidence of extra segment requests necessary to compensate for drift.

stallEnabled, boolean

When set to true, the stall detector logic will run. If the playhead stops moving for stallThreshold seconds, the player will either seek or pause/play to resolve the stall, depending on the value of stallSkip.

stallThreshold, number

The maximum number of seconds that may elapse without the playhead moving (when playback is expected) before it will be labeled as a stall.

stallSkip, number

The number of seconds that the player will skip forward when a stall has been detected. If 0, the player will pause and immediately play instead of seeking. A value of 0 is recommended and provided as default on TV platforms (WebOS, Tizen, Chromecast, etc).

rebufferingGoal, number

The minimum number of seconds of content that the StreamingEngine must buffer before it can begin playback or can continue playback after it has entered into a buffering state (i.e., after it has depleted one more more of its buffers).

manifest, {object}

Settings of the manifest processing

defaultPresentationDelay, integer

A default presentationDelay (native Shaka setting) value. For DASH, it’s a default presentationDelay value if suggestedPresentationDelay (native Shaka setting) is missing in the MPEG DASH manifest. The default value is 1.5 * minBufferTime (native Shaka setting) if not configured or set as 0. For HLS, the default value is 3 segments duration if not configured or set as 0. For more details, please see the link: https://shaka-player-demo.appspot.com/docs/api/shaka.extern.html

dash, {object}

Settings for the DASH manifest processing

ignoreMinBufferTime, boolean

If true will cause the DASH parser to ignore minBufferTime (native Shaka setting) from manifest. It allows player config to take precedence over manifest for rebufferingGoal (native Shaka setting). Defaults to false if not provided. For more details, please see the link: https://shaka-player-demo.appspot.com/docs/api/shaka.extern.html

disableXlinkProcessing, boolean

If true, xlink-related processing will be disabled. Defaults to false if not provided.

abr, {object}

defaultBandwidthEstimate, integer

The default bandwidth estimate to use if there is not enough data, in bit/sec.

restrictions, {object}

An object describing application restrictions on what tracks can play. All restrictions must be fulfilled for a track to be playable/selectable. The restrictions system behaves somewhat differently at the ABR level and the player level, so please refer to the documentation for those specific settings. See also the description of the “rule” parameter and configuration example.

value, {object} 

List of restrictions.

minWidth, number

The minimum width of a video track, in pixels.

maxWidth, number

The maximum width of a video track, in pixels.

minHeight, number

The minimum height of a video track, in pixels.

maxHeight, number

The maximum height of a video track, in pixels.

minPixels, number

The minimum number of total pixels in a video track (i.e. width * height).

maxPixels, number

The maximum number of total pixels in a video track (i.e. width * height). For Tizen and WebOS platforms, you can set the value to 2073600 (1920х1080) or 1296000 (1080х720) if needed.

minFrameRate, number

The minimum framerate of a variant track.

maxFrameRate, number

The maximum framerate of a variant track.

minBandwidth, number

The minimum bandwidth of a variant track, in bit/sec.

maxBandwidth, number

The maximum bandwidth of a variant track, in bit/sec.

hlsjs, {object}

Settings for the HLS.js player (https://hls-js.netlify.app/demo/)

maxBufferLength, integer

Maximum buffer length in seconds. If buffer length is/become less than this value, a new fragment will be loaded. This is the guaranteed buffer length hls.js will try to reach, regardless of maxBufferSize.

maxMaxBufferLength, integer

Maximum buffer length in seconds. Hls.js will never exceed this value, even if maxBufferSize is not reached yet.

hls.js tries to buffer up to a maximum number of bytes (60 MB by default) rather than to buffer up to a maximum nb of seconds. This is to mimic the browser behaviour (the buffer eviction algorithm is starting after the browser detects that video buffer size reaches a limit in bytes)

maxBufferLength is the minimum guaranteed buffer length that hls.js will try to achieve, even if that value exceeds the amount of bytes 60 MB of memory. maxMaxBufferLength acts as a capping value, as if bitrate is really low, you could need more than one hour of buffer to fill 60 MB.

maxBufferSize, integer

‘Minimum’ maximum buffer size in bytes. If buffer size upfront is bigger than this value, no fragment will be loaded.

cobalt, {object}

Settings for the Cobalt player

args, {object}

General settings

allowLivePlaybackSpeedControl, boolean

Default value: false

Flag to allow control over the playback speed during live playback

restorePosOnRestart, boolean

Flag to restore the playback position on restart

networkBitrateLimit, number (long)

Maximum bitrate allowed for network playback

networkBitrateLimitContentCoeff, number (float)

Content coefficient for the network bitrate limit

dashAccumulateDynamicManifest, boolean

Flag to accumulate dynamic manifest (i.e. segments that are not presented in the manifest anymore for args.dashAccumulateDynamicManifestDurationMs but not more than time shift buffer size value)

dashAccumulateDynamicManifestDurationMs, number

See the args.dashAccumulateDynamicManifest parameter

dashAccumulateDynamicManifestThresholdUs, number

Threshold for overlaps between segments to be considered as a sequence (if actual overlap is more than this value then new coming segments is considered as a duplicate) during accumulation.

player, {object}

Player settings

quickStart, boolean

  • true: Re-use decoder and DRM sessions from previous stream if possible.
  • false: Always reinitialize player.

Recommended to set false while debugging stream start issues.

webos, {object}

Settings for the WebOS environment

tizen, {object}

Settings for the Tizen environment

sml, {object}

Settings for the SmartLabs sml STBs

kreatv, {object}

Settings for the KreaTV platform.

ficusAddress, string

HTTP address:port of the Ficus.

DashConfig, {object}

Config on how to handle the DASH protocol.

Manifest, {object}

Configuration on how to handle the manifest file.

Retry, {object}

Retry parameters to download the MPD file.

@attributes.maxAttempts, integer

Specify the number of attempts to retry downloading a file on failure. If the value is 2, the maximum number of download attempts will be 3. If the value is 0, never retry downloading on failure.

@attributes.interval, integer

Specifies the time delay (in milliseconds) before the next attempt at downloading the same file.

Stream, {object}

Configuration on how to handle stream segments.

@attributes.initialSelectionStrategy, string

The strategy on how to select the first stream to play in DASH:

  • maintain_bandwidth: The Representations are selected by referring to the bandwidth of the Representations played in the previous session. If this is the first playback, the lowest_bandwidth strategy is applied. If the stream is from a URL different from that of the last DASH playback, the lowest_bandwidth strategy is applied.
  • lowest_bandwidth: The Representation with the lowest bandwidth in the candidate Adaptation Sets will be selected. For video, if HEVC Adaptation Set exists, the candidates are the HEVC Adaptation Sets; otherwise, all video Adaptation Sets are candidates.

@attributes.bandwidthSelectionMode, string

Specifies the mode of DASH bandwidth selection algorithm in Adaptive Bit-Rate (ABR) playback. The algorithm selects proper bandwidth based on bit rate measurement and buffer level:

  • standard: Select a bandwidth that is less than and closest to the measured bit rate (after smoothing).
  • conservative: Select a lower bandwidth than that of “standard” mode in order to keep a higher buffer level and be less likely to underflow in case of poor network performance.
  • auto: The algorithm will start in “standard” mode, but can toggle to “conservative” if the bandwidth measurements are inconsistent.

Retry, {object}

Retry parameters to download media segments.

@attributes.maxAttempts, integer

Specify the number of attempts to retry downloading a file on failure. If the value is 2, the maximum number of download attempts will be 3. If the value is 0, never retry downloading on failure.

@attributes.interval, integer

Specifies the time delay (in milliseconds) before the next attempt at downloading the same file.

MinBufferTime, integer

The minimum amount of content (in milliseconds) to buffer before starting DASH playback. The value can be set to -1, 0, or a positive integer.

  • -1: Apply the minBufferTime attribute parsed from DASH MPD.
  • 0: Start playback when the first I-Frame has been received.

BufferTimeAhead, integer

Defines the desired amount of content (in milliseconds) to buffer from the current position for DASH playback. The value should be larger than the value of MinBufferTime.

Specifying a too low value might affect the playback experience in case of network jerkiness, while a too large value may cause the STB to be busy in downloading segments at the start of playback.

If the value is so large that the memory reserved for DASH playback is not enough, the prebuffering stops when buffer is full. If the value is less than the minimum buffer time (defined by the MinBufferTime element of this configuration, or the MPD attribute minBufferTime when the value of MinBufferTime is -1), STB will choose the larger one of twice the minimum buffer time and the default value.

ResolutionLimitation, string

Defines the maximum resolution of playback representation. If no representation is within the limitation, the representation with the lowest resolution will be selected. If the value is not defined, then the representation is selected automatically, based on the bandwidth, resolution and codec, etc. Acceptable values:

  • SD: The maximum resolution of playback representation is 720×576.
  • HDready: The maximum resolution of playback representation is 1366×768.
  • HD: The maximum resolution of playback representation is 1920×1080.
  • UHD: The maximum resolution of playback representation is 3840×2160.

[channel ID], {object}

Integrated media player settings depending on a channel

[npvr program ID], {object}

Integrated media player settings depending on an nPVR program

[movie ID], {object}

Integrated media player settings depending on a movie

[trailer ID], {object}

Integrated media player settings depending on a trailer

[radio channel ID], {object}

Integrated media player settings depending on a radio channel

googleReCaptchaConfig, {object}

Settings for interaction with the Google ReCaptcha service

publicKey, string

Public key for interaction with the service

privateKey, string

Private key for interaction with the service

showLoginCaptcha, boolean

Flag to enable the Google ReCaptcha at the login stage

analyticsProviders, array[{object}]

Settings of analytics providers

provider, string

ID of the analytics provider

config, {object}

Individual settings for specified analytics provider

url, string

Endpoint URL of the analytics provider

timeout, integer

Analytics provider response timeout, in ms.

batchInterval, integer

Interval of batch sending of CHUNK_LOADED events to SmartCARE, in seconds. Allows the network stack not to be overloaded by sending single events. If 0, the event is sent with every chunk. Used only if “analyticsProviders.provider”: “smartcare”.

sendChunkUrl, boolean

Flag to send the chunk URL (the url parameter) within the CHUNK_LOADED event to SmartCARE. Used only if “analyticsProviders.provider”: “smartcare”.

sendPlaylistUrl, boolean

Flag to send the playlist URL (the url parameter) within the PLAYLIST_LOADED event to SmartCARE. Used only if “analyticsProviders.provider”: “smartcare”.

cpuCheckInterval, integer

Periodicity of sending CPU_LOAD event to SmartCARE, in sec. The event is sent, if only the current measured CPU usage value differs from the previous one. The difference between these values, which is sufficient to send the event, is set by the parameter cpuPercentsDiff. Used only if “analyticsProviders.provider”: “smartcare”.

cpuPercentsDiff, integer

Percentage difference between the current and previous values of CPU usage, which is sufficient to send the CPU_LOAD event to SmartCARE (see the cpuCheckInterval parameter). If set 0, the event is sent just by timer with the cpuCheckInterval periodicity. Used only if “analyticsProviders.provider”: “smartcare”.

memCheckInterval, integer

Periodicity of sending MEMORY event to SmartCARE, in sec. The event is sent, if only the current measured RAM usage value differs from the previous one. The difference between these values, which is sufficient to send the event, is set by the parameter memPercentsDiff. Used only if “analyticsProviders.provider”: “smartcare”.

memPercentsDiff, integer

Percentage difference between the current and previous values of RAM usage, which is sufficient to send the MEMORY event to SmartCARE (see the memCheckInterval parameter). If set 0, the event is sent just by timer with the memCheckInterval periodicity. Used only if “analyticsProviders.provider”: “smartcare”.

memThresholdCheckInterval, integer

Periodicity of sending MEMORY_THRESHOLD event to SmartCARE, in sec. The event is sent, if only the current measured RAM usage value differs from the previous one. Used only if “analyticsProviders.provider”: “smartcare”.

wifiCheckInterval, integer

Periodicity of sending WIFI_STRENGTH event to SmartCARE, in sec. The event is sent, if only the current measured value of Wi-Fi signal strength differs from the previous one. The difference between these values, which is sufficient to send the event, is set by the parameter wifiPercentsDiff. Used only if “analyticsProviders.provider”: “smartcare”.

wifiPercentsDiff, integer

Percentage difference between the current and previous values of Wi-Fi signal strength, which is sufficient to send the WIFI_STRENGTH event to SmartCARE (see the wifiCheckInterval parameter). If set 0, the event is sent just by timer with the wifiCheckInterval periodicity. Used only if “analyticsProviders.provider”: “smartcare”.

bufsizeCheckInterval, integer

Periodicity of sending BUF_SIZE event to SmartCARE, in sec. The event is sent, if only the current measured value of buffer size differs from the previous one. The difference between these values, which is sufficient to send the event, is set by the parameter bufsizePercentsDiff. Used only if “analyticsProviders.provider”: “smartcare”.

bufsizePercentsDiff, integer

Percentage difference between the current and previous values of Wi-Fi signal strength, which is sufficient to send the BUF_SIZE event to SmartCARE (see the bufsizeCheckInterval parameter). If set 0, the event is sent just by timer with the bufsizeCheckInterval periodicity. Used only if “analyticsProviders.provider”: “smartcare”.

storageCheckInterval, integer

Periodicity of sending STORAGE_STATS event to SmartCARE, in sec. The event is sent, if only the current measured values of storage directories differs from the previous ones. Used only if “analyticsProviders.provider”: “smartcare”.

keepAliveInterval, integer

Periodicity of sending KEEP_ALIVE event to SmartCARE, in sec. Used only if “analyticsProviders.provider”: “smartcare”.

excludeEvents, array of strings

List of events not to send to SmartCARE. Allowable values are names of events in the SmartCARE End-User Device API (the e argument). Example: [“CHUNK_LOADED”, “PLAYLIST_LOADED”]. Used only if “analyticsProviders.provider”: “smartcare”.

loggerUrl, integer

URL of the logging server. You may send logs of the application (logLevel) only and logs of the Shaka media player additionally (player.logLevel).

logLevel, integer

Application’s logging level:

  • 0 — ERROR: there are problems that need to be solved. The error does not stop the app operation as a whole, other requests can work correctly;
  • 1 — WARNING: there are warnings that need to be taken into account. An unexpected action occurred, despite this, the system executed the request;
  • 2 — LOG: normal actions;
  • 3 — INFO: important expected actions;
  • 4 — DEBUG: actions needed for the app debugging;

drmTokenLazyThreshold, integer

Number of seconds before the expiration time of the DRM key to request its update

awakerConfig, {object}

Config for delayed network check on device wakeup

delayBetweenAwakingAndCheckingNetwork, number

forceAwakeDelay, number

cache, {object}

Setting of caching the movies’ and programs’ metadata

programByID, {object}

max, integer

Number of last added programs to store in the cache

metaByID, {object}

max, integer

Number of last added movies to store in the cache

sendSmartlabsIdHeader, boolean

Flag to include the “X-Smartlabs-Request-ID” header in each request to the SmartTUBE. This header contains a unique UUID for each request, which is used for end-to-end numbering of requests passing from end-user devices to SmartTUBE.

sendSmartlabsIdPlayerHeader, boolean

Flag to include the “http_x_smartlabs_mac_address” header in each request to the SmartTUBE

delayEpgUpdatesWhileContentIsPlaying, boolean

Flag to postpone the EPG update (upon notification) when the player is playing the content (to avoid lagging the player).  

useJwtAuth, boolean

Flag to use the JWT authorization

storeRedirect, {object}

Links to the app page in the app stores when opening the interface (redirect)

googlePlay, string

Link to the Google Play Market

appStore, string

Link to the Apple App Store

uhdSeparatePlatform, boolean

For Cobalt. Flag to send deviceType=ANDROIDTVUHD or ANDROIDTV depending on supported resolution by device or depending the setting Settings > System > UHD TV Support.

deviceTypeOverride, {object}

Settings for overriding the deviceType=ANDROIDTVUHD or ANDROIDTV arguments. See the uhdSeparatePlatform parameter.

ANDROIDTVUHD, string

Overriding the ANDROIDTVUHD device type

ANDROIDTV, string

Overriding the ANDROIDTV device type

androidDeviceType, string

Device type returned by device in the deviceType parameter when communicating via SmartTUBE End-User Device API.

supportDeviceTypeChange, boolean

Flag to display the Device Type option with the following values in the Settings menu:

  • IPTV (default) — returns STB in the deviceType parameter when communicating via SmartTUBE End-User Device API;
  • OTT — returns OTTSTB.

If false, the device returns STB.

useUHDDeviceType, boolean

Flag to display the My service option with the following values in the Settings menu:

  • Multi-Screen TV — returns ANDROIDTVUHD in the deviceType parameter when communicating via SmartTUBE End-User Device API. Can be overridden using the androidUHDDeviceType property in the Server section.
  • Multi-Screen Lite — returns ANDROIDTV.

The app tries to detect UHD support for the device when it first starts up and sets Multi-Screen TV as the default setting.

terminalName, string

Set this string as terminalName on authorization if set

langToIso, {object}

Construct a type with a set of properties K of type T

profile, {object}

User profile settings

force, boolean

Flag for forcing the settings of the profile section:

  • falsethe settings are applied only when the application is launched for the first time. On subsequent launches, the settings saved in local storage are applied.
  • true the settings are applied on the first and subsequent launches. The settings in local storage are ignored.

disableSubtitles, boolean

Flag to disable subtitles by default

textTrackSort, array of {“type”:”string”}

Default sorting of subtitle tracks. For example, “textTrackSort”: [“sq”, “en”]

userTextTrackSort, boolean

Flag to use the sorting set by the textTrackSort parameter

audioTrackSort, array of {“type”:”string”}

Default sorting of audio tracks by language. For example, “audioTrackSort”: [“sq”, “en”]

userAudioTrackSort, boolean

Flag to use the sorting set by the audioTrackSort parameter

doubleOkClosesTvPane, boolean

Flag for configuring the closing of the TV channel panel in the player by clicking the OK button on the remote control:

  • true Up and Down buttons only scroll through the channel list, the first OK click starts the channel broadcast, the second OK click closes the panel;
  • false — channels are switched when scrolling through the channel list using the Up and Down buttons, the first OK click closes the panel.

preferredAudioCodecList, string

For STBUI only. Default sorting of audio tracks by a codec. For example, “preferredAudioCodecList”: “aac,mpeg2”. The values must match the codecs parameter of the audio track.

mapDvbToSdpChannels, boolean

Flag to map DVB channels to the SmartTUBE SDP channels. This way you can use the channel icons and descriptions for DVB channels from the SmartTUBE SDP.

pushNotificationsEnabled, boolean

Flag to enable the Push notifications for the Simple and Event-driven notifications by default

showLoginCaptcha, boolean

Default value: false

Flag to enable the captcha on the Log in screen

maxRunTime, number

Default value: -1 (not set)

The STB uptime (in hours) after which the SmartTUBE app restarts after returning from standby mode. The STB does not restart in run mode, even after the specified uptime has elapsed. Applicable for STBs with STBUI app only.

registerHelp, {object}

Settings for the info button (“How to register?”, “Help”, etc.) on the authorization page. Example:

“registerHelp”: {
“el”: {
  “label”:
“πώς να εγγραφείτε?”,
  “url”:
“base://license.txt”
},
“en”: {
  “label”:
“How to register?”,
  “url”:
“base://license.txt”
},
“ru”: {
  “label”:
“Rак зарегистрироваться?”,
  “url”:
“base://license.txt”
}

}

[language_id], {object}

Button label and text settings for the UI language specified by the {language_id}. Language is defined by 2-letter language code ISO 639-1:2002.

label, string

Button label

url, string

URL of the text to be opened when the button is clicked

licensePath, {object}

Simplified settings for the license text displayed in the setup wizard. Example:

[language_id], string

URL of the license text to be opened for the UI language specified by [language_id]. Language is defined by 2-letter language code ISO 639-1:2002.

licensePath, string

URL of the license text to be opened in the setup wizard. Example: “licensePath”: “base:///license.txt”

noScrollPastInGrid, boolean

Flag to disable scrolling back in time in the EPG grid

showBannersTrailerWithoutOffset, boolean

Flag to take in account the aspect ratio of the movie trailer when displaying it on the Home screen under the trailer-enabling banner. If true, the application takes into account the aspect ratio of the stream and, based on it, displays the video in width on the full screen, and in height — from the top edge of the screen to the value calculated by the aspect ratio of the video stream. For example, if the trailer has an aspect ratio of 21:9, the image will be pushed to the top edge and there will be a black bar at the bottom.

syslog, {object}

Logging settings for syslog

params, [array{object}]

Parameters of the syslog configuration. Recommended configuration:

// Note: JSON is an uncommented format. Please remove the comments below in the actual configuration to avoid malfunctions.

“syslog”: {
“params”: [
  {
    “name”:
“Device.SyslogClient.Enabled”, // Flag to enable the syslog data transferring
    “type”:
“xsd:boolean”,
    “val”:
“1” // 1 – enabled; 0 – disabled
  },
  {
    “name”:
“Device.SyslogClient.Protocol”, // Protocol for transferring logs to the server
    “type”:
“xsd:string”,
    “val”:
“tcp” // tcp or udp
  },
  {
    “name”:
“Device.SyslogClient.ServerHost”, // Host name of a server receiving the syslog data
    “type”:
“xsd:string”,
    “val”:
“elkexample.net”
  },
  {
    “name”:
“Device.SyslogClient.ServerPort”, // Port of a server receiving the syslog data
    “type”:
“xsd:unsignedInt”,
    “val”:
“10514”
  },
  {
    “name”:
“Device.SyslogClient.Format”, // Format of the syslog data
    “type”:
“xsd:string”,
    “val”:
“syslog-ng”
  },
  {
    “name”:
“Device.SyslogClient.UseMac”, // Flag to use the device’s MAC address
    “type”:
“xsd:boolean”,
    “val”:
“1”
  }
 
  ]

}

isDownloadOfflineEnabled, boolean

Default value: false

Flag to allow users to download VoD content to a device and watch it offline. To enable this feature, the VoD content asset must have the downloadEnabled property enabled (SmartTUBE Admin Console > Content > Movies / Episodes > [specific movie details] > Assets tab > [specific asset details] > Download enabled option).

Example Configuration

{
“baseUrl”:
“”,
“apiUrl”:
“/api/v1”,
“getSettingsPath”:
“/managerapi/manager/getSettingsPath?output=json&board=${deviceType}&mac=${uuid}&current_firmware_version=${appMajorMinorVersion}&currentVersion=${appMajorMinorVersion}”,
“title”:
“”,
“tenant”:
“”,
“configsUrl”:
“”,
“lang”:
“en”,
“langs”: [
 
“en”,
 
“ru”
],
“epg”: {
  “before”:
5,
  “after”:
5
 
},
“player”: {
  “ads”: {
    “playback”: [
      { “value”:
“single”
      }
    ],
    “xml”: [
      { “value”:
“external”,
       “rule”:
“platform = cobalt”
      },
      {
        “value”:
“native”
      }
    ]
   
  },
  “maxSaveAdvertismentTimeout”:
3600,
  “startSeekSpeed”:
5,
  “maxSeekSpeed”:
60,
  “seekMultiplier”:
1.2,
  “thumbnailWidth”:
0,
  “thumbnailHeight”:
0,
  “allowSeekAfterLive”:
300,
  “checkProgramAccessLevelWhileSeeking”:
true,
  “limitPrevNonRecordable”:
300,
  “limitNextNonRecordable”:
300,
  “keepAlivePlayEvent”:
120,
  “movieMinTime”:
2,
  “minSecToReloadAfterPause”:
10,
  “defaultAspectRatio”: [
    {
      “value”:
“fullscreen”,
      “rule”:
“platform = webos”
     
    },
    {
      “value”:
“letterbox”
     
    }
   
  ],
  “secMediaPositionIgnore”:
60,
  “openLastViewedChannelOnStartup”:
false,
  “adaptiveChannelsBitrateIntervals”: {
    “AVERAGE”: [
     
-1,
     
512000
    ],
    “GOOD”: [
     
512001,
     
1228800
    ],
    “HIGH”: [
     
1228801,
     
2867200
    ],
    “EXCELLENT”: [
     
2867201,
     
-1
    ]
   
  },
  “adaptiveVoDBitrateIntervals”: {
    “VERY_LOW”: [
     
-1,
     
600000
    ],
    “LOW”: [
     
600001,
     
1200000
    ],
    “AVERAGE”: [
     
1200001,
     
1400000
    ],
    “GOOD”: [
     
1400001,
     
1800000
    ],
    “HIGH”: [
     
1800001,
     
2800000
    ],
    “EXCELLENT”: [
     
2800001,
     
-1
    ]
   
  },
  “defaultPlayer”: [
    {
      “value”:
“shaka”
     
    },
    {
      “value”:
“cobalt”,
      “rule”:
“platform = cobalt”
     
    }
   
  ],
  “playbackOptimizations”: {
    “shaka”: {
      “ac3ignore”: [
        {
          “value”:
false
         
        },
        {
          “value”:
true,
          “rule”:
“platform = tizen & platformVersion < 4 & platform = tizen & platformVersion > 2”
         
        }
       
      ],
      “notCleanDRM”: [
        {
          “value”:
false
         
        },
        {
          “value”:
true,
          “rule”:
“platform = webos & platformVersion < 5”
         
        }
       
      ]
     
    }
   
  },
  “logLevel”:
0,
  “openTVChannelsInPlayerByOkButton”:
false,
  “renderInterfaceAfter”: [
    {
      “value”: {
        “event”:
“play”,
        “timeout”:
6
       
      }
     
    },
    {
      “value”: {
        “event”:
“open”,
        “timeout”:
1
       
      },
      “rule”:
“platform = browser | platform = cobalt”
     
    }
   
  ],
  “progressbarMarginX”: {
    “default”: {
      “left”:
5,
      “right”:
5
    }
   
  },
  “vodStartTimeString”: {
    “type”:
“timeFromStart”,
    “format”:
“[hh:mm]or[mm:ss]”
   
  },
  “vodEndTimeString”: {
    “type”:
“timeToEnd”,
    “format”:
“[hh:mm]or[mm:ss]”
   
  }
 
},
“messages”: {
  “autohideSetRead”:
true,
  “usePopupMessageFlag”:
false
 
},
“appVersion”:
“desktop”,
“channelContentProvider”:
“INTERNAL”,
“contentProviders”: [
  {
    “key”:
“INTERNAL”,
    “provider”:
“smartlabs”,
    “config”: {
    }
   
  }
 
],
“ux”: {
  “subscribeOnlyFromService”:
false,
  “tvProgramFilter”:
true,
  “filtersDimensions”: {
    “tv”: {
      “filter”: {
        “default”:
11
       
      },
      “subFilter”: {
        “default”:
16
       
      }
     
    },
    “movies”: {
      “filter”: {
        “default”:
14
       
      },
      “subFilter”: {
        “default”:
15
       
      }
     
    }
   
  },
  “speedTest”: {
    “url”:
“${baseUrl}/speedtest.dat”,
    “engine”: [
      { “value”:
“xhr”,
       “rule”:
“platform = webos”
      },
      {
        “value”:
“fetch”
      }
    ],
    “duration”:
10000,
    “sizeInBytes”:
1e7,
    “useFakePostfix”:
true
   
  },
  “channelDigits”:
3,
  “isRecordStartedProgram”:
true,
  “keyboardFullscreen”: [
  ],
  “keyboardSearch”: [
  ],
  “playerBackground”: [
    {
      “value”:
true
     
    },
    {
      “value”:
false,
      “rule”:
“platform = webos | platform = tizen | platform = hisense”
     
    }
   
  ],
  “replaceLogoOnMovieByProvider”: [
    ‘hbo’,
    ‘tvbox’,
    ‘megogo’
  ],
  “uiDebounceTime”:
600,
  “showTvLegend”:
false,
  “npvrQuotaStatus”:
true,
  “requirePinOnStart”:
true,
  “requirePinOnAwake”:
true,
  “selectChannelOnEpgGridViaRemote”:
false,
  “vodCategoriesVersion”:
“v2”,
  “mosaicBackgroundUrl”:
“assets/background-m.png”,
  “beanfieldEPG”:
false,
  “isUseOldNpvr”:
false,
  “canRemoveNpvrItem”:
true,
  “shouldFilterTracks”:
false,
  “preferredNativeLangPronounce”:
true,
  “showXXXMoviesInPurchaseList”:
true,
  “openPlayerOnLastWatched”:
false,
  “watchedContentDuration”:
90,
  “seekingDelayInitial”: [
    {
      “value”:
400
     
    },
    {
      “value”:
600,
      “rule”:
“platform = webos & platformVersion < 5”
     
    }
   
  ],
  “seekingDelayLongPress”: [
    {
      “value”:
700
     
    },
    {
      “value”:
10000,
      “rule”:
“platform = webos & platformVersion < 5”
     
    }
   
  ],
  “ratings”:
false,
  “checkUnsupportedBrowser”: [
    {
      “value”:
true,
      “rule”:
“platform = browser”
     
    },
    {
      “value”:
false
     
    }
   
  ],
  “showIconChannelLock”:
true,
  “shouldTerminateOnBack”:
false,
  “deliveryRuleVisible”:
true,
  “standbyTimers”: [
   
1,
   
2,
   
3,
   
4
  ],
  “defaultStandbyTimer”:
2,
  “standbyModalTimer”:
300,
  “switchToLiveModalTimerSecs”:
30,
  “playNowProgramFromGrid”:
false,
  “alwaysRequirePinOnProfileEdit”:
false,
  “setupWizardSteps”: [
    {
      “value”: [
        {
          “key”:
“language”
         
        },
        {
          “key”:
“license”,
          “licensePath”:
“base:///license.txt”
         
        }
       
      ],
      “rule”:
“platform = cobalt”
     
    },
    {
      “value”: [
      ]
     
    }
   
  ],
  “hidePassword”:
true,
  “useHTMLInputElement”: [
    {
      “value”:
true,
      “rule”:
“platform = browser”
     
    },
    {
      “value”:
false
     
    }
   
  ],
  “canUnlinkOtherDevices”:
true,
  “notFoundStatusProcessing”:
“authorize”,
  “showInitialWizardIfAuthorizationFailed”:
false,
  “lowEndDevice”: [
    {
      “value”:
false
     
    },
    {
      “value”:
true,
      “rule”:
“platform = webos & platformVersion < 4 | platform = tizen & platformVersion < 4”
     
    }
   
  ],
  “cacheEnabled”:
true,
  “useSystemLangOnStartup”:
true,
  “canOpenLink”: [
    {
      “value”:
false
     
    },
    {
      “value”:
true,
      “rule”:
“platform = browser | platform = cobalt”
     
    }
   
  ],
  “playerInterfaceWakeOnMouse”: [
    {
      “value”:
350
     
    },
    {
      “value”:
2000,
      “rule”:
“platform = webos”
     
    }
   
  ],
  “closableBlockedDialog”:
false,
  “rebootInterval”:
180,
  “playerResumeDialogTimeout”:
10000,
  “showProgramStatusInGrid”:
false,
  “accessLevelType”:
“core”,
  “paymentRule”:
“sdp”,
  “allowChangeChannelSortType”:
true,
  “canRenameDevicesOnDevicesPage”:
true,
  “prependEpisodeNameWithSeasonEpisodeNumbers”:
false,
  “searchHistoryBufferSize”:
100,
  “searchHintsSize”:
3,
  “emptySearchHintsSize”:
10,
  “mediaPositionLimit”: {
    “meta”:
50,
    “tstv”:
50,
    “npvr”:
50
   
  }
 
},
“date”: {
  “date”:
“dd.MM.yyyy”,
  “defaultFormat”:
“HH:mm:ss dd.MM.yyyy”,
  “epgheader”:
“EEEE, d MMMM”,
  “gridDate”:
“d MMM”,
  “messageDate”:
“dd.MM.yyyy ‘at’ HH:mm”,
  “programdate”:
“do MMMM ‘in’ HH:mm”,
  “programinfo”:
“EEE, do MMMM, HH:mm”,
  “statusbar”:
“EEEE, d MMMM, HH:mm”,
  “time”:
“HH:mm”,
  “timeSeconds”:
“HH:mm:ss”,
  “npvrProgramInfo”:
“d MMMM HH:mm”,
  “npvrFeed”:
“d MMM ‘at’ HH:mm”,
  “availableTill”:
“dd.MM.yyyy HH:mm”,
  “dateTime”:
“dd.MM ‘at’ HH:mm”,
  “weatherInfo”:
“d MMMM, EEEE”,
  “weatherForecastInfo”:
“dd.MM EEEE”,
  “currenciesInfo”:
“d MMMM”,
  “currenciesChart”:
“dd.MM”
 
},
“brandName”:
“Lime”,
“operatorPage”:
“smartlabs.tv”,
“operatorSupportPhone”:
“0000000”,
“operatorEmail”:
“help@smartlabs.tv”,
“mobileQRCodeUrl”:
“”,
“mediaPlayersConfigs”: {
  “shaka”: {
    “streaming”: {
      “safeSeekOffset”:
25,
      “inaccurateManifestTolerance”:
0
     
    },
    “manifest”: {
      “defaultPresentationDelay”:
10,
      “dash”: {
        “ignoreMinBufferTime”:
true
       
      }
     
    }
   
  },
  “hlsjs”: {
    “maxBufferLength”:
15,
    “maxMaxBufferLength”:
20,
    “maxBufferSize”:
20000000
   
  }
 
},
“googleReCaptchaConfig”: {
  “publicKey”:
“6LeG6uQZAAAAADNofsxQ7Sso-OhdFa8cbLG0feFt”,
  “privateKey”:
“6LeG6uQZAAAAAL-_gr6EGK71WQqrsXOCdI2HWYHW”
 
},
“showLoginCaptcha”:
false,
“analyticsProviders”: [
  {
    “key”:
“smartcare”,
    “provider”:
“smartcare”,
    “config”: {
      “url”:
“/smartcare/care”
     
    }
   
  },
  {
    “key”:
“console”,
    “provider”:
“console”
   
  }
 
],
“logLevel”: [
  {
    “value”:
3,
    “rule”:
“platform = cobalt”
   
  },
  {
    “value”:
2
   
  }
 
],
“drmTokenLazyThreshold”:
0,
“sendSmartlabsIdHeader”:
false,
“timeOffsetInMin”:
0,
“cache”: {
  “programByID”: {
    “max”:
10000
   
  },
  “metaByID”: {
    “max”:
100
   
  }
 
}
}

Change Log

JUNG 9.2

  • New parameters ux.showPlayerInGrid, ux.showLoginHint,  ux.loginFailureMsgTimeout supported.
  • New parameter ux.silentAutoplayOnBannersAndChannelRail is supported.
  • New parameter player.disableSkipBanForCurrentProgram  is supported.
  • Parameters showAdvBlockedPanel, nonSkipableAdvInterval, resetSkipAdvertTimeoutOnSwitch, ignoreSkipAdvertTimeoutForPl, maxSaveAdvertismentTimeout in the player section are deprecated.

iOS 9.1

  • New parameters canTerminalNameChange, canTerminalDelete, ux.hideBannersTitle are supported.

iOS 8.4.x

  • New parameters canTerminalNameChange, canTerminalDelete, ux.hideBannersTitle are supported.

JUNG 8.3.x

  • New parameters ux.showPlayerInGrid, noScrollPastInGrid, ux.epgGridLeft, ux.epgGridScale, ux.hideSendReportButton, player.playbackOptimizations.shaka.stopLiveBeforeOpen, ux.tvChannelOpenTimeout, showBannersTrailerWithoutOffset, noScrollPastInGrid, ux.epgGridLeft, ux.epgGridScale, ux.hideSendReportButton, player.playbackOptimizations.shaka.stopLiveBeforeOpen, ux.tvChannelOpenTimeout, showBannersTrailerWithoutOffset are supported.

JUNG 8.2

  • New parameters analyticsProviders.config.sendChunkUrl and analyticsProviders.config.batchInterval, syslog.params supported

JUNG 8.1

  • New parameter player.openChannelTSTVFromStart supported

STB-UI-5.37.57

  • New parameter preferredAudioCodecList supported

Home Screen

The Home screen of the SmartTUBE app for the large-screen platforms and web (aka JUNG) consists of several rails: banner, main menu, scrollable content rails (“Recommendations”, “Top channels”, “Best for you”, and so on).

You can configure the representation of each rail and their arrangement on the screen using two JSON files:

  • Home screen configuration file — home.json,
  • Main menu configuration file — home-menu.json.

The structure of the home.json file consists of a single section “lines”, which describes how the rails are filled in with content and how they are displayed on the screen.

The sequence of displaying rails on the Home screen is set by the sequence of their description in the file. The typical sequence is as follows: Banner, Main menu, Continue watching, Top 10 programs, Recommended movies/series, etc. — you can change it as you like.

{
  “lines”: [
      {
          “id”:
“banners”,
          “sources”: [
              {
                  “type”:
“banners”,
                  “feedUrl”:
“sdp://userfeed/banners”
              }
          ]
      },
      {
          “id”:
“menu”,
          “titles”: {
              “en”:
“Menu”,
              “cz”:
“Menu”
          },
          “default”:
true,
          “center”:
true,
          “sources”: [
              {
                  “type”:
“menu”
              }
          ]
      },
      {
          “id”:
“applications”,
          “titles”: {
            “en”:
“Applications”,
            “cz”:
“Aplikace”,
          },
          “preset”:
“app”,
          “component”: {
            “type”:
“ItemApp”
          },
          “sources”: [
            {
              “type”:
“applications”,
              “limit”:
7,
              “config”: {
                “applications”: [
                        {
                          “packageName”:
“com.google.android.youtube”,
                          “sortPosition”:
1
                        },
                        {
                          “packageName”:
“com.android.vending”,
                          “sortPosition”:
2
                        },
                        {
                          “packageName”:
“com.google.android.music”,
                          “sortPosition”:
3
                        }
                ],
                “sorting”:
“label”
              }
            }
          ]
      },
      {
        “id”:
“channels”,
        “titles”: {
          “en”:
“Channels”,
          “cz”:
“Kanály”,
        },
        “preset”:
“channelWithProgramInAir”,
        “videoPreview”: {
          “delay”:
5000,
          “muted”:
true
        },
        “sources”: [
          {
            “type”:
“programsInAir”,
            “component”: {
              “type”:
“NewItemChannel”
            },
            “feedUrl”:
“sdp://userfeed/channels”,
            “url”:
“/player/channel/${chId}”
          },
          {
            “type”:
“menu”,
            “items”: [
              {
                “id”:
“tv”,
                “filterId”:
“tv”,
                “titleLocale”:
“APPLICATION.MORE”,
                “path”:
“/tv”,
                “dontConsiderAsItem”:
true
              }
            ],
            “component”: {
              “type”:
“ItemMenu”,
              “params”: {
                “showBack”:
true
              }
            },
            “url”:
“${path}”
          }
        ]
      },
      {
          “id”:
“programs”,
          “titles”: {
              “en”:
“Top 10 Programs”
          },
          “sources”: [
              {
                  “type”:
“programs”,
                  “feedUrl”:
“sdp://userfeed/topPrograms”,
                  “limit”:
10
              }
          ]
      },
      {
          “id”:
“npvr”,
          “titles”: {
              “en”:
“Your Records”
          },
          “sources”: [
              {
                  “type”:
“npvr”
              }
          ]
      },
      {
          “id”:
“continueWatchingPrograms”,
          “titles”: {
              “en”:
“Continue Watching Programs”
          },
          “sources”: [
              {
                  “type”:
“continueWatching”,
                  “contentType”:
“programs”
              }
          ]
      },
      {
          “id”:
“continueWatchingMovies”,
          “titles”: {
              “en”:
“Continue Watching Movies”
          },
          “sources”: [
              {
                  “type”:
“continueWatching”,
                  “contentType”:
“movies”
              }
          ]
      },
      {
          “id”:
“continueWatchingProgramsMovies”,
          “titles”: {
              “en”:
“Continue Watching Programs and Movies”
          },
          “sources”: [
              {
                  “type”:
“continueWatching”
              }
          ]
      },
      {
          “id”:
“promo”,
          “titles”: {
              “en”:
“Best for You”
          },
          “sources”: [
              {
                  “type”:
“items”,
                  “feedUrl”:
“sdp://userfeed/items”,
                  “limit”:
20
              }
          ]
      },
      {
          “id”:
“recommendedVOD”,
          “titles”: {
              “en”:
“Recommended movies and series”
          },
          “sources”: [
              {
                  “type”:
“meta”,
                  “feedUrl”:
“sdp://userfeed/aliasMetaContent?lang=en&aliasName=recomVod”,
                  “limit”:
20
              }
          ]
      },
      {
          “id”:
“recommendedPrograms”,
          “titles”: {
              “en”:
“Recommended TV Programs”
          },
          “sources”: [
              {
                  “type”:
“programs”,
                  “feedUrl”:
“sdp://userfeed/aliasEpg?lang=en&aliasName=recomProgs”,
                  “limit”:
20
              }
          ]
      },
      {
          “id”:
“history”,
          “titles”: {
              “en”:
“Viewing History”
          },
          “sources”: [
              {
                  “type”:
“history”
              }
          ]
      }
  ]
}

Depending on the type, each rail has a specific set of parameters:

id — rail identifier

titles — rail titles in accordance with the UI language. Displayed above the rail.

<language ID> — Localized rail title in the format: “en”: “Continue Watching Programs” . 2-letter language code ISO 639-1:2002 is used.

default — Flag to focus this rail when starting the device or when going to the Home screen.

center — Flag to center the contents of the rail.

sources — Sources of content for the rail

type — Display style of a rail:

  • menu — Main menu

Parameters: none

Note: Configured with the separate file (see “Configuring the Main Menu”)

  • banners — Banner panel

Parameters: feedUrl

  • channels — User favorite channels and channels sorted by the operator in Admin Console

Parameters: feedUrl, limit

  • programs — Top viewed programs

Parameters: feedUrl, limit

  • npvr — list of nPVR records

Parameters: none

  • history — viewing history (movies, series and programs sorted by the last viewed time)

Parameters: none

  • continueWatching — incompletely viewed content

Parameters: contentType

  • items — “Best for you” recommendations (programs, movies, series, services, etc.)

Parameters: feedUrl, limit

  • meta — Movies or series with filters

Parameters: feedUrl, limit

  • applications — Android apps installed on a device

Parameters: sorting, limit

  • programsInAir — programs currently on the air

Parameters: feedUrl 

config.applications.packageName — Android application package name to display in the Applications rail. Other apps not listed and not sorted in this config are displayed sorted by the package name. You can switch the layout type of the app items in the rail (a classic app banner or an app icon with caption) using the ux.androidTvBanner parameter of the setup.json file.

config.applications.sortPosition — sorting position of the Android application in the Applications rail. Other apps not listed and not sorted in this config are displayed sorted by the package name.

sorting — sorting type for the Applications rail. Default sorting type — by the package name. Only for type = applications:

  • label — sort by the config.applications.sortPosition number.

feedUrl — URL of the content feed, specific to each type. Please, DO NOT CHANGE it, except feedUrl for custom rails (such as “Recommended movies and series” and “Recommended TV Programs”). For more details about configuring custom rails, see the article “Configuring Content Rails on Home Screen”.

contentType — Content type for the rail: programs or movies. Only for type = continueWatching.

limit — Max number of content items in the rail. Only for type = channels, programs, items, meta, applications.

videoPreview.delay — Delay before a screenshot of the current program changes to a video stream when user hover over a channel tile in the channel rail, in ms. Available only for the rails with sources.type: “programsInAir”

videoPreview.muted — Flag to mute the stream of the current program when user hover over a channel tile in the channel rail. Related to videoPreview.delay.

The content with the maximum access level (age rating) specified in the SmartTUBE Admin Console > Dictionaries > Access levels dictionary is not displayed in the rails throughout app’s UI.

Main Menu

The structure of the home-menu.json file is a list of objects, each of which describes one of the Main menu buttons — “TV”, “Movies”, “Series”, “Search”, “My”, etc. The sequence of buttons is set by the sequence of their description in the file. You can change it and hide some buttons as you like.

Image10


Main menu

We strongly recommend you do not change any settings inside objects and operate only with their sequence and visibility.

{
  “menuItems”: [
      {
          “moduleName”:
“TvModule”,
          “moduleArgs”:
“”,
          “itemIcon”:
“qrc:/images/icons/big_menu_tv.png”,
          “itemIconSelected”:
“qrc:/images/icons/big_menu_tv_active.png”
      },
      {
          “moduleName”:
“EpgGridModule”,
          “moduleArgs”:
“”,
          “itemIcon”:
“qrc:/images/icons/big_menu_grid.png”,
          “itemIconSelected”:
“qrc:/images/icons/big_menu_grid_active.png”
      },
      {
           “moduleName”:
“CatalogModule”,
           “moduleArgs”:
“movies”,
           “itemIcon”:
“qrc:/images/icons/big_menu_movies.png”,
           “itemIconSelected”:
“qrc:/images/icons/big_menu_movies_active.png”
       },
       {
           “moduleName”:
“CatalogModule”,
           “moduleArgs”:
“serials”,
           “itemIcon”:
“qrc:/images/icons/big_menu_serials.png”,
           “itemIconSelected”:
“qrc:/images/icons/big_menu_serials_active.png”
      },
      {
          “moduleName”:
“SearchModule”,
          “moduleArgs”:
“”,
          “itemIcon”:
“qrc:/images/icons/big_menu_search.png”,
          “itemIconSelected”:
“qrc:/images/icons/big_menu_search_active.png”
      },
      {
          “moduleName”:
“MyModule”,
          “moduleArgs”:
“”,
          “itemIcon”:
“qrc:/images/icons/big_menu_my.png”,
          “itemIconSelected”:
“qrc:/images/icons/big_menu_my_active.png”
      },
      {
          “moduleName”:
“ApplicationsModule”,
          “moduleArgs”:
“”,
          “itemIcon”:
“qrc:/images/icons/big_menu_applications.png”,
          “itemIconSelected”:
“qrc:/images/icons/big_menu_applications_active.png”
      },
      {
          “moduleName”:
“UsbModule”,
          “moduleArgs”:
“”,
          “itemIcon”:
“qrc:/images/icons/big_menu_usb.png”,
          “itemIconSelected”:
“qrc:/images/icons/big_menu_usb_active.png”
      },
      {
          “moduleName”:
“SettingsModule”,
          “moduleArgs”:
“”,
          “itemIcon”:
“qrc:/images/icons/big_menu_settings.png”,
          “itemIconSelected”:
“qrc:/images/icons/big_menu_settings_active.png”
      }
  ]
}

Movies/Series Catalog

VoD Sections Configuration. Step-by-step Guide.

When your subscribers open the “Movies” or “Series” section in the SmartTUBE apps’ UI they could see the following Default screen:

Image13


Movies” section

Clicking the “Left” button on remote control the subscriber can open the Filter panel:

Image5


“Movies” section with the Filter panel opened

As you can see, the “Movies” section includes 3 configurable areas:

  • Filter panel
  • Quick filter panel
  • Poster area

Their representation and filling is managed by the vod.json file, which consists of the following sections:

  • “filter” — describes the Filter Panel;
  • “quickFilter” — describes the Quick Filter Panel;
  • “presets” — describes the visual representation of poster area
  • “feeds” — describes the rules for filling content the poster area

The order of the sections in the file can be arbitrary.

The vod.json is applied simultaneously to the “Movies” and “Series” sections. Thus, their representation in the app’s UI will differ only in content.

Let’s configure areas one by one and start with the Filter panel.

Configuring the Filter Panel

The Filter panel usually contains a set of typical filters and sorts:

Image6


Filter panel

The “filter” section in this case will look as follows:

{
“filter”: [
  {
    “id”:
“genres”,
    “name”:
“Genre”
  },
  {
    “id”:
“years”,
    “name”:
“Years”
  },
  {
    “id”:
“countries”,
    “name”:
“Country”
  },
  {
    “id”:
“purchaseTypes”,
    “name”:
“Purchase type”,
    “exclusive”:
true
  },
  {
    “id”:
“providers”,
    “name”:
“Providers”,
    “exclusive”:
true
  },
  {
    “id”:
“sortings”,
    “name”:
“Sortings”,
    “exclusive”:
true,
    “values”: [
      {
        “id”:
“name”,
        “name”:
“Title”,
        “type”:
“customArgs”,
        “urlArgs”:
“sort=name”
      },
      {
        “id”:
“defaultRating”,
        “name”:
“Our rating”,
        “type”:
“customArgs”,
        “urlArgs”:
“sort=rating”
      },
      {
        “id”:
“releaseDate”,
        “name”:
“Release date”,
        “type”:
“customArgs”,
        “urlArgs”:
“sort=newRelease_desc”
      }
    ]
  }
],

id — filter ID. You can use either an arbitrary string value (as “sortings”) or one of the reserved values:

  • top10 — 10 most rated movies. You can specify any number after the top, e.g. top25, top33.
  • genres — filter by the genres
  • years — filter by the year ranges
  • countries — filter by country of production
  • purchaseTypes — filter by purchase type (subscription, transactional, advertisement)
  • providers — filter by content provider

name — filter name displayed in the SmartTUBE app

urlArgs — parameters of content filtering

type — content type: movies or series

genreId — list of genre IDs

providerId — list of content provider IDs

countryId — list of country IDs

accessLevelId — ID of the access level of the active profile

genreALevelId — ID of the access level of the genre

showcaseId — showcase ID

sort — sorting the content by:

  • name — the movie name
  • rating — the Default order field on the movie/series details page in the SmartTUBE Admin Console
  • startDate — the date when the movie became available for rental (in ascending order)
  • startDate desc (not a typo) — the date when the movie became available for rental (in descending order)
  • newRelease_desc — the movie release date

year — list of movie/series by production years. Examples of acceptable values: 2015 (one year), 2005,2007,2008 (several years), 2005-2015 (interval).

text — text for searching in the Name, Description and Original name fields

id — list of movie/series IDs

serviceId — ID of a metacontent bundle

rubricId — list of rubric IDs

exclusive — indicates that this filter could be selected exclusively, i.e. other filters in the group are reset.

Configuring the Quick Filter Panel

Configuring the Quick filters panel is similar to the Filter panel and differs only in some of the arguments described below. Unlike the Filter panel, it makes sense to add frequently used, trending and interesting filters here:

Image14


Quick filters panel

The “quickFilter” section in this case will look as follows:

“quickFilter”: [
  {
    “id”:
“openFilters”
  },
  {
    “id”:
“auto-genres”,
    “name”:
“Group by genre”,
    “selectFeed”:
“auto-genres”,
    “exclusive”:
true
  },
  {
    “id”:
“lastWatch”,
    “name”:
“Last watched”
  },
  {
    “id”:
“defaultRating”,
    “name”:
“Our choice”,
    “type”:
“customArgs”,
    “urlArgs”:
“sort=rating”
  },
  {
    “id”:
“top25”,
    “name”:
“Top 25”,
    “exclusive”:
true
  },
  {
    “id”:
“2022”,
    “name”:
“2022”,
    “type”:
“customArgs”,
    “urlArgs”:
“year=2022”
  },
  {
    “id”:
“Xmas Comedies”,
    “name”:
“Xmas Comedies”,
    “type”:
“customArgs”,
    “urlArgs”:
“genreId=47239&text=christmas”,
    “exclusive”:
true
  },
  {
    “id”:
“marvel”,
    “name”:
“Marvel”,
    “type”:
“customArgs”,
    “urlArgs”:
“showcaseId=41233”,
    “exclusive”:
true
  },
  {
    “id”:
“gameOfThrones”,
    “name”:
“Game of Thrones”,
    “type”:
“customArgs”,
    “urlArgs”:
“id=32047”,
    “exclusive”:
true
  },
  {
    “id”:
“sciFi”,
    “name”:
“Sci-Fi”,
    “selectFeed”:
“sci-fi”,
    “exclusive”:
true
  },
  {
    “id”:
“clearAllFilters”
  }
],

id — quick filter ID. You can use either an arbitrary string value (as “gameOfThrones”) or one of the reserved values:

  • openFilters — button to open the Filter panel
  • clearAllFilters — button to reset all filters
  • lastWatch — last watched movies
  • lastAdded — movies sorted by rental start date

name — quick filter name displayed in the SmartTUBE app

exclusive — indicates that this filter could be selected exclusively, i.e. other filters are reseted.

selectFeed — ID of the content feed for this quick filter (configured in the ”feeds” section, see below)

Configuring the Poster Display Presets

The “presets” section may contain one or more presets for displaying posters, which will be used in the “feeds” section. The screenshot below shows how two different presets — “normal” and “big” — are displayed in the SmartTUBE app.

Image7


Two rails with different poster presets

The “presets” section in this case will look as follows:

“presets”: {
  “normal”: { // Preset name
    “titleSize”:
“s”,
    “rows”:
1,
    “cols”:
5.5,
    “height”:
13,
    “itemWidth”:
9,
    “itemSpacingRight”:
0.5,
    “itemVisibleLeft”:
2,
    “itemVisibleRight”:
2,
    “component”: {
      “type”:
“ItemMovie”
    },
    “url”:
“/movie/${id}”
  },
  “big”: {
    “titleSize”:
“s”,
    “rows”:
1,
    “cols”:
5.5,
    “height”:
23,
    “itemWidth”:
13,
    “itemSpacingRight”:
0.5,
    “itemVisibleLeft”:
2,
    “itemVisibleRight”:
2,
    “component”: {
      “type”:
“ItemMovie”
    },
    “url”:
“/movie/${id}”
  }
},

In order not to complicate the setup, we recommend that you configure only the parameters described below:

titleSize — size of the rail title. Acceptable values (in order of increasing font size): s, sb, n, nb, l, lb, xl, xlb.

height — height of posters

itemWidth — width of posters

itemSpacingRight — spacing between posters

Configuring the Rules for Filling Content the Poster Area

When your customer enables any filter from the Filter panel, the Poster area is filled with a single grid of posters:

Image9


Grid of posters

The “feeds” section allows you to fill the Poster area for some Quick filters with a custom set of rails:

Image11


Poster rails

This example of the “feeds” section shows how you can fill in the Quick filters “Group by genre” and “Sci-Fi” with a custom set of poster rails:

“feeds”: {
  “auto-genres”: { // Content feed ID
    “expand”: {
      “preset”:
“normal”,
      “id”:
“genres”
    }
  },
  “sci-fi”: {
    “lines”: [
      {
        “title”:
“Sci-Fi”,
        “preset”:
“big”,
        “url”:
“/movie/${id}”,
        “sources”: [
          {
            “type”:
“meta”,
            “filters”: [
              {
                “urlArgs”: {
                  “genreId”:
21660790
                }
              }
            ]
          }
        ]
      },
      {
        “title”:
“Fantasy”,
        “preset”:
“normal”,
        “url”:
“/movie/${id}”,
        “sources”: [
          {
            “type”:
“meta”,
            “filters”: [
              {
                “urlArgs”: {
                  “genreId”:
21660652
                }
              }
            ]
          }
        ]
      }
    ]
  }
}
}

expand — section that allows you to group movies into rails based on the attribute specified in the id parameter.

preset — name of the poster display preset from the “presets” section

id — attribute by which the movies should be grouped into rails. Acceptable values:

  • genres — filter by the genres
  • years — filter by the year ranges
  • countries — filter by country of production
  • purchaseTypes — filter by purchase type (subscription, transactional, advertisement)
  • providers — filter by content provider

lines — a custom set of rails

title — name of the rail displayed above it

filters — movie filtering options for the rail

urlArgs — parameters of content filtering

type — content type: movies or series

genreId — list of genre IDs

providerId — list of content provider IDs

countryId — list of country IDs

accessLevelId — ID of the access level of the active profile

genreALevelId — ID of the access level of the genre

showcaseId — showcase ID

sort — sorting the content by:

  • name — the movie name
  • rating — the Default order field on the movie/series details page in the SmartTUBE Admin Console
  • startDate — the date when the movie became available for rental (in ascending order)
  • startDate desc (not a typo) — the date when the movie became available for rental (in descending order)
  • newRelease_desc — the movie release date

year — list of movie/series by production years. Examples of acceptable values: 2015 (one year), 2005,2007,2008 (several years), 2005-2015 (interval).

text — text for searching in the Name, Description and Original name fields

id — list of movie/series IDs

serviceId — ID of a metacontent bundle

rubricId — list of rubric IDs

Tenant-dependant Skins

If you have a multi-tenant architecture, you can adapt the SmartTUBE app’s UI to the corporate identity of each tenant and make it more individual. In this topic we unveil the ways to change the logo, selector color and size of content rails on the Home screen dependent on tenant.

Configuring Logo

The SmartTUBE platform allows you to set the logo for the splash screen and upper-left corner in the app’s UI individually for each tenant.

Image1

Image12

  1. Open the SmartTUBE Device Manager.
  2. Go to the File Storage section.
  3. Upload logos for the splash screen and the upper left corner of UI. Image format requirements for different platforms, please see here.

Image3

  1. Double click on each logo image and write down their URLs, we’ll need them in the Step 8.

Image8

  1. Go to the Home page.
  2. Find the desired device group.
  3. Find the folder of a firmware currently used on devices. It should be marked with the CURRENT label.

Image4

  1. Click the Add JSON file button and create the setup.json file with the settings below. If it already exists, just add or edit these settings.

{
“ux”: {
  “preloadImageSources”: [ // Section with settings for images preloaded during application startup
    {
       “image”:
“https://SmartTUBE_Device_Manager_hostname:port/6ef805fe-a532-4017-8227-f63aa4676b90” // URL of the logo for the tenant “Tenant_A”. Copied from the SmartTUBE Device Manager > File Storage menu
     },
     {
       “image”:
“https://SmartTUBE_Device_Manager_hostname:port/8daada32-2554-4b1b-852f-5225b13d263d”  // URL of the logo for the tenant “Tenant_B”
     },
     {
       “image”:
“https://SmartTUBE_Device_Manager_hostname:port/7d69b9c7-bf7c-4a0b-bb00-5073a012b10d” // URL of the logo for the tenant “Tenant_C”
     }
   ]
 },
 “logoWidth”: [ // Logo width
   {
     “value”:
17, // The “logoWidth” value, in rems.
     “rule”:
“tenant = Tenant_A” // A rule indicating that “logoWidth” with “value”: 17 should only be applied to a tennant with “External ID” = “Tenant_A”. The tenant’s External ID can be found in SmartTUBE Admin Console > Administration > Tenants > [selected tenant] > External ID field.
   },
   {
     “value”:
7 // The “logoWidth” value for all other tenants
   }
 
 ],
 “imageReplace”: [ // Settings for replacing the default logo image stored in the app with the tenant’s logos
   [
     {
       “value”: {
         “search”:
“images/icons/logo.png”,  // URL of the upper-left corner logo stored in the app to be replaced. Do not change it!
         “replace”:
“https://SmartTUBE_Device_Manager_hostname:port/6ef805fe-a532-4017-8227-f63aa4676b90” // URL of the logo for the tenant “Tenant_A” for replacing the “search” image. Copied from the SmartTUBE Device Manager > File Storage menu.
       },
       “rule”:
“tenant = Tenant_A” // A rule indicating that “value” section should only be applied to a tennant with “External ID” = “Tenant_A”. The tenant’s External ID can be found in SmartTUBE Admin Console > Administration > Tenants > [selected tenant] > External ID field.
     },
     {
       “value”: {
         “search”:
“images/icons/logo.png”,
         “replace”:
“https://SmartTUBE_Device_Manager_hostname:port/8daada32-2554-4b1b-852f-5225b13d263d”
       },
       “rule”:
“tenant = Tenant_B”
     },
     {
       “value”: {
         “search”:
“images/icons/logo.png”,
         “replace”:
“https://SmartTUBE_Device_Manager_hostname:port/7d69b9c7-bf7c-4a0b-bb00-5073a012b10d”
       },
       “rule”:
“tenant = Tenant_C”
     },
     {
       “value”: {
         “search”:
“images/splashes/logo.png”,  // URL of the splash screen logo stored in the app to be replaced. Do not change it!
         “replace”:
“https://SmartTUBE_Device_Manager_hostname:port/6ef805fe-a532-4017-8227-f63aa4676b90” // URL of the logo for the tenant “Tenant_A” for replacing the “search” image. Copied from the SmartTUBE Device Manager > File Storage menu.
       },
       “rule”:
“tenant = Tenant_A” // A rule indicating that “value” section should only be applied to a tennant with “External ID” = “Tenant_A”. The tenant’s External ID can be found in SmartTUBE Admin Console > Administration > Tenants > [selected tenant] > External ID field.
     },
     {
       “value”: {
         “search”:
“images/splashes/logo.png”,
         “replace”:
“https://SmartTUBE_Device_Manager_hostname:port/8daada32-2554-4b1b-852f-5225b13d263d”
       },
       “rule”:
“tenant = Tenant_B”
     },
     {
       “value”: {
         “search”:
“images/splashes/logo.png”,
         “replace”:
“https://SmartTUBE_Device_Manager_hostname:port/7d69b9c7-bf7c-4a0b-bb00-5073a012b10d”
       },
       “rule”:
“tenant = Tenant_C”
     }                  
   ]
 ],
}

  1. Click the Save button to save changes.
  2. Now the file should be uploaded to devices.
  3. Check that the new settings have been applied to devices.

Configuring Selector Color

The selector highlights UI elements when they are selected (green in the screenshots below):

Image2

Image15

In order to change its color, follow the steps below:

  1. Create CSS files (one for each tenant) and name them as follows: fixes.[tenant External ID from the SmartTUBE Admin Console > Administration > Tenants dictionary].css  For example, fixes.alter_tvio.css
  2. Define the selector color in these files changing the color value (#ff0000 in the example below) to desired one as follows:

.button-normal.button-focus,
base-button.button-focus.selected,
base-button.button-focus.show-back,
.button-normal.focus,
base-button.focus.selected,
base-button.focus.show-back,
base-button.focus.show-full,
base-button.focus,
.button-spinner.button-focus,
base-button.button-focus.loading,
.button-spinner.focus,
base-button.focus.loading,
base-item-channel.show-back.focus,
.focus-item.focus,
.focus.filter-item,
base-item-filter.focus,
.focus-item-focus,
.filter-item-focus,
base-item-filter.checked.focus,
base-item-filter.checked.focus.checked-default-color,
.focus.menu-item,
base-item-menu.focus,
.menu-item-focus,
base-item-menu.checked.focus,
base-item-radio.focus,
base-item-radio.checked.focus,
base-home-item-menu.label-without-icon.focus .label,
base-channels-programs .cursor-circle,
base-channels-programs .cursor-line-channel.active,
base-channels-programs .cursor-line-program.active,
base-channels-programs .cursor-circle.active,
.grid-background-active,
base-keyboard.search .key.focus {
 
background-color: #ff0000 !important;
}

.text-input.focus,
base-input.focus,
.text-input-focus,
base-input.focus.active,
.focus > .pin-input.focus,
.active > .pin-input.focus {
 
border-color: rgba(#ff0000, 0.7) !important;
}

.focus-bg-virtualkeyboard-highlightButtonBackground.focus,
.focus-bg-virtualkeyboard-highlightButtonBackground,
.bg-virtualkeyboard-buttonBackground {
 background-color: rgba(#ff0000, 0.1) !important;
}

.statusbar-page-navigation-path,
base-home-item-menu.focus .label {
 
color: #ff0000 !important;
}
base-tv-item-channel.focus,
base-tv-item-program.focus,
base-home-item-menu.label-without-icon.focus .label {
 
color: #fff !important;
}

base-channels-programs .cursor-line-tri {
 
border-left-color: #ff0000 !important;
}

  1. Upload files via SmartTUBE Device Manager to the current firmware version of desired device group.
  2. Check that the new settings have been applied to devices.

Configuring App for iOS

The customization of SmartTUBE app for iOS is performed using the JSON files specified below. These files could be distributed across your end-user devices via the SmartTUBE Device Manager.

  • Primary UI/UX settings — setup.json  or networkConfig.cfg
  • Home screen — home.json 
  • “My” page — my.json
  • “Profile” page — settings.json
  • Movies & Series catalogs — vod.json & series.json
  • rail styles — layouts.json

Primary UI/UX Settings

The primary UI/UX settings are placed in the setup.json (app version 8.x and later) or networkConfig.cfg (app version lower than 8.x) file adhering to the JSON format.

Configuration Examples

setup.json — for the app version 8.x and later:

{
“player”: {
  “fairplayCertificatePath”:
“/fairplay.cer”
},
“isBannerTitleVisible”:
true
}

networkConfig.cfg — for the app version lower than 8.x. All settings in this file should be listed in the “result” section as shown below:

{
“result”: {
    “player”: {
      “fairplayCertificatePath”:
“/fairplay.cer”
  },
    “isBannerTitleVisible”:
true
}
}

Parameter Description

isBannerTitleVisible, boolean

Flag to display the movie title overlaid on the banner on the Home screen

bannerDuration, integer

Duration of displaying banners in the carousel on the Home screen

showAdvBlockedPanel, boolean 

Flag to display the notification with the skip timer above the progress bar in the app’s player

nonSkipableAdvInterval, integer

The amount of ads (in seconds) that the subscriber cannot skip and rewind. The value -1 prohibits skipping all ads.

maxSaveAdvertismentTimeout, integer

If the STB exits standBy mode and it has been in this mode for more than set minutes, the “Skip advert timeout” timer for all channels is reset. This timer is also reset after the STB is rebooted.

resetSkipAdvertTimeoutOnSwitch, boolean

Flag to reset the Skip Advert Timeout (see Step 6) every time the subscriber switches a channel (including nPVR). true — reset when switching a channel; false — reset after viewing an ad block.

ignoreSkipAdvertTimeoutForPl, boolean 

Flag to prohibit skipping ads for Pause Live programs, even if the Skip Advert Timeout has not expired.

canTerminalNameChange, boolean

Flag to allow user to rename a device linked to the account. Renamed to userCanChangeTerminalName in SmartTUBE App for iOS 9.1.

userCanChangeTerminalName, boolean

Flag to allow user to rename a device linked to the account

canTerminalDelete, boolean

Flag to allow user to unlink a device from the account. Renamed to userCanDeleteTerminalsFromAccount in SmartTUBE App for iOS 9.1.

userCanDeleteTerminalsFromAccount, boolean

Flag to allow user to unlink a device from the account

Home Screen

The app’s Home screen usually consists of a banner and themed content rails. The home.json file describes the order of rails, its contents and layout. Following the example below, you can customize the Home screen yourself.

Example Configuration

{
  “lines”: [
      {
          “layout”: {
              “banner”:
“banner”
          },
          “sources”: [
              {
                  “feedUrl”:
“sdp://userfeed/banners”,
                  “type”:
“banners”
              }
          ]
      },
      {
          “titles”: {
              “de”:
“Kanäle”,
              “en”:
“Channels”,
              “lv”:
“Kanāli”
          },
          “layout”: {
              “channel”:
“channel”
          },
          “sources”: [
              {
                  “feedUrl”:
“sdp://userfeed/channels”,
                  “type”:
“channels”
              }
          ]
      },
      {
          “titles”: {
              “de”:
“Empfehlungen”,
              “en”:
“Recommendations”,
              “lv”:
“Ko noskatīties šodien”
          },
          “layout”: {
              “episode”:
“movie”,
              “movie”:
“movie”,
              “program”:
“program”,
              “season”:
“movie”,
              “series”:
“movie”
          },
          “sources”: [
              {
                  “feedUrl”:
“sdp://userfeed/items”,
                  “limit”:
20,
                  “type”:
“items”,
                  “updateTimeout”:
1440
              }
          ]
      },
      {
          “titles”: {
              “de”:
“TOP 10 der meistgesehenen Sendungen im TV-Archiv”,
              “en”:
“TOP 10 most viewed broadcasts in TV archive”,
              “lv”:
“TOP 10 skatītākās TV arhīva pārraides”
          },
          “layout”: {
              “program”:
“program”
          },
          “sources”: [
              {
                  “feedUrl”:
“sdp://userfeed/topPrograms”,
                  “type”:
“programs”,
                  “updateTimeout”:
60
              }
          ]
      },
      {
          “titles”: {
              “de”:
“Weiter schauen”,
              “en”:
“Continue Watching”
          },
          “layout”: {
              “episode”:
“movie”,
              “movie”:
“movie”,
              “program”:
“program”,
              “season”:
“movie”,
              “series”:
“movie”
          },
          “sources”: [
              {
                  “type”:
“continueWatching”
              }
          ]
      }
  ]
}

Parameter Description

lines — core section of the configuration file

layout — section with the rail layout settings

[layout type] — ID of layout described in the layouts.json file and applied to this [layout type]. For example, the string “series”: “movie” prescribes using the layout with ID “movie” for the series posters.

titles — rail titles in accordance with the UI language. Displayed above the rail.

<language ID> — localized rail title in the format: “en”: “Continue Watching Programs” . 2-letter language code ISO 639-1:2002 is used.

sources — sources of content for the rail (at the moment only one source supported)

type — type of content and display style of a rail. Acceptable values:

  • banners — banner panel. The parameter feedUrl is required for this rail type.
  • channels — user favorite channels and channels sorted by the operator in Admin Console. The parameter feedUrl is required for this rail type.
  • programs — top viewed programs. The parameter feedUrl is required for this rail type.
  • npvr — list of nPVR records
  • history — viewing history (movies, series and programs sorted by the last viewed time)
  • continueWatching — incompletely viewed content
  • items — “Best for you” recommendations (programs, movies, series, services, etc.). The parameter feedUrl is required for this rail type.
  • meta — movies or series with filters. The parameter feedUrl is required for this rail type.
  • favoriteChannels — user favorite channels
  • favoriteMovies — user favorite movies
  • reminders — reminders for upcoming broadcasts set by the subscriber
  • metaAlias — custom rail with movies or series filtered with Search aliases (configured in SmartTUBE Admin Console > Content > Search aliases > Content). The parameter feedUrl is required for this rail type.
  • epgAlias — custom rail with programs filtered with Search aliases (configured in SmartTUBE Admin Console > Content > Search aliases > Content). The parameter feedUrl is required for this rail type.

feedUrl — URL of the content feed, specific to each type. Please, DO NOT CHANGE it, except feedUrl for custom rails (type = metaAlias or epgAlias). The value for these rails is set as follows: “feedUrl”: “sdp://userfeed/aliasMetaContent?aliasName=xxx”, where xxx is an externalId of a Search alias in the SmartTUBE Admin Console > Content > Search aliases > Content. For more details about configuring Search aliases, see the article “Configuring Content Rails on Home Screen”.

updateTimeout — period of refreshing content for the rail, in sec.

limit — max number of content items in the rail

The content with the maximum access level (age rating) specified in the SmartTUBE Admin Console > Dictionaries > Access levels dictionary is not displayed in the rails throughout app’s UI.

“My” Page

Using the my.json file you can customize the My page. The order of the rails in the UI is determined by the order in which they are described in the file.

Example Configuration

{
  “lines”: [
      {
          “layout”: {
              “episode”:
“movie”,
              “movie”:
“movie”,
              “program”:
“program”,
              “season”:
“movie”,
              “series”:
“movie”
          },
          “sources”: [
              {
                  “limit”:
40,
                  “type”:
“continueWatching”
              }
          ],
          “titles”: {
              “de”:
“Weiter schauen”,
              “en”:
“Continue watching”,
              “lv”:
“Turpiniet skatīties”,
              “es”:
“Seguir viendo”
          }
      },
      {
          “layout”: {
              “channel”:
“channel”
          },
          “sources”: [
              {
                  “type”:
“favoriteChannels”
              }
          ],
          “titles”: {
              “de”:
“Lieblingssender”,
              “en”:
“Favorite channels”,
              “lv”:
“Mīļākie kanāli”,
              “es”:
“Canales favoritos”
          }
      },
      {
          “layout”: {
              “episode”:
“movie”,
              “movie”:
“movie”,
              “season”:
“movie”,
              “series”:
“movie”
          },
          “sources”: [
              {
                  “limit”:
40,
                  “type”:
“favoriteMovies”
              }
          ],
          “titles”: {
              “de”:
“Lieblingsfilme”,
              “en”:
“Favorite movies”,
              “lv”:
“Mīļākās filmas”,
              “es”:
“Peliculas favoritas”
          }
      },
      {
          “layout”: {
              “program”:
“program”
          },
          “sources”: [
              {
                  “limit”:
40,
                  “type”:
“npvr”
              }
          ],
          “titles”: {
              “de”:
“Aufnahmen”,
              “en”:
“Recordings”,
              “lv”:
“Ieraksti”,
              “es”:
“Grabaciones”
          }
      },
      {
          “layout”: {
              “program”:
“program”
          },
          “sources”: [
              {
                  “limit”:
40,
                  “type”:
“reminders”
              }
          ],
          “titles”: {
              “de”:
“Erinnerungen”,
              “en”:
“Reminders”,
              “lv”:
“Atgādinājumi”,
              “es”:
“Recordatorios”
          }
      },
      {
          “layout”: {
              “episode”:
“movie”,
              “movie”:
“movie”,
              “program”:
“program”,
              “season”:
“movie”,
              “series”:
“movie”
          },
          “sources”: [
              {
                  “limit”:
40,
                  “type”:
“history”
              }
          ],
          “titles”: {
              “de”:
“Geschichte”,
              “en”:
“History”,
              “lv”:
“Vēsture”,
              “es”:
“Historia”
          }
      }
  ]
}

Parameter Description

lines — core section of the configuration file

layout — List of content types for the rail with corresponding IDs of layout presets (described in the layouts.json file)

titles — rail titles in accordance with the UI language. Displayed above the rail.

<language ID> — Localized rail title in the format: “en”: “Continue Watching Programs” . 2-letter language code ISO 639-1:2002 is used.

sources — Sources of content for the rail (at the moment only one source supported)

type — type of content and display style of a rail. Acceptable values:

  • continueWatching — incompletely viewed content
  • favoriteChannels — User favorite channels
  • favoriteMovies — User favorite movies
  • npvr — list of nPVR records
  • reminders — reminders for upcoming broadcasts set by the subscriber
  • history — viewing history (movies, series and programs sorted by the last viewed time)

limit — Max number of content items in the rail.

The content with the maximum access level (age rating) specified in the SmartTUBE Admin Console > Dictionaries > Access levels dictionary is not displayed in the rails throughout app’s UI.

“Profile” Page

Using the settings.json file you can customize the Profile menu. Here you can change the order of the menu items (upper level) and their visibility only.

Example Configuration

{
  “lines”: [
      {
          “titles”: {
              “en”:
“”
          },
          “sources”: [
              {
                  “type”:
“profiles”
              }
          ]
      },
      {
          “titles”: {
              “en”:
“Messages”
          },
          “sources”: [
              {
                  “type”:
“messages”
              }
          ]
      },
      {
          “titles”: {
              “en”:
“Services”
          },
          “sources”: [
              {
                  “type”:
“services”
              }
          ]
      },
      {
          “titles”: {
              “en”:
“Language”
          },
          “sources”: [
              {
                  “type”:
“languages”
              }
          ]
      },
      {
          “titles”: {
              “en”:
“Player”
          },
          “sources”: [
              {
                  “type”:
“player”
              }
          ]
      },
      {
          “titles”: {
              “en”:
“Devices”
          },
          “sources”: [
              {
                  “type”:
“devices”
              }
          ]
      },
      {
          “titles”: {
              “en”:
“App Privacy Policy”
          },
          “sources”: [
              {
                  “type”:
“appPrivacyPolicy”
              }
          ]
      },
      {
          “titles”: {
              “en”:
“About”
          },
          “sources”: [
              {
                  “type”:
“about”
              }
          ]
      },
      {
          “titles”: {
              “en”:
“Logout”
          },
          “sources”: [
              {
                  “type”:
“logout”
              }
          ]
      }
  ]
}

Parameter Description

lines — core section of the configuration file

titles — item titles in accordance with the UI language

<language ID> — Localized item title in the format: “en”: “Continue Watching” . 2-letter language code ISO 639-1:2002 is used.

sources — Sources of content for the items

type — item type:

  • profiles —  profile settings
  • messages —  list of messages received from the SmartTUBE SDP
  • services — managing subscriptions and services
  • languages — UI language settings
  • player — TV/VoD player settings
  • devices — managing devices linked to the account
  • appPrivacyPolicy — text of the Application Privacy Policy
  • about —  information about the application
  • logout —  logout from the current account

Movies/Series Page

The Movies and Series catalog in the SmartTUBE iOS app are configured using the vod.json and series.json files respectively. The format of both files is the same.

These files includes two sections:

  • “quickFilter” — allows you to customize the Quick filters panel;
  • “feeds” — allows you to customize the Default layout of the page.

Configuring the Quick Filter Panel

Along with standard filters (genre, year, country, etc.) the SmartTUBE iOS app allows you to configure custom filters — Quick filters. It makes sense to add frequently used, trending and interesting filters here.

For example, the “quickFilter” section could look like this:

{
“quickFilter”: [
  {
    “title”:
“Our choice”,
    “urlArgs”:
“sort=rating”
  },
  {
    “title”:
“2022”,
    “urlArgs”:
“year=2022”
  },
  {
    “title”:
“Xmas Comedies”,
    “urlArgs”:
“genreId=47239&text=christmas”
  },
  {
    “title”:
“Marvel”,
    “urlArgs”:
“showcaseId=41233”
  },
  {
    “title”:
“Matrix”,
    “urlArgs”:
“id=18356,20456,63214”
  }
]
}

title — quick filter name displayed

urlArgs — parameters of content filtering. You can combine several parameters using the & symbol (e.g. genreId=47239&text=christmas). Acceptable values:

  • type — content type: movies or series
  • genreId — list of genre IDs
  • providerId — list of content provider IDs
  • countryId — list of country IDs
  • accessLevelId — ID of the access level of the active profile
  • genreALevelId — ID of the access level of the genre
  • showcaseId — showcase ID
  • sort — sorting the content by:
    • name — the movie name
    • rating — the Default order field on the movie/series details page in the SmartTUBE Admin Console
    • startDate — the date when the movie became available for rental (in ascending order)
    • startDate desc (not a typo) — the date when the movie became available for rental (in descending order)
    • newRelease_desc — the movie release date
  • year — list of movie/series by production years. Examples of acceptable values: 2015 (one year), 2005,2007,2008 (several years), 2005-2015 (interval).
  • text — text for searching in the Name, Description and Original name fields
  • id — list of movie/series IDs
  • serviceId
CONTENTS
Sign-in
Sign-in with your SmartLabs Support Portal account credentials to see non-public articles.