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.
- service.createVideoPlayer(String appName) :
create a video player reference. - videoPlayer.addOnMessageListener(videoPlayerListener) :
add listener to get player response & other events. - videoPlayer.playContent(contentUrl, title, thumbnailUrl, callback) :
play the video content on TV. - 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.
- service.createAudioPlayer(String appName) :
create an audio player reference. - audioPlayer.addOnMessageListener(audioPlayerListener) :
add listener to get player response & other events. - audioPlayer.playContent(contentUrl, title, albumName, albumArtUrl, callback) :
play the audio content on TV. - 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.
- service.createPhotoPlayer(String appName) :
create a photo player reference. - photoPlayer.addOnMessageListener(photoPlayerListener) :
add listener to get player response & other events. - photoPlayer.playContent(contentUrl, title, callback) :
display the image content on TV. - 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.