Initialize config on time somewhere in either splash or in application
onCreate.
Create the player
Initialize player. Create a MediaConfig object.
If podcast or without UI player (SlikePlayer3) need to be initialise, use following method.
public static void playMedia(@Nullable RenderingObjects renderingObjects, @NonNull MediaConfig[] configs, @NonNull Pair position, @Nullable IMediaStatus mediaStatus);
eg.
SlikePlayer3.playMedia(null, configs, new Pair<>(position, 0L), AudioMiniPlayer.this);
If normal player (SlikePlayer2) is initialized.
public void playMedia(final MediaConfig config, RenderingObjects renderingObjects, Pair position, IMediaStatus mediaStatus);
eg.
SlikePlayer2.get().playMedia(mediaConfig, renderingObjects, new Pair<>(0, 0L), this);
Initialize rendering object by providing framelayout/ slike PlayerView's layout container
RenderingObjects renderingObjects = new RenderingObjects(R.id.container, playerView.getLayoutContainer());
Player Control
In v3 player, playercontrol is not part of the SDK in this release. We are separately providing source code of control to modify the UI as per need.
The SDK can play many type of videos and has many third-party players like YouTube, DailyMotion, Facebook etc. All other players gives their own controls.
So, first check in K.MEDIAPLAYERDECIDED status to detect player type. Rest of the snippet as follows.
@Override
public void onStatus(@K.PlayerState int state, Status status){
if (state == K.MEDIA_PLAYER_DECIDED){
isTP = SlikePlayer2.get().getPlayerType() != K.PLAYER_EXO;
...
}
...
if(!isTP){
control.onStatus(status);
}
}
@Override
public void onAdStatus(AdsStatus status) {
if (status == null) return;
...
if (!isTP) {
control.onAdStatus(status);
}
}
@Override
public void onError(SAException err) {
errorView.setText(err.getMessage());
errorView.setVisibility(View.VISIBLE);
control.onError(err);
...
}
Note: Refer to PlayerView in UI module regarding control implementation.
Features
- Encrypted video playback
- DVR playback. Live and DVR switching
- Manifestless HLS playback.
- VOD, podcast and live-stream playback
- Live event
- Cue point
- Thumbnail preview on seek-bar
- Supported media format: HLS, MP4, MP3, Memes & GIF
- Low latency live event playback
- Secure streaming
- Gesture control for volume, brightness and media seek
- Resume playback
- Multiple player instances on a page
- Geo-blocking
- Central GA support
- YouTube, DailyMotion & FB video support
- Video playback with ExoPlayer
- In-house rich media analytics
- Video quality bucket selection
- Playback speed control
- Playlist feature to play multiple media files
- Completely customizable UI
- Custom autoplay feature
- Advance media event callback
- Multiple Language Support
- Simulive Feature
- Mute/UnMute Feature
- Chapter Implementation
Monetization features
- IMA support
- Pre and post-roll ad
- Mid-roll
Advance integration
Sample dependencies
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation 'com.google.firebase:firebase-analytics:20.0.2'
implementation "com.google.ads.interactivemedia.v3:interactivemedia:$rootProject.imaSDK"
implementation 'com.google.android.gms:play-services-ads:20.5.0'
implementation "androidx.appcompat:appcompat:$rootProject.appcompatVersion"
implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
implementation "androidx.concurrent:concurrent-futures:$rootProject.concurrentVersion"
implementation "androidx.work:work-runtime:$rootProject.runtimeVersion"
implementation "com.android.volley:volley:$rootProject.volleyVersion"
implementation "androidx.work:work-runtime:$rootProject.runtimeVersion"
implementation "in.slike.player.v3core:v3core:$v3core"
implementation "in.slike.player.v3:player:$slikeversion"
implementation 'com.android.support:multidex:1.0.3'
implementation "androidx.lifecycle:lifecycle-common-java8:2.4.0"
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'com.google.android.material:material:1.5.0-alpha02'
implementation "androidx.viewpager2:viewpager2:1.0.0"
implementation "com.google.android.exoplayer:exoplayer-core:$rootProject.exoVersion"
implementation "com.google.android.exoplayer:exoplayer-hls:$rootProject.exoVersion"
implementation "com.google.android.exoplayer:exoplayer-dash:$rootProject.exoVersion"
implementation "com.google.android.exoplayer:extension-ima:$rootProject.exoVersion"
implementation "com.google.android.exoplayer:extension-mediasession:$rootProject.exoVersion"
implementation "com.google.android.gms:play-services-analytics:$rootProject.analyticsVersion"
compileOnly 'org.checkerframework:checker-qual:3.5.0'
implementation 'androidx.media:media:1.5.0'
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.1.0'
implementation 'androidx.palette:palette:1.0.0'
implementation 'org.jetbrains:annotations:16.0.1'
implementation project(path: ':ui')
implementation 'com.pierfrancescosoffritti.androidyoutubeplayer:core:10.0.5'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2"
implementation "androidx.core:core-ktx:1.7.0"
implementation "com.squareup.okhttp3:okhttp:$rootProject.okHttpVersion"
implementation "com.squareup.okhttp3:logging-interceptor:$rootProject.okHttpVersion"
}
Configuration lists
MediaConfig
Property or method name |
Type |
Default value |
Description |
MediaConfig(@NonNull String slikeID) |
|
|
Constructor |
MediaConfig(
@NonNull String slikeID,
@K.VideoSourceType int sourceType) |
|
|
Constructor |
setSlikeID(@NonNull String slikeID) |
|
|
Method |
setTPID(String TPID,
@K.VideoSourceType int sourceType) |
|
|
Method. The TPID could be a valid URL or related media id.
|
setTitle(String title) |
|
|
Method |
setSeotitle(String seotitle) |
|
|
Method.
The SEO title is English only text pass
for ad monetisation. This is mandatory if language
is other than english |
setDesc(String desc) |
|
|
Method |
setPoster(Object poster) |
|
|
The poster can be String or Bitmap |
The poster can be String or Bitmap
|
|
|
The thumb can be String or Bitmap |
PlayerConfig
Property or method name |
Type |
Default value |
Description |
setAutoPlay(boolean autoPlay) |
boolean |
true |
Auto play media
|
autoPlayList |
boolean |
true |
Auto play media playlist
|
autoRepeat |
boolean |
false |
Auto repeat media
|
autoRepeatList |
boolean |
false |
Auto repeat media playlist
|
shuffleMode |
boolean |
false |
Shuffle the playlist
|
retainCurrentMedia |
boolean |
true |
Continue playing current media if exists
in the new playlist |
setPlayerVolume(int playerVolume) |
boolean |
Current system
volume |
Player volume. 0 >= vol <= 100 |
Analytics other config properties
Constants
All constants are defined in the class K (in.slike.player.v3core.K).
BitrateModes
Bitrate control constants.
Name |
Description |
AUTO_BITRATE |
Auto bitrate adjustment |
LOW_BITRATE |
Low bitrates bucket only |
MEDIUM_BITRATE |
Medium bitrates bucket only |
HIGH_BITRATE |
High bitrates bucket only |
SpeedModes
Playback speed control constants.
Name |
Description |
SLOWSPEED |
Playback speed 0.5X |
NORMALSPEED |
Normal playback speed |
SPEED |
Playback speed 1.5X |
HIGHSPEED |
Playback speed 2.0X |
VERYHIGHSPEED |
Playback speed 2.5X |
ULTRAHIGHSPEED |
Playback speed 3.0X |
ErrorHandlingModes
Defines how errors can be handled.
Name |
Description |
SAFE_ONLY |
The player handles all safe errors itself |
SAFE_NETWORK |
Handles safe errors including network related errors |
ALL_ERRORS |
Handle all errors itself and no error will be thrown out |
License
Copyright 2022 Times Internet
Licensed under the Apache License, Version 2.0 (the “License”); you may
not use this file except in compliance with the License. You may obtain
a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an “AS IS” BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.