Domanda

Come sapete, riprodurre un filmato con l'oggetto MPMoviePlayerController usando

[[MPMoviePlayerController alloc] initWithContentURL: aURL];

Ora, voglio ottenere un costume NSURLProtocol in cui io decifrare una fonte di film che ha avuto sia cifrare da AlgorithmDES. È questa possibilità? grazie per dare alcuna ideas.need aiutano ~

È stato utile?

Soluzione

UPDATE: Ho parlato di Apple su questo e non è possibile utilizzare MPMoviePlayerController con una sottoclasse NSURLProtocol al momento


Hej,

Non sono sicuro ma potrebbe essere possibile. Attualmente sto lavorando su qualcosa di simile, ma non ce l'ho completamente funzionante. Quello che ho scoperto è che interagisce con MPMoviePlayerController mia abitudine NSURLProtocol sottoclasse ma sembra essere importante per prendere il HTTPHeaders del NSURLRequest in considerazione perché definiscono una serie di byte le esigenze MPMoviePlayerController.

Se li si dump in NSURLProtocol sottoclasse si otterrà qualcosa di simile due volte per l'inizio:

2011-01-16 17:00:47.287 iPhoneApp[1177:5f03] Start loading from request: {
Range = "bytes=0-1";

}

Quindi la mia ipotesi è che, fintanto che è possibile fornire l'intervallo corretto e restituire un file MP4 che può essere svolto dalla MPMoviePlayerController dovrebbe essere possibile!

EDIT: Ecco un link interessante: Protezione delle risorse in iPhone e iPad

Altri suggerimenti

La soluzione è quella di richieste proxy attraverso un server HTTP locale. Ho compiuto questo utilizzando CocoaHTTPServer .

Guarda l'esempio HTTPAsyncFileResponse.

C'è una soluzione più come di iOS 7. È possibile utilizzare un AVAssetResourceLoaderDelegate per AVAssetResourceLoader. Ma questo sarà solo lavoro con AVPlayer poi.

C'è un progetto demo da parte di Apple chiamato AVARLDelegateDemo uno sguardo ad esso e si dovrebbe trovare quello che ti serve. (Credo collegamento ad esso non è una buona idea, quindi basta cercare nella Developer Library su developer.apple.com) Quindi utilizzare qualsiasi schema URL personalizzato (senza dichiarare un NSURLProtocol) e manico che schema URL nel AVAssetResourceLoaderDelegate.

Se c'è un enorme interesse che potrebbe fornire una prova di concetto Gist.

@property AVPlayerViewController *avPlayerVC;
@property NSData *yourDataSource

// initialise avPlayerVC
    NSURL *dummyURL     = [NSURL URLWithString:@"foobar://dummy.mov"];// a non-reachable URL will force the use of the resourceLoader
    AVURLAsset *asset   = [AVURLAsset assetWithURL:dummyURL];
    [asset.resourceLoader setDelegate:self queue:dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0)];

    AVPlayerItem *item = [AVPlayerItem playerItemWithAsset:asset];

    self.avPlayerVC.player = [AVPlayer playerWithPlayerItem:item];
    self.avPlayerVC.player.actionAtItemEnd  = AVPlayerActionAtItemEndNone;



// implement AVAssetResourceLoaderDelegate

- (BOOL)resourceLoader:(AVAssetResourceLoader *)resourceLoader shouldWaitForLoadingOfRequestedResource:(AVAssetResourceLoadingRequest *)loadingRequest {

    loadingRequest.contentInformationRequest.contentType    = (__bridge NSString *)kUTTypeQuickTimeMovie;
    loadingRequest.contentInformationRequest.contentLength  = self.yourDataSource.length;
    loadingRequest.contentInformationRequest.byteRangeAccessSupported   = YES;

    NSRange range = NSMakeRange((NSUInteger)loadingRequest.dataRequest.requestedOffset, loadingRequest.dataRequest.requestedLength);
    [loadingRequest.dataRequest respondWithData:[self.yourDataSource subdataWithRange:range]];

    [loadingRequest finishLoading];
    return YES;
}

Si noti l'uso di un URL fittizio per forza AVPlayer di utilizzare i metodi AVAssetResourceLoaderDelegate invece di accedere direttamente l'URL.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top