diff --git a/README.md b/README.md index 55c14f5..beba1a5 100644 --- a/README.md +++ b/README.md @@ -198,7 +198,9 @@ var pendingResult: PendingResult? = null val loadOptions = MediaLoadOptions.Builder().setAutoplay(true).setPlayPosition(0L).build() ``` -> **Important: In case for Live Media, `setPlayPosition` should be passed `-1`** +> **NOTE: In case for Live Media, `setPlayPosition` should be passed `MediaInfoUtils.LIVE_EDGE` or `-1L`**. +> +> **In case, for VOD assets, app wants to pass the start position for the player, this parameter can be used.** ##### 7. Finally load the `RemoteMediaClient`, @@ -211,15 +213,36 @@ pendingResult = remoteMediaClient!!.load(mediaInfo object, loadOptions) For VAST Ad URL, pass AdUrl in `MediaInfoUtils`, -`val adsConfig = MediaInfoUtils.createAdsConfigVastInPosition(0, adTagUrl)` +`val adsConfig = MediaInfoUtils.createAdsConfigVastInPosition(startPosition, adTagUrl)` For VMAP, pass AdUrl like this, `val adsConfig = MediaInfoUtils.createAdsConfigVmap(adTagUrl)` +For VAST Ad response XML, pass ad response to + +`MediaInfoUtils.createAdsResponseConfigVastInPosition(startPosition, adResponse)` + +For VMAP Ad response XML, pass ad response to + +`MediaInfoUtils.createAdResponseConfigVmap(adResponse)` + Then pass the `AdsConfig` object to `setAdsConfig` on the respective cast builder object (OTT/OVP or Basic) -`phoenixCastBuilder.setAdsConfig(Ads_Config)` +**OTT:** `phoenixCastBuilder.setAdsConfig(Ads_Config)` + +**OVP:** `ovpV3CastBuilder.setAdsConfig(Ads_Config)` + +**BASIC:**`basicCastBuilder.setAdsConfig(Ads_Config)` + +`startPosition` is the cast player start position. Let's suppose media is playing back at some position x seconds and when the user connects then app want to media to start from x seconds then use this parameter. This is only meant for VAST ad url/response. It will be one time ad playback. + +For VMAP, anyways based on the time offset given in the VMAP, ads will be played. + +> **NOTE : We have [IMA Plugin](https://github.com/kaltura/playkit-android-ima) for Ad playback. That is only meant for in app Ad playback. IMA Plugin does not help to play the Ads while using the cast.** + +> **For Cast the above given configuration is must to have otherwise Ad will not play in GoogleCast.** + #### Pass External Subtitles for the media @@ -260,4 +283,4 @@ Simply load the next media given in **Step - 7** above. ### Samples: -[Kaltura Player Google Cast Sample](https://github.com/kaltura/kaltura-player-android-samples/tree/develop/AdvancedSamples/ChromecastCAFSample) \ No newline at end of file +[Kaltura Player Google Cast Sample](https://github.com/kaltura/kaltura-player-android-samples/tree/develop/AdvancedSamples/ChromecastCAFSample) diff --git a/googlecast/src/main/java/com/kaltura/playkit/plugins/googlecast/caf/MediaInfoUtils.java b/googlecast/src/main/java/com/kaltura/playkit/plugins/googlecast/caf/MediaInfoUtils.java index dc55235..6070788 100644 --- a/googlecast/src/main/java/com/kaltura/playkit/plugins/googlecast/caf/MediaInfoUtils.java +++ b/googlecast/src/main/java/com/kaltura/playkit/plugins/googlecast/caf/MediaInfoUtils.java @@ -26,9 +26,19 @@ import java.util.ArrayList; import java.util.List; +/** + * Utility class may be used to build the OVP, OTT media info objects + * for Cast builders. + * Along with that AdConfig objects can also be build + * using Ad URL or Ad response + */ public class MediaInfoUtils { - public static final int LIVE_EDGE = -1000; + /** + * Must to set variable in `setPlayPosition` + * for the LIVE medias + */ + public static final long LIVE_EDGE = -1L; public static MediaInfo buildOVPMediaInfo(String entryId, String ks, @@ -88,6 +98,13 @@ public static MediaInfo buildOTTMediaInfo(String entryId, return mediaInfo; } + /** + * Create the VAST AdConfig for GoogleCast with playback position + * + * @param playbackPositionInMs start position in miliseconds + * @param adTagUrl VAST ad url + * @return AdsConfig + */ public static AdsConfig createAdsConfigVastInPosition(long playbackPositionInMs, String adTagUrl) { List adBreakClipInfoList = new ArrayList<>(); VastAdsRequest vastRequest = new VastAdsRequest.Builder().setAdTagUrl(adTagUrl).build(); @@ -99,14 +116,51 @@ public static AdsConfig createAdsConfigVastInPosition(long playbackPositionInMs, AdBreakInfo adBreakInfo1 = new AdBreakInfo.Builder(playbackPositionInMs).setBreakClipIds(breakClipIds).setId("101").build(); adBreakInfoList.add(adBreakInfo1); - AdsConfig adsConfig = new VastAdsConfig().setVastAdBreakClipInfoList(adBreakClipInfoList).setVastAdBreakInfoList(adBreakInfoList); - return adsConfig; + return new VastAdsConfig().setVastAdBreakClipInfoList(adBreakClipInfoList).setVastAdBreakInfoList(adBreakInfoList); } + /** + * Create the VAST AdConfig for GoogleCast with playback position + * + * @param playbackPositionInMs start position in miliseconds + * @param adTagResponse VAST XML ad response + * @return AdsConfig + */ + public static AdsConfig createAdsResponseConfigVastInPosition(long playbackPositionInMs, String adTagResponse) { + List adBreakClipInfoList = new ArrayList<>(); + VastAdsRequest vastRequest = new VastAdsRequest.Builder().setAdsResponse(adTagResponse).build(); + AdBreakClipInfo clipInfo1 = new AdBreakClipInfo.Builder("100").setVastAdsRequest(vastRequest).build(); + adBreakClipInfoList.add(clipInfo1); + + List adBreakInfoList = new ArrayList<>(); + final String[] breakClipIds = new String[]{"100"}; + AdBreakInfo adBreakInfo1 = new AdBreakInfo.Builder(playbackPositionInMs).setBreakClipIds(breakClipIds).setId("101").build(); + adBreakInfoList.add(adBreakInfo1); + + return new VastAdsConfig().setVastAdBreakClipInfoList(adBreakClipInfoList).setVastAdBreakInfoList(adBreakInfoList); + } + + /** + * Create the VMAP AdConfig for GoogleCast + * + * @param adTagUrl VMAP ad url + * @return AdsConfig + */ public static AdsConfig createAdsConfigVmap(String adTagUrl) { - AdsConfig adsConfig = new VmapAdsConfig() + return new VmapAdsConfig() .setVmapAdRequest(new VmapAdRequest() .setAdTagUrl(adTagUrl)); - return adsConfig; + } + + /** + * Create the VMAP AdConfig for GoogleCast + * + * @param adTagResponse VMAP XML ad response + * @return AdsConfig + */ + public static AdsConfig createAdResponseConfigVmap(String adTagResponse) { + return new VmapAdsConfig() + .setVmapAdRequest(new VmapAdRequest() + .setAdsResponse(adTagResponse)); } }