尝试播放(使用MPMoviePlayerViewController)我下载并存储在文件中的视频/歌曲时出现问题

时间:2011-01-04 10:46:16

标签: iphone ios video mpmovieplayercontroller

这是我的问题。

我有一个MPMoviePlayerViewController可以播放网络上的一些视频。那部分有效。

但为了以后播放它们,没有互联网连接,我将它们存储在手机上,并附上那段代码

    NSData * data = [NSData dataWithContentsOfURL:[self dataURL]];

    NSArray * documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString * baseDocumentPath = ([documentPaths count] > 0) ? [documentPaths objectAtIndex:0] : nil;

    [data writeToFile:[baseDocumentPath stringByAppendingPathComponent:_itemId] 
       atomically:YES];

那部分没问题,如果我从手机上拿走它们,我可以播放iMac上的文件。

但在那之后我做了

    NSArray * documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString * baseDocumentPath = ([documentPaths count] > 0) ? [documentPaths objectAtIndex:0] : nil;
    videoController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL fileURLWithPath:[baseDocumentPath stringByAppendingPathComponent:file.itemId]]];

模态viewController中只有一个灰色的窗口。我没有得到玩家的通知。

有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分:3)

我今天遇到了同样的问题。

似乎iOS不会加载任何文件扩展名错误的媒体文件。恕我直言这是非常愚蠢的行为,因为我正在使用随机名称(UUID)存储我的媒体文件。

快速解决方法是使用以下代码为原始文件创建符号链接并为其指定正确的扩展名。现在iOS将很乐意加载该文件。

// Create a symlink for iOS as it won't load any files with the wrong extension
NSString *fixedFileName = [fileName stringByAppendingString:@".mp4"];
[[NSFileManager defaultManager] createSymbolicLinkAtPath:fixedFileName 
                                     withDestinationPath:fileName error:NULL];

希望有所帮助。如果符号链接已经存在,我们就会忽略发生错误的事实。

答案 1 :(得分:1)

有人发现导致问题的原因。

文件名没有扩展名(如.mp4),因此MPMovieController不会尝试读取它(这听起来很疯狂-_-)。如果我手动将.mp4添加到我的视频文件中。应用程序可以读取它......我要将每个文件的扩展名附加到其名称上。

非常感谢:)