2012-04-29 52 views
0
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: 
// %[email protected]%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/ 

然后我送路径MPMoviePlayerViewController像这样:MPMoviePlayerViewController发挥

MPMoviePlayerViewController * playerController = [[MPMoviePlayerViewController alloc] initWithContentURL:path]; 

[self presentMoviePlayerViewControllerAnimated:(MPMoviePlayerViewController *)playerController]; 

playerController.moviePlayer.movieSourceType = MPMovieSourceTypeFile; 
[playerController.moviePlayer play]; 
playerController=nil; 

在这一点上,电影播放器​​显示,然后立即揣曾经的“秀”动画完成。在日志中我得到这个:

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> 

我不知道下一步该去哪里.. 有帮助吗?

**编辑**

我想打从this buckbunny test clip来的MP4。当我直接在表单中加载剪辑时,它的作用就是URL。但是,如果我下载并通过NSData保存并尝试重新打开NSData,则不再有效。

**编辑2 **

@Till: “你是用初始化字符串是garbledegock一个URL; // [email protected]"@¡^¼'ä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 

我仍然得到完全相同的错误。

+0

您正在初始化一个带有garbledegock字符串的URL; //'str = @“@¼'äsîy1ehÿÜp”' 'path = [NSURL fileURLWithPath:str];' 你在这里期待什么? – Till

+0

@Till我添加了'EDIT 2'针对您的评论,我仍然卡住了。 – Jacksonkr

+0

您是否尝试删除您释放玩家指针的代码? playerController = nil; ? – Lefteris

回答

4

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

您应该只将剪辑的路径加载到应用程序文档目录中。

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]; 
+0

我终于得到了一个有效的文件名,但是我仍然得到这个相同的错误。它可能与我存储的方式有关吗? – Jacksonkr

+0

这是我做的存储它。 5MB文件仅作为1KB片中的一个存储,因为我做错了。什么是我说得对,你的加载方法工作正常。 – Jacksonkr

0

我认为这是因为您在播放时将其设置为nil。实际上,它看起来发生得很快,因此MPMoviePlayerViewController仍然在加载材料时将其设置为nil