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); }
public override void DidCancelLoadingRequest(AVAssetResourceLoader resourceLoader, AVAssetResourceLoadingRequest loadingRequest) { player.DidCancelLoadingRequest(resourceLoader, loadingRequest); }
public override bool ShouldWaitForLoadingOfRequestedResource(AVAssetResourceLoader resourceLoader, AVAssetResourceLoadingRequest loadingRequest) { return(player.ShouldWaitForLoadingOfRequestedResource(resourceLoader, loadingRequest)); }
public override bool ShouldWaitForRenewalOfRequestedResource(AVAssetResourceLoader resourceLoader, AVAssetResourceRenewalRequest renewalRequest) { return(player.ShouldWaitForLoadingOfRequestedResource(resourceLoader, renewalRequest)); }
public override bool ShouldWaitForResponseToAuthenticationChallenge(AVAssetResourceLoader resourceLoader, NSUrlAuthenticationChallenge authenticationChallenge) { return(base.ShouldWaitForResponseToAuthenticationChallenge(resourceLoader, authenticationChallenge)); }
public override void DidCancelLoadingRequest(AVAssetResourceLoader resourceLoader, AVAssetResourceLoadingRequest loadingRequest) { Parent.DidCancelLoadingRequest(resourceLoader, loadingRequest); // base.DidCancelLoadingRequest(resourceLoader, loadingRequest); }
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("*******************************************"); } }
public void DidCancelLoadingRequest(AVAssetResourceLoader resourceLoader, AVAssetResourceLoadingRequest loadingRequest) { }