Exemplo n.º 1
0
 public bool ShouldWaitForLoadingOfRequestedResource(AVAssetResourceLoader resourceLoader,
                                                     AVAssetResourceLoadingRequest loadingRequest)
 {
     try
     {
         var id = loadingRequest.Request.Url.Path.Trim('/');
         if (id.Contains('.'))
         {
             id = id.Substring(0, id.IndexOf('.'));
         }
         var songId = SongIdTracks[id];
         var data   = GetPlaybackData(songId, false);
         Task.Run(() => ProcessesRequest(resourceLoader, loadingRequest, data));
         return(true);
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex);
     }
     return(false);
 }
Exemplo n.º 2
0
 public override void DidCancelLoadingRequest(AVAssetResourceLoader resourceLoader, AVAssetResourceLoadingRequest loadingRequest)
 {
     player.DidCancelLoadingRequest(resourceLoader, loadingRequest);
 }
Exemplo n.º 3
0
 public override bool ShouldWaitForLoadingOfRequestedResource(AVAssetResourceLoader resourceLoader, AVAssetResourceLoadingRequest loadingRequest)
 {
     return(player.ShouldWaitForLoadingOfRequestedResource(resourceLoader, loadingRequest));
 }
Exemplo n.º 4
0
 public override void DidCancelLoadingRequest(AVAssetResourceLoader resourceLoader,
                                              AVAssetResourceLoadingRequest loadingRequest)
 {
     Parent.DidCancelLoadingRequest(resourceLoader, loadingRequest);
     // base.DidCancelLoadingRequest(resourceLoader, loadingRequest);
 }
Exemplo n.º 5
0
        async void ProcessesRequest(AVAssetResourceLoader resourceLoader,
                                    AVAssetResourceLoadingRequest loadingRequest, PlaybackData data)
        {
            if (data == null)
            {
                loadingRequest.FinishLoading();
                return;
            }
            try
            {
                var currentDownloadHelper = data.DownloadHelper;
                var content = loadingRequest.ContentInformationRequest;
                if (content != null)
                {
                    content.ByteRangeAccessSupported = true;

                    if (string.IsNullOrWhiteSpace(currentDownloadHelper.MimeType))
                    {
                        var success = await currentDownloadHelper.WaitForMimeType();
                    }
                    content.ContentType   = currentDownloadHelper.MimeType;
                    content.ContentLength = currentDownloadHelper.TotalLength;
                }

                var dataRequest = loadingRequest.DataRequest;

                Console.WriteLine(
                    $"Data Request: {dataRequest.RequestedOffset} - {dataRequest.RequestedLength} : {dataRequest.CurrentOffset} - {currentDownloadHelper.TotalLength}");
                var  allData   = Device.IsIos9 && dataRequest.RequestsAllDataToEndOfResource;
                long exspected = allData ? Math.Max(dataRequest.RequestedLength, currentDownloadHelper.TotalLength) : dataRequest.RequestedLength;
                int  sent      = 0;
                var  bufer     = new byte[exspected];
                lock (currentDownloadHelper)
                {
                    while (sent < exspected)
                    {
                        if (data.CancelTokenSource.IsCancellationRequested)
                        {
                            loadingRequest.FinishLoading();
                            return;
                        }
                        var startOffset = dataRequest.CurrentOffset != 0 ? dataRequest.CurrentOffset : dataRequest.RequestedOffset;
                        var remaining   = exspected - sent;
                        currentDownloadHelper.Position = startOffset;
                        if (loadingRequest.IsCancelled)
                        {
                            break;
                        }
                        var read       = currentDownloadHelper.Read(bufer, 0, (int)remaining);
                        var sendBuffer = bufer.Take(read).ToArray();
                        dataRequest.Respond(NSData.FromArray(sendBuffer));
                        sent += read;
                        if (sent + startOffset >= currentDownloadHelper.TotalLength)
                        {
                            break;
                        }
                    }
                }
                if (!loadingRequest.IsCancelled)
                {
                    loadingRequest.FinishLoading();
                    if (NativeAudioPlayer.Shared.State == PlaybackState.Buffering || NativeAudioPlayer.Shared.State == PlaybackState.Playing)
                    {
                        NativeAudioPlayer.Shared.player.CurrentPlayer.Play();
                    }
                }
            }
            catch (Exception ex)
            {
                loadingRequest.FinishLoadingWithError(new NSError((NSString)ex.Message, 0));
                TryPlayAgain(data.SongId);
                Console.WriteLine("***************** ERROR ******************");
                Console.WriteLine("Error in Resouce Loader. Trying Again\r\n {0}", ex);
                Console.WriteLine("*******************************************");
            }
        }
Exemplo n.º 6
0
 public void DidCancelLoadingRequest(AVAssetResourceLoader resourceLoader, AVAssetResourceLoadingRequest loadingRequest)
 {
 }