Skip to content

Tizen API: AVPlay

zuzu_yun edited this page Mar 21, 2017 · 28 revisions

For converting AVPlay API of tizen to TOAST API, please refer to the followings.

If you want more information, please refer to toast.Media and toast.MediaPlugin

open

  • Before

    webapis.avplay.open('url');
  • After

    var media = toast.Media.getInstance();
    media.open('url');

play

  • Before

    webapis.avplay.prepare();
    webapis.avplay.setDisplayRect(x, y, width, height);
    webapis.avplay.play();
    var status = webapis.appcommon.AppCommonScreenSaverState.SCREEN_SAVER_OFF;
    webapis.appcommon.setScreenSaver(status, function() {}, function() {});
  • After

    var elContainer = media.getContainerElement();
    elContainer.style.position = 'fixed';
    elContainer.style.left = 0 + 'px'; // 'x'
    elContainer.style.top = 0 + 'px'; // 'y'
    elContainer.style.width = 1920 + 'px'; // 'width'
    elContainer.style.height = 1080 + 'px'; // 'height'
    document.body.appendChild(elContainer);
    
    media.play();
    //You don't have to call setScreenSaver Method. It is configurated by toast.avplay.

stop

  • Before

    webapis.avplay.stop();
    var status = webapis.appcommon.AppCommonScreenSaverState.SCREEN_SAVER_ON;
    webapis.appcommon.setScreenSaver(status, function() {}, function() {});
  • After

    media.stop();
    //You don't have to call setScreenSaver Method. It is configurated by toast.avplay.

pause

  • Before

    webapis.avplay.pause();
    var status = webapis.appcommon.AppCommonScreenSaverState.SCREEN_SAVER_ON;
    webapis.appcommon.setScreenSaver(status, function() {}, function() {});
  • After

    media.pause();
    //You don't have to call setScreenSaver Method. It is configurated by toast.avplay.

jumpForward

  • Before

    webapis.avplay.jumpForward(10000); //The number of milliseconds to be forwarded
  • After

    var curPos = media.getCurrentPosition();
    media.seekTo(curPos + 10000); //The position to seek in milliseconds

jumpBackward

  • Before

    webapis.avplay.jumpBackward(10000); //The number of milliseconds to be backwarded
  • After

    var curPos = media.getCurrentPosition();
    media.seekTo(curPos - 10000); //The position to seek in milliseconds

listener

  • Before

    var listener = {
        onbufferingstart: function() {
            console.log('Buffering start.');
        },
        onbufferingprogress: function(percent) {
            console.log('Buffering progress data : ' + percent + '%');
        },
        onbufferingcomplete: function() {
            console.log('Buffering complete.');
        },
        oncurrentplaytime: function(currentTime) {
            console.log('Current Playtime : ' + currentTime);
        },
        onbufferingcomplete: function() {
            console.log('Buffering complete.');
        },
        onevent: function(eventType, eventData) {
            console.log('event type error : ' + eventType + ', data: ' + eventData);
        },
        onerror: function(eventType) {
            console.log('event type error : ' + eventType);
        },
        onsubtitlechange: function(duration, text, data1, data2) {
            console.log('Subtitle Changed.');
        },  
        ondrmevent: function(drmEvent, drmData) {
            console.log('DRM callback: ' + drmEvent + ', data: ' + drmData);
        },
        onstreamcompleted: function() {
            console.log('Stream Completed');
        }
     }
    webapis.avplay.setListener(listener);
  • After

     media.setListener({
        onevent: function (evt) {
            switch(evt.type) {
                case 'STATE':
                    console.log('Media State changed: ' + evt.data.oldState + ' -> ' + evt.data.state);
    
                    if(evt.data.oldState != 'STALLED' && evt.data.state == 'STALLED'){
                        console.log('Buffering start.');
                    }
                    else if(evt.data.oldState == 'STALLED' && evt.data.state != 'STALLED'){
                        console.log('Buffering complete.');
                    }
                    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 + '%');
                    break;
                 case 'ENDED':
                    console.log('Media ended');
                    break;
            }
        },
        onerror: function (err) {
            console.error('MediaError occured: ' + JSON.stringify(err));
        }
    });

Playback special content(setStreaming / setDRM)

toast MediaPlugin constructor bind to toast.media with option data to be able to playback special content.

    var media= toast.Media.getInstance();
    var mediaPlugin = new toast.MediaPluginHLS();
    media.resetPlugin(); 
    media.attachPlugin(mediaPlugin);
    media.open('http://mydomain.com/video.m3u8');
setStreamingProperty
MediaPluginHLS
  • Before

    webapis.avplay.setStreamingProperty('ADAPTIVE_INFO', 'BITRATES=yourBitRates|STARTBITRATE=yourStartBitRate|SKIPBITRATE=yourSkipBitRate');
  • After

    var HLSData = {
        BITRATES : 'yourBitRates',
        STARTBITRATE : 'yourStartBitRate',
        SKIPBITRATE : 'yourSkipBitRate'
    };
    var mediaPlugin = new toast.MediaPluginHLS(HLSData); 

MediaPluginUHD
  • Before

    webapis.avplay.setStreamingProperty('SET_MODE_4K', 'TRUE');
  • After

    var mediaPlugin = new toast.MediaPluginUHD();

MediaPluginWideVine
  • Before

    webapis.avplay.open('url');
    
    var wideVineData = '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'
    webapis.avplay.setStreamingProperty('WIDEVINE', wideVineData);
    
    webapis.avplay.prepare();
  • After

    var wideVineData = {
        DEVICE_ID : 'yourDeviceId', 
        DEVICET_TYPE_ID : 'yourDeviceTypeId', //ex) '60'
        STREAM_ID : 'yourStreamId',
        DRM_URL : 'http://yourDrmUrl.com',
        I_SEEK : 'yourI\_SEEK', //ex) 'TIME'
        CUR_TIME : 'yourCurTime', //ex) 'PTS'
        PORTAL : 'yourPortal',
        USER_DATA : 'yourUserData',
    };
    var mediaPlugin = new toast.MediaPluginWideVine(wideVineData);
    media.attachPlugin(mediaPlugin);
    
    // It is required to set widevine data, before calling "open" method.
    media.open('url');

setDrm
privilege

<tizen:privilege name="http://developer.samsung.com/privilege/drmplay"/>


MediaPluginPlayReady
  • Before

    var playReadyData = {
        LicenseServer  : 'myLicenseServer',
        CustomData  : 'myCustomData'
    };
    webapis.avplay.setDrm('PLAYREADY', 'SetProperties', JSON.stringify(playReadyData));
  • After

    var playReadyData = {
        LicenseServer  : 'myLicenseServer',
        CustomData  : 'myCustomData'
    };
    var mediaPlugin = new toast.MediaPluginPlayReady(playReadyData); 
Clone this wiki locally