Pregunta

Como saben, jugar una película con objeto MPMoviePlayerController utilizando

[[MPMoviePlayerController alloc] initWithContentURL: aURL];

Ahora, quiero lograr una costumbre NSURLProtocol en el que voy a descifrar una fuente de película que tenía ser cifrar por AlgorithmDES. Es esa posibilidad? Gracias por dar ninguna ideas.need que ayudan a ~

¿Fue útil?

Solución

ACTUALIZACIÓN: hablé a Apple sobre esto y no es posible utilizar MPMoviePlayerController con una subclase NSURLProtocol en el momento


Hej,

No estoy seguro pero podría ser posible. Actualmente estoy trabajando en algo similar, pero no lo tengo completamente de trabajo. Lo que he descubierto es que interactúa con MPMoviePlayerController mi costumbre NSURLProtocol subclase pero parece ser importante para tomar la HTTPHeaders del NSURLRequest en cuenta, ya que definen una serie de bytes de las necesidades MPMoviePlayerController.

Si les volcar en su NSURLProtocol subclase obtendrá algo como esto dos veces por el principio:

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

}

Así que mi conjetura es que todo el tiempo que puede proporcionar el rango correcto y devolver un archivo MP4 que se pueden reproducir por el MPMoviePlayerController debería ser posible!

EDIT: Aquí hay un enlace interesante: protección de los recursos en el iPhone y el iPad aplicaciones

Otros consejos

La solución es solicitudes de proxy a través de un servidor HTTP local. He logrado esto mediante CocoaHTTPServer .

Mira el ejemplo HTTPAsyncFileResponse.

Hay una solución más a partir de iOS 7. Se puede utilizar un AVAssetResourceLoaderDelegate para AVAssetResourceLoader. Pero esto sólo funciona con AVPlayer a continuación.

Hay un proyecto de demostración por Apple llamada AVARLDelegateDemo tienen una mirada en ella y usted debe encontrar lo que necesita. (Creo que enlazan con él no es una buena idea, por lo que sólo la buscan en el desarrollador Biblioteca de developer.apple.com) A continuación, utilice cualquier esquema de URL personalizada (sin declarar un NSURLProtocol) y mango de ese esquema URL en el AVAssetResourceLoaderDelegate.

Si hay un enorme interés que podría proporcionar una prueba de concepto 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;
}

Aviso el uso de una dirección URL ficticia a la fuerza AVPlayer utilizar los métodos AVAssetResourceLoaderDelegate lugar de acceder a la URL directamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top