MPMoviePlayerViewController播放NSData(MP4)

NSString *p = [app getFilePathFor:name]; // Printing description of p: // /Users/Jackson/Library/Application Support/iPhone Simulator/5.0/Applications/7FE97EDD-D080-4E5E-8EDD-3D9FFA8F6CF5/Documents/6681a4d7-8630-4a12-90c6-f95d72650a42 NSData *data = [NSData dataWithContentsOfFile:p]; // Printing description of data: // <01401dc2 a15ebc27 e473ee79 316568ff 19dc7000 df3f7c5c dc206870 01a1c00e 00010000 00000000 00e10288 00000003 01060020 08c80038 00080000 88edffbf 02000119 0000050e 00000000 00000000 02000007 0000050f 00000000 00000000> NSString *str = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; // Printing description of str: // @¡^¼'äsîy1ehÿÜp path = [NSURL fileURLWithPath:str]; // Printing description of path: // %01@%1D%C3%82%C2%A1%5E%C2%BC'%C3%A4s%C3%AEy1eh%C3%BF%19%C3%9Cp%00%C3%9F%3F%7C%5C%C3%9C%20hp%01%C2%A1%C3%80%0E%00%01%00%00%00%00%00%00%00%C3%A1%02%C2%88%00%00%00%03%01%06%00%20%08%C3%88%008%00%08%00%00%C2%88%C3%AD%C3%BF%C2%BF%02%00%01%19%00%00%05%0E%00%00%00%00%00%00%00%00%02%00%00%07%00%00%05%0F%00%00%00%00%00%00%00%00 -- file://localhost/ 

然后我发送path到MPMoviePlayerViewController像这样:

 MPMoviePlayerViewController * playerController = [[MPMoviePlayerViewController alloc] initWithContentURL:path]; [self presentMoviePlayerViewControllerAnimated:(MPMoviePlayerViewController *)playerController]; playerController.moviePlayer.movieSourceType = MPMovieSourceTypeFile; [playerController.moviePlayer play]; playerController=nil; 

此时,电影播放器​​显示,然后立即隐藏“显示”animation完成。 在日志中我得到这个:

 An instance 0x87ca7b0 of class AVPlayerItem was deallocated while key value observers were still registered with it. Observation info was leaked, and may even become mistakenly attached to some other object. Set a breakpoint on NSKVODeallocateBreak to stop here in the debugger. Here's the current observation info: <NSKeyValueObservationInfo 0x87dfc30> ( <NSKeyValueObservance 0x933c280: Observer: 0x93367d0, Key path: nonForcedSubtitleDisplayEnabled, Options: <New: YES, Old: NO, Prior: NO> Context: 0x0, Property: 0x933c630> <NSKeyValueObservance 0x933c360: Observer: 0x93356b0, Key path: presentationSize, Options: <New: NO, Old: NO, Prior: NO> Context: 0x0, Property: 0x87b53b0> 

我不知道下一步去哪.. 帮助?

**编辑**

我想玩的MP4来自这个buckbunnytesting剪辑 。 当我直接加载它的工作URL的forms。 但是,如果我下载并通过NSData保存并尝试重新打开NSData这不再起作用。

**编辑2 **

@Till:“你正在初始化一个string是一个乱码的URL; // str=@"@¡^¼'äsîy1ehÿÜp" path = [NSURL fileURLWithPath:str];你在这里期待什么?

所以现在我已经尝试过了:

 path = [NSURL fileURLWithPath:[app getFilePathFor:name]]; // Printing description of path: // file://localhost/Users/Jackson/Library/Application%20Support/iPhone%20Simulator/5.0/Applications/CB1CA8D0-B5EC-4B5F-8C7F-0EF449508BA7/Documents/9d425856-14b0-4ad3-835a-970affacb05f 

我仍然得到相同的错误。

为什么你从保存的剪辑文件转换为nsdata?

你只需要在app文档目录中加载剪辑的path即可。

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *filePath = [documentsDirectory stringByAppendingPathComponent:name]; NSURL *fileURL = [NSURL fileURLWithPath:filePath isDirectory:NO]; yourMoviePlayer = [[MPMoviePlayerController alloc] initWithContentURL: fileURL]; 

我想这是因为你在播放时将它设置nil 。 实际上,它看起来发生得太快了, MPMoviePlayerViewController仍然在加载材质时将其设置nil