To migrate an application from Samsung Legacy Platform to TOAST, you must create a TOAST application using the Samsung Legacy Platform application as a template, and make the necessary changes in the code.
Some Samsung Legacy Platform APIs do not have a TOAST equivalent. To detect when the application is run on a Samsung TV and can use Samsung Legacy Platform-specific APIs, see How to detect platform.
Creating a TOAST Application
To migrate a Samsung Legacy Platform application to TOAST:
Remove the existing "config.xml" file from the application.
ImportantThe Samsung Legacy Platform "config.xml" file is not compatible with TOAST.
NoteThe "cordova.js" library must be included before the "toast.js" library.
Before using the TOAST APIs, you must wait until Cordova is fully set up (the deviceready event occurs):
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
console.log("start the app");
}
Migrate functionality from Samsung Legacy Platform API modules.
The following section presents examples of how to migrate media playback functionalities to TOAST. For information on how to migrate functionality from other Samsung Legacy Platform API modules, see the TOAST Wiki.
NoteYou must also make sure to migrate deprecated Samsung Legacy Platform code to HTML5- and W3C-standard code. For more information, see Migrating Legacy Platform to Tizen.
NoteTOAST automatically manages the screensaver. It does not need to be explicitly managed, such as with the setScreenSaver() method.
To start media playback:
Before:
/* plugin */
var pluginVideoObj = document.getElementById('pluginPlayer');
var top = 0;
var left = 0;
var width = 100;
var height = 100;
pluginVideoObj.SetDisplayArea(top, left, width, height);
pluginVideoObj.Play('url');
/* SEF */
var sef = document.getElementById('sef');
var top = 0;
var left = 0;
var width = 100;
var height = 100;
sef.Open('Player', '1.0', 'Player');
sef.Execute('InitPlayer', url);
sef.Execute('SetDisplayArea', top, left, width, height);
sef.Execute('StartPlayback', 0); // Seconds at which playback starts
/* webapis */
webapis.avplay.getAVPlay(successCB, errorCB);
function successCB(webapisVideoObj) {
var options = {
displayRect: { // SRect instance [init()]
top: 0,
left : 0,
width : 100,
height : 100
}
};
webapisVideoObj.init(options);
webapisVideoObj.open('url');
webapisVideoObj.play(successCallback, errorCallback, 0);
// Seconds at which playback starts
}
media.setListener({
onevent: function(evt) {
switch (evt.type) {
case "STATE":
console.log("Media State changed: " + evt.data.oldState + " -> " + evt.data.state);
break;
case "DURATION":
console.log("Media duration updated: " + evt.data.duration + "ms");
break;
case "POSITION":
console.log("Media position updated: " + evt.data.position + "ms");
break;
case "BUFFERINGPROGRESS":
console.log("Media buffering in progress: " + evt.data.bufferingPercentage + "%");
if (evt.data.bufferingPercentage >= 100) {
console.log("Buffering completed");
}
break;
case "ENDED":
console.log("Media ended");
break;
}
},
onerror: function(err) {
console.error("MediaError occured: " + JSON.stringify(err));
}
});
To play streaming, 4K, and DRM-enabled content, the toast.MediaPlugin constructor binds to the toast.Media constructor with specific configuration data. For example:
var media= toast.Media.getInstance();
var mediaPlugin = new toast.MediaPluginHLS();
media.resetPlugin();
media.attachPlugin(mediaPlugin);
media.open('http://mydomain.com/video.m3u8');
/* SEF */
sef.Execute('InitPlayer', url|BITRATES=yourBitRates|STARTBITRATE=yourStartBitRate|SKIPBITRATE=yourSkipBitRate|COMPONENT=HLS);
/* webapis */
webapis.avplay.getAVPlay(successCB, errorCB);
function successCB(webapisVideoObj) {
webapisVideoObj.init();
webapisVideoObj.open("url", {
adaptive : {
type : 'HLS',
}
});
webapisVideoObj.play(successCallback, errorCallback, 0);
// Seconds at which playback starts
}
After:
var HLSData = {
BITRATES : 'yourBitRates',
STARTBITRATE : "yourStartBitRate",
SKIPBITRATE : "yourSkipBitRate"
};
var mediaPlugin = new toast.MediaPluginHLS(HLSData);
To play 4K (UHD) video:
Before:
/* SEF */
sef.Execute('InitPlayer', 'url');
sef.Execute('SetUHDResolution', true);
sef.Execute('StartPlayback', 0); // Seconds at which playback starts
/* webapis */
webapis.avplay.getAVPlay(successCB, errorCB);
function successCB(webapisVideoObj) {
webapisVideoObj.init();
webapisVideoObj.open('url');
webapisVideoObj.setUHDResolution(true);
webapisVideoObj.play(successCallback, errorCallback, 0);
// Seconds at which playback starts
}
/* SEF */
sef.Execute('InitPlayer', 'url|DEVICE_ID=myDeviceId|DEVICET_TYPE_ID=myDeviceTypeId|STREAM_ID=myStreamId|DRM_URL=http://yourDrmUrl.com|I_SEEK=yourI\_SEEK|CUR_TIME=yourCurTime|PORTAL=yourPortal|USER_DATA=yourUserData|COMPONENT=WV');
/* webapis */
webapis.avplay.getAVPlay(successCB, errorCB);
function successCB(webapisVideoObj) {
webapisVideoObj.init();
webapisVideoObj.open('url', {
adaptive : {
type : 'WV',
}
});
webapisVideoObj.play(successCallback, errorCallback, 0);
// Seconds at which playback starts
}
After:
var wideVineData = {
DEVICE_ID : 'yourDeviceId',
DEVICET_TYPE_ID : 'yourDeviceTypeId', // for example, '60'
STREAM_ID : 'yourStreamId',
DRM_URL : 'http://yourDrmUrl.com',
I_SEEK : 'yourI\_SEEK', // for example, 'TIME'
CUR_TIME : 'yourCurTime', // for example, 'PTS'
PORTAL : 'yourPortal',
USER_DATA : 'yourUserData',
};
var mediaPlugin = new toast.MediaPluginWideVine(wideVineData);
media.attachPlugin(mediaPlugin);
// Widevine data must be set before calling the "open()" method
media.open('url');
To play content with PlayReady DRM:
Before:
/* plugin */
var PROPERTY_TYPE_PLAY_READY_CUSTOM_DATA = 3;
var PROPERTY_TYPE_PLAY_READY_LICENSE_SERVER = 4;
pluginVideoObj.SetPlayerProperty(PROPERTY_TYPE_PLAY_READY_CUSTOM_DATA, myCustomData, myCustomData.length);
pluginVideoObj.SetPlayerProperty(PROPERTY_TYPE_PLAY_READY_LICENSE_SERVER , myLicenseServer, myLicenseServer.length);
/* SEF */
var PROPERTY_TYPE_PLAY_READY_CUSTOM_DATA = 3;
var PROPERTY_TYPE_PLAY_READY_LICENSE_SERVER = 4;
sef.Execute('InitPlayer', 'url');
sef.Execute('SetPlayerProperty', PROPERTY_TYPE_PLAY_READY_CUSTOM_DATA, myCustomData, myCustomData.length);
sef.Execute('SetPlayerProperty', PROPERTY_TYPE_PLAY_READY_LICENSE_SERVER, myLicenseServer, myLicenseServer.length);
sef.Execute('playbackstart');
var playReadyData = {
LicenseServer : 'myLicenseServer',
CustomData : 'myCustomData'
};
var mediaPlugin = new toast.MediaPluginPlayReady(playReadyData);
Manage Your Cookies
We use cookies to improve your experience on our website and to show you relevant
advertising. Manage you settings for our cookies below.
Essential Cookies
These cookies are essential as they enable you to move around the website. This
category cannot be disabled.
Company
Domain
Samsung Electronics
.samsungdeveloperconference.com
Analytical/Performance Cookies
These cookies collect information about how you use our website. for example which
pages you visit most often. All information these cookies collect is used to improve
how the website works.
Company
Domain
LinkedIn
.linkedin.com
Meta (formerly Facebook)
.samsungdeveloperconference.com
Google Inc.
.samsungdeveloperconference.com
Functionality Cookies
These cookies allow our website to remember choices you make (such as your user name, language or the region your are in) and
tailor the website to provide enhanced features and content for you.
Company
Domain
LinkedIn
.ads.linkedin.com, .linkedin.com
Advertising Cookies
These cookies gather information about your browser habits. They remember that
you've visited our website and share this information with other organizations such
as advertisers.
Company
Domain
LinkedIn
.linkedin.com
Meta (formerly Facebook)
.samsungdeveloperconference.com
Google Inc.
.samsungdeveloperconference.com
Preferences Submitted
You have successfully updated your cookie preferences.