Skip to content

Commit

Permalink
FFE-10135 cont (#95)
Browse files Browse the repository at this point in the history
* fix demo app to avoid loading errored OTT/OVP Items
add adapters samples
  • Loading branch information
giladna authored Mar 17, 2021
1 parent 87a2501 commit d92e41e
Showing 1 changed file with 118 additions and 3 deletions.
121 changes: 118 additions & 3 deletions dtgdemo/src/main/java/com/kaltura/dtg/demo/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import com.google.android.gms.security.ProviderInstaller;
import com.kaltura.dtg.ContentManager;
import com.kaltura.dtg.DownloadItem;
import com.kaltura.dtg.DownloadRequestParams;
import com.kaltura.dtg.DownloadState;
import com.kaltura.dtg.DownloadStateListener;
import com.kaltura.playkit.LocalAssetsManager;
Expand All @@ -31,6 +32,7 @@
import com.kaltura.playkit.PKMediaEntry;
import com.kaltura.playkit.PKMediaFormat;
import com.kaltura.playkit.PKMediaSource;
import com.kaltura.playkit.PKRequestParams;
import com.kaltura.playkit.PlayKitManager;
import com.kaltura.playkit.Player;
import com.kaltura.playkit.PlayerEvent;
Expand Down Expand Up @@ -160,7 +162,8 @@ private static List<Item> loadOTTItems(String phoenixBaseURL, int partnerId, Str
new PhoenixMediaProvider()
.setSessionProvider(sessionProvider)
.setAssetId(mediaId)
.setProtocol(PhoenixMediaProvider.HttpProtocol.Https)
.setProtocol(PhoenixMediaProvider.HttpProtocol.All)
//.setProtocol(PhoenixMediaProvider.HttpProtocol.Https)
.setContextType(APIDefines.PlaybackContextType.Playback)
.setAssetType(APIDefines.KalturaAssetType.Media)
.setFormats(format).load(response -> {
Expand Down Expand Up @@ -205,9 +208,24 @@ static List<Item> loadItems() {

// TODO: fill the list with Items -- each item has a single PKMediaSource with relevant DRM data.
// Using OVP provider for simplicity
// items.addAll(loadOVPItems(2222401, "1_q81a5nbp", "0_3cb7ganx"));
// List<Item> ovpList = loadOVPItems(2222401, "1_q81a5nbp", "0_3cb7ganx");
// if (ovpList != null && !ovpList.isEmpty()) {
// for (Item item : ovpList) {
// if (item != null && !TextUtils.isEmpty(item.getUrl())) {
// items.add(item);
// }
// }
// }

// Using Phoenix provider for simplicity
items.addAll(loadOTTItems("https://api-preprod.ott.kaltura.com/v5_1_0/api_v3/", 198, "", "Mobile_Devices_Main_HD_Dash", "480989"));
List<Item> ottList = loadOTTItems("https://rest-us.ott.kaltura.com/v4_5/api_v3/", 3009, "", "Mobile_Main", "548576");
if (ottList != null && !ottList.isEmpty()) {
for (Item item : ottList) {
if (item != null && !TextUtils.isEmpty(item.getUrl())) {
items.add(item);
}
}
}

// For simple cases (no DRM), no need for MediaSource.
//noinspection CollectionAddAllCanBeReplacedWithConstructor
Expand Down Expand Up @@ -611,6 +629,24 @@ public void onProviderInstallFailed(int i, Intent intent) {
contentManager.getSettings().createNoMediaFileInDownloadsDir = true;
contentManager.getSettings().crossProtocolRedirectEnabled = true;

//// for adding headers on manifest
// Map<String,String> headers = new HashMap<>();
// headers.put("aaa", "bbb");
// headers.put("ccc","ddd");
// MediaRequestAdapter mediaAdapter = new MediaRequestAdapter();
// mediaAdapter.customHeaders1 = headers;
// contentManager.getSettings().downloadRequestAdapter = mediaAdapter;
//
//

//// for adding headers on chunks
// Map<String,String> chunkheaders = new HashMap<>();
// chunkheaders.put("zzz", "xxx");
// chunkheaders.put("www","vvv");
// ChunkRequestAdapter chunkAdapter = new ChunkRequestAdapter();
// chunkAdapter.customHeaders2 = chunkheaders;
// contentManager.getSettings().chunksUrlAdapter = chunkAdapter;

contentManager.addDownloadStateListener(cmListener);

try {
Expand All @@ -628,6 +664,13 @@ public void onProviderInstallFailed(int i, Intent intent) {
}

localAssetsManager = new LocalAssetsManager(context);

// for adding headers on license url
// String customAdapterData = "your custom data";
// DRMLicenseAdapter.customData = customAdapterData;
// final DRMLicenseAdapter licenseRequestAdapter = new DRMLicenseAdapter();
// localAssetsManager.setLicenseRequestAdapter(licenseRequestAdapter);

//localAssetsManager.forceWidevineL3Playback(true);

findViewById(R.id.download_control).setOnClickListener(v -> {
Expand Down Expand Up @@ -882,6 +925,14 @@ private void playItem(String itemId, PKMediaSource mediaSource, PKMediaEntry.Med
PKMediaEntry entry = new PKMediaEntry().setId(itemId).setMediaType(type).setSources(Collections.singletonList(mediaSource));

setupPlayer();
player.getSettings().setAllowCrossProtocolRedirect(true);

// for adding headers on license url
// String customAdapterData = "your custom data";
// DRMLicenseAdapter.customData = customAdapterData;
// final DRMLicenseAdapter licenseRequestAdapter = new DRMLicenseAdapter();
// player.getSettings().setLicenseRequestAdapter(licenseRequestAdapter);


player.prepare(new PKMediaConfig().setMediaEntry(entry));
player.play();
Expand Down Expand Up @@ -953,4 +1004,68 @@ protected void onDestroy() {
contentManager.stop();
}
}

static class MediaRequestAdapter implements DownloadRequestParams.Adapter {

public static Map<String,String> customHeaders1;

@Override
public DownloadRequestParams adapt(DownloadRequestParams requestParams) {

if (requestParams == null) {
return null;
}

DownloadRequestParams downloadRequestParams = new DownloadRequestParams(requestParams.url, customHeaders1);
return downloadRequestParams;
}

@Override
public void updateParams(String playSessionId) {

}
}

static class ChunkRequestAdapter implements DownloadRequestParams.Adapter {

public static Map<String,String> customHeaders2;

@Override
public DownloadRequestParams adapt(DownloadRequestParams requestParams) {

if (requestParams == null) {
return null;
}

DownloadRequestParams downloadRequestParams = new DownloadRequestParams(requestParams.url, customHeaders2);
return downloadRequestParams;
}

@Override
public void updateParams(String playSessionId) {

}
}

static class DRMLicenseAdapter implements PKRequestParams.Adapter {

public static String customData;
@Override
public PKRequestParams adapt(PKRequestParams requestParams) {
requestParams.headers.put("customData", customData);
return requestParams;
}

@Override
public void updateParams(Player player) {
// TODO?
}

@Override
public String getApplicationName() {
return null;
}
}


}

0 comments on commit d92e41e

Please sign in to comment.