예제 #1
0
        // 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;
        }
예제 #3
0
 public static void DidResolveMediaSelection(this IAVAssetDownloadDelegate This, NSUrlSession session, AVAssetDownloadTask assetDownloadTask, AVMediaSelection resolvedMediaSelection)
 {
     throw new NotImplementedException();
 }
예제 #4
0
 public virtual void DidResolveMediaSelection(NSUrlSession session, AVAssetDownloadTask assetDownloadTask, AVMediaSelection resolvedMediaSelection)
 {
     throw new NotImplementedException();
 }
예제 #5
0
        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);
        }
예제 #6
0
        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);
        }