// Return the display names for the media selection options that are currently selected in the specified group private string GetDisplayNamesForSelectedMediaOptions(AVMediaSelection mediaSelection) { string displayNames = string.Empty; var asset = mediaSelection.Asset; if (asset == null) { return(displayNames); } foreach (var mediaCharacteristic in asset.AvailableMediaCharacteristicsWithMediaSelectionOptions) { /* * Obtain the AVMediaSelectionGroup object that contains one or more options with the * specified media characteristic, then get the media selection option that's currently * selected in the specified group. */ var mediaSelectionGroup = asset.MediaSelectionGroupForMediaCharacteristic(mediaCharacteristic); var option = mediaSelection.GetSelectedMediaOption(mediaSelectionGroup); // Obtain the display string for the media selection option displayNames += string.IsNullOrWhiteSpace(displayNames) ? " " + option.DisplayName : ", " + option.DisplayName; } return(displayNames); }
public override void DidResolveMediaSelection(NSUrlSession session, AVAssetDownloadTask assetDownloadTask, AVMediaSelection resolvedMediaSelection) { Log.Debug($"DidResolveMediaSelection: {assetDownloadTask?.TaskDescription} | {resolvedMediaSelection.Asset}"); // You should be sure to use this delegate callback to keep a reference // to `resolvedMediaSelection` so that in the future you can use it to // download additional media selections. mediaSelectionMap [assetDownloadTask] = resolvedMediaSelection; }
public static void DidResolveMediaSelection(this IAVAssetDownloadDelegate This, NSUrlSession session, AVAssetDownloadTask assetDownloadTask, AVMediaSelection resolvedMediaSelection) { throw new NotImplementedException(); }
public virtual void DidResolveMediaSelection(NSUrlSession session, AVAssetDownloadTask assetDownloadTask, AVMediaSelection resolvedMediaSelection) { throw new NotImplementedException(); }
public void DidLoadTimeRange(NSUrlSession session, AVAggregateAssetDownloadTask aggregateAssetDownloadTask, CoreMedia.CMTimeRange timeRange, NSValue[] loadedTimeRanges, CoreMedia.CMTimeRange timeRangeExpectedToLoad, AVMediaSelection mediaSelection) { // This delegate callback should be used to provide download progress for your AVAssetDownloadTask. if (!activeDownloadsMap.ContainsKey(aggregateAssetDownloadTask)) { return; } var asset = activeDownloadsMap[aggregateAssetDownloadTask]; var percentComplete = 0.0; foreach (var value in loadedTimeRanges) { var loadedTimeRange = value.CMTimeRangeValue; percentComplete += loadedTimeRange.Duration.Seconds / timeRangeExpectedToLoad.Duration.Seconds; } var userInfo = new Dictionary <string, object>(); userInfo[Asset.Keys.Name] = new NSString(asset.Stream.Name); userInfo[Asset.Keys.PercentDownloaded] = new NSNumber(percentComplete); var userInfoDictionary = NSDictionary.FromObjectsAndKeys(userInfo.Values.ToArray(), userInfo.Keys.ToArray()); NSNotificationCenter.DefaultCenter.PostNotificationName(AssetPersistenceManager.AssetDownloadProgress, null, userInfoDictionary); }
public void DidCompleteForMediaSelection(NSUrlSession session, AVAggregateAssetDownloadTask aggregateAssetDownloadTask, AVMediaSelection mediaSelection) { /* * This delegate callback provides an AVMediaSelection object which is now fully available for * offline use. You can perform any additional processing with the object here. */ Asset asset = null; activeDownloadsMap.TryGetValue(aggregateAssetDownloadTask, out asset); if (asset == null || Asset.Keys.Name != asset.Stream.Name) { return; } aggregateAssetDownloadTask.TaskDescription = asset.Stream.Name; aggregateAssetDownloadTask.Resume(); var userInfo = new Dictionary <string, string>(); userInfo[Asset.Keys.DownloadState] = new NSString(Asset.Keys.DownloadState.ToString()); userInfo[Asset.Keys.DownloadSelectionDisplayName] = new NSString(GetDisplayNamesForSelectedMediaOptions(mediaSelection)); var userInfoDictionary = NSDictionary.FromObjectsAndKeys(userInfo.Values.ToArray(), userInfo.Keys.ToArray()); NSNotificationCenter.DefaultCenter.PostNotificationName(AssetPersistenceManager.AssetDownloadStateChanged, null, userInfoDictionary); }