Frage

Wie Sie wissen, einen Film mit MPMoviePlayerController Objekt spielt mit

[[MPMoviePlayerController alloc] initWithContentURL: aURL];

Jetzt will ich eine benutzerdefinierte erreichen NSURLProtocol, in dem ich einen Film Quelle entschlüsselt, die von AlgorithmDES sein encrypt hatte. Ist diese Möglichkeit? Vielen Dank für jede ideas.need geben Sie helfen ~

War es hilfreich?

Lösung

UPDATE: Ich sprach Apple über diese und es ist nicht möglich MPMoviePlayerController mit einer NSURLProtocol Unterklasse zur Zeit zu verwenden


Hej,

Ich bin nicht sicher, aber es könnte möglich sein. Zur Zeit arbeite ich an etwas ähnliches, aber nicht haben es voll funktionsfähig. Was ich herausgefunden habe, ist, dass MPMoviePlayerController wirkt mit meinem benutzerdefinierten NSURLProtocol Unterklasse, aber es scheint zu sein, wichtig, die httpheaders des NSURLRequest zu berücksichtigen, da sie eine Reihe von Bytes den MPMoviePlayerController Bedürfnissen definieren.

Wenn Sie sie in Ihrer NSURLProtocol Unterklasse Dump werden Sie so etwas wie dies zweimal für den Start bekommen:

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

}

Also meine Vermutung ist, dass, solange Sie den richtigen Bereich zur Verfügung stellen können und eine mp4-Datei zurück, die durch die MPMoviePlayerController gespielt werden kann, sollte es möglich sein!

EDIT: Hier ist ein interessanter Link: Ressourcenschonung in iPhone und iPad apps

Andere Tipps

Die Lösung ist auf Proxy-Anfragen über einen lokalen HTTP-Server. Ich habe dies mit CocoaHTTPServer .

Sehen Sie sich das HTTPAsyncFileResponse Beispiel.

Es gibt eine weitere Lösung von iOS 7. Sie einen AVAssetResourceLoaderDelegate für AVAssetResourceLoader verwenden können. Aber das funktioniert nur mit AVPlayer dann.

Es ist ein Demo-Projekt von Apple namens AVARLDelegateDemo haben einen Blick auf sie, und Sie sollten das finden, was Sie brauchen. (Ich glaube, die Verknüpfung zu es keine guten Idee ist, so suchen Sie einfach nach ihm in der Developer Library auf developer.apple.com) verwenden Sie dann ein beliebiges benutzerdefinierte URL-Schema (ohne NSURLProtocol deklariert) und handelt, dass URL-Schema in der AVAssetResourceLoaderDelegate.

Wenn es ein großes Interesse, das ich ein Proof of Concept Kern liefern könnte.

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

Beachten Sie die Verwendung einer Dummy-URL Kraft AVPlayer die AVAssetResourceLoaderDelegate Methoden zu verwenden, anstatt die URL direkt zuzugreifen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top