Default Media Player

Using Smart View SDK, send a content URL to a DMP(Default Media Player) app available on 2015, 2016 Samsung TVs(and will be expanded to 14 TVs later). Any non-DRM content supported by the HTML5 Video,Audio,Image is supported to watch in a basic player with a fixed UI.

Default Media Player 2.0 (DMP 2.0)

Check Smart View SDK UX guideline for implementing DMP2.0

Supported Mobile Library

  • Android 2.3.4 and higher
  • iOS 2.3.4 and higher
  • JS supports later

DMP Component

Video Player

Launch and manage list of videos on the TV.

Once, the ‘service’ object has been fetched for the TV (to which video(s) have to be casted), it’s been determined that target TV supports DMP.

following core functions can be used to manage the video casting.

  1. service.createVideoPlayer(String appName) :

    create a video player reference.
  2. videoPlayer.addOnMessageListener(videoPlayerListener) :

    add listener to get player response & other events.
  3. videoPlayer.playContent(contentUrl, title, thumbnailUrl, callback) :

    play the video content on TV.
  4. videoPlayer.disconnect() :

    disconnect from the TV.

Example Android API usage:

VideoPlayer mVideoPlayer;
mVideoPlayer = this.mService.createVideoPlayer(“YOUR APP NAME”);

VideoPlayer.OnVideoPlayerListener videoPlayerListener = new VideoPlayer.OnVideoPlayerListener(applicationName) {
    @Override
    public void onBufferingStart() {
        //Do something here..
    }

    @Override
    public void onBufferingComplete() {
        //Do something here..
    }

    @Override
    public void onBufferingProgress(int progress) {
        //Do something here..
    }
 
    @Override
    public void onCurrentPlayTime(int progress) {
        //Do something here..
    }
};

mVideoPlayer.addOnMessageListener(videoPlayerListener);
mVideoPlayer.playContent(Uri.parse(uri),
        title,
        Uri.parse(thumbnail),
        new Result<Boolean>() {
            @Override
            public void onSuccess(Boolean r) {
                Log.v(TAG, "playContent(): onSuccess.");
            }

            @Override
            public void onError(com.samsung.multiscreen.Error error) {
                Log.v(TAG, "playContent(): onError: " + error.getMessage());
            }
        });

Audio Player

Launch and manage list of audio files on the TV.

Once, the ‘service’ object has been fetched for the TV (to which audio has to be casted), & it’s been determined that target TV supports DMP.

following core functions can be used to manage the audio casting.

  1. service.createAudioPlayer(String appName) :

    create an audio player reference.
  2. audioPlayer.addOnMessageListener(audioPlayerListener) :

    add listener to get player response & other events.
  3. audioPlayer.playContent(contentUrl, title, albumName, albumArtUrl, callback) :

    play the audio content on TV.
  4. audioPlayer.disconnect() :

    disconnect from the TV.

Example Android API usage:

AudioPlayer mAudioPlayer; 
mAudioPlayer = this.mService.createAudioPlayer();

AudioPlayer.OnAudioPlayerListener audioPlayerListener = new 
 AudioPlayer.OnAudioPlayerListener(applicationName) {
     @Override
     public void onBufferingStart() {
         //Do something here..
     }

     @Override
     public void onBufferingComplete() {
         //Do something here..
     }

     @Override
     public void onBufferingProgress(int progress) {
         //Do something here..
     }

     @Override
     public void onCurrentPlayTime(int progress) {
         //Do something here..
     }
 };
 
mAudioPlayer.addOnMessageListener(audioPlayerListener); 
mAudioPlayer.playContent(Uri.parse(uri),
         title,
         albumName,
         Uri.parse(albumArt),
         new Result<Boolean>() {
             @Override
             public void onSuccess(Boolean r) {
                 Log.v(TAG, "playContent(): onSuccess.");
             }

             @Override
             public void onError(com.samsung.multiscreen.Error error) {
                 Log.v(TAG, "playContent(): onError: " + error.getMessage());
             }
         });

Photo Player

Launch and manage list of photos on the TV.

Once, the ‘service’ object has been fetched for the TV (to which image have to be casted), & it’s been determined that target TV supports DMP.

following core functions can be used to manage the image casting.

  1. service.createPhotoPlayer(String appName) :

    create a photo player reference.
  2. photoPlayer.addOnMessageListener(photoPlayerListener) :

    add listener to get player response & other events.
  3. photoPlayer.playContent(contentUrl, title, callback) :

    display the image content on TV.
  4. photoPlayer.disconnect() :

    disconnect from the TV.

Example Android API usage:

 PhotoPlayer mPhotoPlayer; 
 
 mPhotoPlayer = this.mService.createPhotoPlayer(“YOUR APP NAME”); 
 
 PhotoPlayer.OnPhotoPlayerListener photoPlayerListener = new 
 PhotoPlayer.OnPhotoPlayerListener(applicationName) {
     @Override
     public void onBufferingStart() {
         //Do something here..
     }
 
     @Override
     public void onBufferingComplete() {
         //Do something here..
     }
 
     @Override
     public void onBufferingProgress(int progress) {
         //Do something here..
     }
 
     @Override
     public void onCurrentPlayTime(int progress) {
         //Do something here..
     }
 };
 mPhotoPlayer.addOnMessageListener(photoPlayerListener); 
 
 mPhotoPlayer.playContent(Uri.parse(uri),
         title,
         new Result<Boolean>() {
             @Override
             public void onSuccess(Boolean r) {
                 Log.v(TAG, "playContent(): onSuccess.");
             }
 
             @Override
             public void onError(com.samsung.multiscreen.Error error) {
                 Log.v(TAG, "playContent(): onError: " + error.getMessage());
             }
         });

Listeners

1. Event Listeners

Following listeners can be used to get events when respective events happen.

  • setOnConnectListener(OnConnectListener onConnectListener) :

    notify successful connection (on mobile side).
  • setOnDisconnectListener(OnDisconnectListener onDisconnectListener) :

    notify connection disconnection.
  • setOnClientConnectListener(OnClientConnectListener onClientConnectListener) :

    notify whenever a client is connected.
  • setOnClientDisconnectListener(OnClientDisconnectListener onClientDisconnectListener) :

    notify whenever a client is disconnected.
  • setOnErrorListener(OnErrorListener onErrorListener) :

    notify error in connection.

Example Android API usage:

mVideoPlayer.setOnConnectListener(new Channel.OnConnectListener() {
    @Override
    public void onConnect(Client client) {
        Log.v(TAG, "setOnConnectListener()");
    }
 });

mVideoPlayer.setOnDisconnectListener(new Channel.OnDisconnectListener() {
    @Override
    public void onDisconnect(Client client) {
        resetService();
        Log.v(TAG, "setOnDisconnectListener()");
    }
 });

mVideoPlayer.setOnErrorListener(new Channel.OnErrorListener() {
    @Override
    public void onError(com.samsung.multiscreen.Error error) {
        Log.v(TAG, "setOnErrorListener(): Error: " + error.toString());
    }
 });

2. Message Listener

Various message Listeners have been added to the SDK.

Create an object of OnVideoPlayerListener / OnAudioPlayerListener / OnPhotoPlayerListener and register it using addOnMessageListener() to get the events, as and when, an event is triggered on TV.

Following are events supported by VideoPlayer / AudioPlayer / PhotoPlayer class.

VideoPlayer
Listener Description
onBufferingStart() Notify start of buffering.
onBufferingComplete() Notify completion of buffering.
onBufferingProgress(int progress) Notify current buffering progress in percentage.
onCurrentPlayTime(int progress) Notify current video/audio play time in milliseconds.
onStreamingStarted(int duration) Notify start of video/audio streaming.
onStreamCompleted() Notify completion of video/audio streaming.
onPlayerInitialized() Notification for default media player(DMP) initialization completion on TV.
onPlayerChange(String playerType) Notification for change of player on TV. (e.g. from audio player to photo player).
onPlay() Notify play video/audio/photo event.
onPause() Notify pause video/audio/photo event.
onStop() Notify stop video/audio/photo event.
onForward() Notify forward video event.
onRewind()) Notify rewind video event.
onMute() Notify mute TV volume event.
onUnMute() Notify unmute TV volume event.
onVolumeChange() Notify change in volume level.
onControlStatus(int volLevel) Notification received when getControlStatus() is called.
onNext() Notify next video/audio/photo event.
onPrevious() Notify previous video/audio/photo event.
onAddToList(JSONObject enqueuedItem) Notification received when an item is added to the list.
onRemoveFromList (JSONObject dequeuedItem) Notification received when an item is removed from the list.
onClearList() Notification received when a request is sent to clear the list on TV.
onGetList(JSONArray queueList) Notification received when a request is sent to fetch the list from TV.
onRepeat(Player.RepeatMode mode) Notify repeat request, sent to TV.
onCurrentPlaying (JSONObject currentItem, String playerType) Notify current playing video/audio/photo item. Details of the item are provided in JSON object.
onApplicationSuspend() Notification received when TV widget is suspended (sent to background).
onApplicationResume() Notification received when TV widget is resumed from suspended state.
onError(Error error) Notify error message sent by TV.
AudioPlayer
Listener Description
onBufferingStart() notify start of buffering.
onBufferingComplete() notify completion of buffering.
onBufferingProgress(int progress) notify current buffering progress in percentage.
onCurrentPlayTime(int progress) notify current video/audio play time in milliseconds.
onStreamingStarted(int duration) notify start of video/audio streaming.
onStreamCompleted() notify completion of video/audio streaming.
onPlayerInitialized() notification for default media player (DMP) initialization completion on TV.
onPlayerChange(String playerType) notification for change of player on TV. (e.g. from audio player to photo player).
onPlay() notify play video/audio/photo event.
onPause() notify pause video/audio/photo event.
onStop() notify stop video/audio/photo event.
onMute() notify mute TV volume event.
onUnMute() notify unmute TV volume event.
onVolumeChange() notify change in volume level.
onControlStatus(int volLevel) notification received when getControlStatus() is called.
onNext() notify next video/audio/photo event.
onPrevious() notify previous video/audio/photo event.
onAddToList(JSONObject enqueuedItem) notification received when an item is added to the list.
onRemoveFromList (JSONObject dequeuedItem) notification received when an item is removed from the list.
onClearList() notification received when a request is sent to clear the list on TV.
onGetList(JSONArray queueList) notification received when a request is sent to fetch the list from TV.
onShuffle(Boolean status) notify shuffle request sent to TV. TRUE signifies shuffle ON,ALSE signifies shuffle OFF.
onRepeat(Player.RepeatMode mode) notify repeat request, sent to TV.
onCurrentPlaying (JSONObject currentItem, String playerType) notify current playing video/audio/photo item. Details of the item are provided in JSON object.
onApplicationSuspend() notification received when TV widget is suspended (sent to background).
onApplicationResume() notification received when TV widget is resumed from suspended state.
onError(Error error) notify error message sent by TV.
PhotoPlayer
Listener Description
onPlayerInitialized() notification for default media player (DMP) initialization completion on TV.
onPlayerChange(String playerType) notification for change of player on TV. (e.g. from audio player to photo player).
onPlay() notify play video/audio/photo event.
onPause() notify pause video/audio/photo event.
onStop() notify stop video/audio/photo event.
onMute() notify mute TV volume event.
onUnMute() notify unmute TV volume event.
onVolumeChange() notify change in volume level.
onControlStatus(int volLevel) notification received when getControlStatus() is called.
onNext() notify next video/audio/photo event.
onPrevious() notify previous video/audio/photo event.
onAddToList(JSONObject enqueuedItem) notification received when an item is added to the list.
onRemoveFromList (JSONObject dequeuedItem) notification received when an item is removed from the list.
onClearList() notification received when a request is sent to clear the list on TV.
onGetList(JSONArray queueList) notification received when a request is sent to fetch the list from TV.
onRepeat(Player.RepeatMode mode) notify repeat request, sent to TV.
onCurrentPlaying (JSONObject currentItem, String playerType) notify current playing video/audio/photo item. Details of the item are provided in JSON object.
onApplicationSuspend() notification received when TV widget is suspended (sent to background).
onApplicationResume() notification received when TV widget is resumed from suspended state.
onError(Error error) notify error message sent by TV.

Example Android API usage:

VideoPlayer.OnVideoPlayerListener videoPlayerListener = new VideoPlayer.OnVideoPlayerListener() {
    @Override
    public void onBufferingStart() {
        Log.v(TAG, "PlayerNotice: onBufferingStart");
    }

    @Override
    public void onBufferingComplete() {
        Log.v(TAG, "PlayerNotice: onBufferingComplete");
    }

    @Override
    public void onBufferingProgress(int progress) {
        Log.v(TAG, "PlayerNotice: onBufferingProgress: " + progress); 
    }

    @Override
    public void onCurrentPlayTime(int progress) {
        Log.v(TAG, "PlayerNotice: onCurrentPlayTime: " + progress); 
    }

    @Override
    public void onStreamingStarted(int duration) {
        Log.v(TAG, "PlayerNotice: onVideoStreamStart: " + duration); 
    }

    @Override
    public void onStreamCompleted() {
        Log.v(TAG, "PlayerNotice: onStreamCompleted");
    }

    @Override
    public void onPlay() {
        Log.v(TAG, "PlayerNotice: onPlay");
    }

    @Override
    public void onPause() {
        Log.v(TAG, "PlayerNotice: onPause");
    }

    @Override
    public void onStop() {
        Log.v(TAG, "PlayerNotice: onStop");
    }

    @Override
    public void onForward() {
        Log.v(TAG, "PlayerNotice: onForward");
    }

    @Override
    public void onRewind() {
        Log.v(TAG, "PlayerNotice: onRewind");
    }

    @Override
    public void onMute() {
        Log.v(TAG, "PlayerNotice: onMute");
    }

    @Override
    public void onUnMute() {
        Log.v(TAG, "PlayerNotice: onUnMute");
    }

    @Override
    public void onError(com.samsung.multiscreen.Error error) {
        Log.v(TAG, "PlayerNotice: onError: " + error.getMessage());
    }

    @Override
    public void onAddToList(JSONObject enqueuedItem) {
        Log.v(TAG, "PlayerNotice: onAddToList: " + enqueuedItem.toString());
    }

    @Override
    public void onRemoveFromList(JSONObject dequeuedItem) {
        Log.v(TAG, "PlayerNotice: onRemoveFromList: " + dequeuedItem.toString());
    }

    @Override
    public void onClearList() {
        Log.v(TAG, "PlayerNotice: onClearList");
    }

    @Override
    public void onGetList(JSONArray queueList) {
        Log.v(TAG, "PlayerNotice: onGetList: " + queueList.toString());
    }

    @Override
    public void onCurrentPlaying(JSONObject currentItem, String playerType) {
        Log.v(TAG, "PlayerNotice: onCurrentPlaying: " + currentItem.toString());
    }

    @Override
    public void onRepeat(VideoPlayer.RepeatMode mode) {
        Log.v(TAG, "PlayerNotice: onRepeat: " + mode.toString());
    }

    @Override
    public void onControlStatus(int volLevel, Boolean muteStatus, Boolean shuffleStatus, VideoPlayer.RepeatMode repeatStatus) {
        Log.v(TAG, "PlayerNotice: onControlStatus: vol: " + volLevel + ", mute: " + muteStatus + ", shuffle: " + shuffleStatus + ", repeat: " + repeatStatus.name());
    }

    @Override
    public void onVolumeChange(int level) {
        Log.v(TAG, "PlayerNotice: onVolumeChange V: " + level);
    }

    @Override
    public void onPlayerInitialized() {
        Log.v(TAG, "PlayerNotice: onPlayerInitialized");
    }

    @Override
    public void onPlayerChange(String playerType) {
        Log.v(TAG, "PlayerNotice: onPlayerChange");
    }

    @Override
    public void onApplicationResume() {
        Log.v(TAG, "PlayerNotice: onApplicationResume");
    }

    @Override
    public void onApplicationSuspend() {
        Log.v(TAG, "PlayerNotice: onApplicationSuspend");
    }
 };
mVideoPlayer.addOnMessageListener(videoPlayerListener); 

Player Control

Video/Audio/Photo player object provides following APIs to control

VideoPlayer

API Description
play() plays current video/audio/slideshow.
pause() pauses current video/audio/slideshow.
stop() stops current video/audio/slideshow. slide show will start from beginning if played again.
forward() forwards current video by 10 seconds.
rewind() rewinds current video by 10 seconds.
mute() mutes TV volume.
unMute() un-mutes TV volume.
volumeUp() increases volume of TV by 1 level.
volumeDown() decreases volume of TV by 1 level.
next() plays next video,audio,photo in TV’s list.
previous() plays previous video,audio,photo in TV’s list.
repeat() toggles repeat mode to repeatOff, repeatAll & repeatSingle.
getControlStatus() fetches volume, repeat & shuffle control settings.
setVolume(int level) sets TV volume to specified level.
seekTo(int time, TimeUnit timeUnit) seeks video to given time.

AudioPlayer

API Description
play() plays current video/audio/slideshow.
pause() pauses current video/audio/slideshow.
stop() stops current video/audio/slideshow. slide show will start from beginning if played again.
mute() mutes TV volume.
unMute() un-mutes TV volume.
volumeUp() increases volume of TV by 1 level.
volumeDown() decreases volume of TV by 1 level.
next() plays next video,audio,photo in TV’s list.
previous() plays previous video,audio,photo in TV’s list.
repeat() toggles repeat mode to repeatOff, repeatAll & repeatSingle.
shuffle() toggles shuffle mode to shuffleOff & shuffleOn.
setRepeat() set repeat mode to repeatOff, repeatAll & repeatSingle.
setShuffle() set shuffle mode to shuffleOff & shuffleOn.
getControlStatus() fetches volume, repeat & shuffle control settings.
setVolume(int level) sets TV volume to specified level.
seekTo(int time, TimeUnit timeUnit) seeks video to given time.

PhotoPlayer

API Description
play() plays current video/audio/slideshow.
pause() pauses current video/audio/slideshow.
stop() stops current video/audio/slideshow. slide show will start from beginning if played again.
mute() mutes TV volume.
unMute() un-mutes TV volume.
volumeUp() increases volume of TV by 1 level.
volumeDown() decreases volume of TV by 1 level.
next() plays next video,audio,photo in TV’s list.
previous() plays previous video,audio,photo in TV’s list.
getControlStatus() fetches volume, repeat & shuffle control settings.
setVolume(int level) sets slideshow time period for each photo (in milliseconds).
setSlideTimeout(int slideTimeout)) seeks video to given time.
setBackgroundMusic(Uri uri) sets & plays slideshow’s background music.
stopBackgroundMusic() stops slideshow’s background music.

Play List (Queueing API)

Lists provide ability to manage a list of content which play in sequence.

Sequence is maintained by the order in which content are added to the list.

In order to enlist an item in TV’s list, corresponding player has to have an established connection with TV widget.

Connection with TV widget is established when first playContent() is called & onSuccess() callback is received in setOnConnectListener().

Following are the list specific APIs available to the user.

  • addToList(final Uri ContentUri) :

    Add content to the list.
  • addToList(final Uri uri, final String title, final Uri thumbUri) :

    Add content to the list.
  • addToList(final List<Map<String, String>> videoList) :

    dd content to the list.
  • removeFromList(final Uri uri) :

    remove item from the list.
  • clearList() :

    clear whole list.
  • getList() :

    fetch complete list.

Example Android API usage:

btnAddToList.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (CastStateMachineSingleton.getInstance().getCurrentCastState() ==
                 CastStates.CONNECTED) {

            mVideoPlayer.addToList(Uri.parse(item.videoUrl), 
                                    item.videoTitle, 
                                    Uri.parse(item.thumbnailUrl));
        }
    }
 });


List<Map<String, String>> list = new ArrayList<Map<String, String>>();
Map<String, String> item = null; 

try {
    JSONObject obj = new JSONObject(AssetJSONFile("videolist.json",MainActivity.this));
    JSONArray jarray = obj.getJSONArray("videos");
    for (int i = 0; i < jarray.length(); i++) {
        JSONObject json = jarray.getJSONObject(i);
        item = new HashMap<String, String>();
        item.put("url", json.getString("url"));
        item.put("title", json.getString("title"));
        item.put("thumbnailUrl", json.getString("thumbUrl"));
        list.add(item);
    }
 } catch(Exception e){
    Log.d(TAG, "Error: " + e);
}

mVideoPlayer.addToList(list); 

Support Multitasking

resumeApplicationInForeground() :

If player is sent to background by any other process or otherwise, android library receives an event – onApplicationSuspend().

To bring the player to foreground (from suspended to active state), API - resumeApplicationInForeground() can be used.

Event onApplicationResume() is received when application is successfully brought to foreground.

Example Android API usage:

btnBringAppToForeground.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        mAudioPlayer.resumeApplicationInForeground();
    }
});

Styled Media Player (SMP) Support

DMP allows developers to show standby-screen(s) and watermarks on DMP application, while content is being casted from mobile application.

Standby-screen is a splash screen shown to the user while they connect to TV. This screen may comprise of either application logo or any other information related to application. Developer may choose to provide up-to 3 images in standby-screen mode. If no standby images are provided, default DMP logo will be shown to the user with app’s connection status.

Watermark will be shown on top-right corner of the display area while the content is being casted on the TV. Ideal size for a watermark image is 150 (width) X 50 (height). Orientation, position & size of the watermark cannot be changed. If a larger image is provided, the image will be scaled to fit the watermark display area.

Following APIs are available for the developers to show their standby screen images & watermark images.

standbyConnect(Uri bgImageUrl1, Uri bgImageUrl2, Uri bgImageUrl3, Result<boolean> result)

This API establishes connection with TV and shows provided splash-screen(s) on the TV.

Example Android API usage:

mAudioPlayer.standbyConnect(bgImageUri1, bgImageUri2, bgImageUri3, new Result<Boolean>() {
    @Override
    public void onSuccess(Boolean result) {
        Log.d(TAG, "standbyConnect(): success : ");
        mPlayerType = PlayerType.STANDBY;
    }

    @Override
    public void onError(com.samsung.multiscreen.Error error) {
        Log.e(TAG, "standbyConnect(): error : " + error.getMessage());
    }
});

setPlayerWatermark(Uri watermarkUrl)

Example Android API usage:

@Override
public void onPlayerInitialized() {
    try {
        String watermarkUrl = mSettings.getString(mContext.getResources().getString(R.string.watermarkUrl));
        if (watermarkUrl != null && watermarkUrl != "") {
            mAudioPlayer.setPlayerWatermark(Uri.parse(watermarkUrl));
        }
    } catch (Exception e) {
        Log.e(TAG, "onPlayerInitialized() : Exception : " + e.getMessage());
    }
}

removePlayerWatermark()

Example Android API usage:

mAudioPlayer.removePlayerWatermark();

Error Code

Following are the default media player specific errors for different type of error strings:

Name Code Description
PLAYER_ERROR_UNKNOWN 100 Unknown error
PLAYER_ERROR_GENEREIC 101 Generic error
PLAYER_ERROR_CONNECTION_FAILED 102 Network issue
PLAYER_ERROR_AUDIO_CODEC_NOT_SUPPORTED 103 Audio codec not supported
PLAYER_ERROR_NOT_SUPPORTED_FILE 104 File format not supported
PLAYER_ERROR_VIDEO_CODEC_NOT_SUPPORTED 105 Video codec not supported
PLAYER_ERROR_PLAYER_NOT_LOADED 106 Player is not yet loaded or different player is loaded on TV
PLAYER_ERROR_INVALID_OPERATION 107 Invalid operation
PLAYER_ERROR_INVALID_PARAMETER 108 Called on invalid operation
PLAYER_ERROR_NO_SUCH_FILE 109 No such file found
PLAYER_ERROR_SEEK_FAILED 110 Fail to perform seek to operation
PLAYER_ERROR_REWIND 111 Error in rewind
PLAYER_ERROR_FORWARD 112 Error in forward
PLAYER_ERROR_RESTORE 113 Fail to restore the player
PLAYER_ERROR_RESOURCE_LIMIT 114 Resource max limit reached
PLAYER_ERROR_INVALID_STATE 115 Player invalid state
PLAYER_ERROR_NO_AUTH 116 Not authorized to play the requested content
PLAYER_ERROR_LAST_CONTENT 117 Can’t Dequeue last content from the list
PLAYER_ERROR_CURRENT_CONTENT 118 Can’t Dequeue current contentfrom the list
PLAYER_ERROR_INVALID_URI 401 Invalid URL
PLAYER_ERROR_INTERNAL_SERVER 500 Internal server error
PLAYER_ERROR_INVALID_TV_RESPONSE 300 Either there is an APPID mismatch or library received data as null (Library specific error)

Following are the Speaker specific errors for different type of error Message:

Message
You aborted the audio playback
A network error caused the audio download to fail
The audio playback was aborted due to a corruption problem or because the audio used features your browser did not support
An unknown error occurred

Registration

You must check the 'DMP' checkbox when you submit your application using DMP.

We recommend you to submit you mobile app on Seller office

There is no approval process required to use the DMP, but your mobile app can be tested for basic features and any problems or suggestions will be notified via Seller office.

Sample Application

Please view the source code in DefaultMediaPlayer2.0 to understand the basic workflow when using the SDK.

Downloads Sample Application