Question

Comme vous le savez, jouer un film avec un objet en utilisant MPMoviePlayerController

[[MPMoviePlayerController alloc] initWithContentURL: aURL];

maintenant, je veux obtenir une coutume NSURLProtocol dans lequel je décrypte une source de film qui avait être Crypter par AlgorithmDES. Est-ce possible? Merci de donner une ideas.need vous aider ~

Était-ce utile?

La solution

Mise à jour: J'ai parlé à Apple à ce sujet et il est impossible d'utiliser MPMoviePlayerController avec une sous-classe NSURLProtocol au moment


Hej,

Je ne suis pas sûr, mais il pourrait être possible. Je travaille actuellement sur quelque chose de similaire, mais ne l'ai pas travailler complètement. Ce que j'ai découvert est que MPMoviePlayerController interagit avec mon habitude NSURLProtocol sous-classe mais il semble important de prendre la httpHeaders du NSURLRequest en compte parce qu'ils définissent une plage d'octets les besoins de MPMoviePlayerController.

Si vous les jeter dans votre sous-classe NSURLProtocol vous obtiendrez quelque chose comme ça deux fois pour le début:

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

}

Je pense que tant que vous pouvez fournir la gamme correcte et retourner un fichier mp4 qui peut être joué par le MPMoviePlayerController il devrait être possible!

EDIT: Voici un lien intéressant: La protection des ressources en applications pour iPhone et iPad

Autres conseils

La solution est à des demandes proxy via un serveur HTTP local. J'ai accompli cela en utilisant CocoaHTTPServer .

Regardez l'exemple HTTPAsyncFileResponse.

Il y a une solution plus que d'iOS 7. Vous pouvez utiliser un AVAssetResourceLoaderDelegate pour AVAssetResourceLoader. Mais cela ne fonctionne qu'avec AVPlayer alors.

Il y a un projet de démonstration par Apple appelé AVARLDelegateDemo ont un coup d'oeil et vous devriez trouver ce que vous avez besoin. (Je pense un lien vers elle est pas une bonne idée, il suffit de chercher dans la Developer Library sur developer.apple.com) Ensuite, utilisez tout système d'URL personnalisé (sans déclarer NSURLProtocol) et poignée dans le système URL AVAssetResourceLoaderDelegate.

S'il y a un énorme intérêt que je pourrait fournir une preuve de concept essentiel.

@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;
}

Notez l'utilisation d'une URL factice à la force AVPlayer utiliser les méthodes de AVAssetResourceLoaderDelegate au lieu d'accéder directement l'URL.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top