视频播放失败 - [NSURL initFileURLWithPath:]:nil字符串参数

时间:2013-01-06 02:28:20

标签: iphone ios video ios6

我很难理解为什么这不起作用:/每次我运行项目时,应用程序崩溃都会给我一个'NSInvalidArgumentException',原因是:' * - [NSURL initFileURLWithPath:]: nil字符串参数'

我已经按照教程(我对此很新)并且它对他起作用并且代码完全相同..任何人都可以解释最新情况吗?

.h文件

#import <UIKit/UIKit.h>
#import <MediaPlayer/MediaPlayer.h>
#import <QuartzCore/QuartzCore.h>

@interface FirstViewController : UIViewController {   
    MPMoviePlayerViewController *playerController;
}
-(IBAction)playVideo;
@end

.m文件

#import "FirstViewController.h"

@interface FirstViewController ()

@end

@implementation FirstViewController

{
    MPMoviePlayerController *mpc;

}



- (IBAction)playButton:(id)sender {

    NSString *stringPath = [[NSBundle mainBundle]pathForResource:@"intro" ofType:@"MP4"];
    NSURL *url = [NSURL fileURLWithPath:stringPath];

    if(url != nil){

    mpc = [[MPMoviePlayerController alloc]initWithContentURL:url];

    [mpc setMovieSourceType:MPMovieSourceTypeFile];

    [[self view]addSubview:mpc.view];

    [mpc setFullscreen:YES];

    [mpc play];

    }
    else{
        NSLog(@"URL not found");

    }
}
@end

6 个答案:

答案 0 :(得分:34)

所有这一切中唯一重要的部分是:

NSString *stringPath = [[NSBundle mainBundle] pathForResource:@"intro" ofType:@"MP4"];
NSURL *url = [NSURL fileURLWithPath:stringPath];

我假设在第二行内引发异常。这意味着stringPath为零,如果文件intro.MP4实际上不在您的应用包中,则会发生这种情况。

检查:

  • 该文件存在于您的源代码副本

  • 您的Xcode项目有对该文件的引用 (如果它是红色,则表示该文件实际上并不存在)

  • 在Xcode的目标中,查看&#34; Build Phases&#34;并揭示&#34;复制捆绑资源&#34;建设阶段。该文件应该存在。如果不是,请按+按钮并选择它。

答案 1 :(得分:6)

Kurt的回答特别适用于我

“在Xcode的目标中,查看”Build Phases“并显示”Copy Bundle Resources“构建阶段。该文件应该存在。如果不存在,请按+按钮并选择它。”

我的电影文件丢失了。它一定是在那之前因为它正在工作然后它就停止了。

我会对库尔特的帖子发表评论,但不知道怎么做。我做了“投票”。

答案 2 :(得分:0)

除了本回答https://stackoverflow.com/a/14179186/3213411中提到的内容之外,您还需要确保您引用的文件具有构建目标的成员资格。您可以在文件检查器中指定它。这个答案解释了https://stackoverflow.com/a/5300901/3213411

的方式

答案 3 :(得分:0)

您的视频太长了。使用此代码,限制为30秒。你最好的选择是从网址流式传输它。尝试播放短于30秒的视频,它会正常工作。

答案 4 :(得分:0)

iOS 9.2,Xcode 7.2,启用了ARC

我最近自己遇到过这个问题。绝对做原始贡献者的建议。对我来说,这是问题的文件的实际名称,见下文......

NSString *pathForPuzzlePieceHitSound = [[NSBundle mainBundle] pathForResource:@"puzzle_piece_hit" ofType:@"m4a"];
NSURL *urlForPuzzlePieceHitSound = [NSURL fileURLWithPath:pathForPuzzlePieceHitSound];

AudioServicesCreateSystemSoundID((__bridge CFURLRef)urlForPuzzlePieceHitSound, &idForPuzzlePieceHitSound);

文件名:

@"puzzle_piece_hit"

其中的字符对于使用此特定方法进行文件命名是非法的。我想你可以对它进行处理并解决问题,但重命名文件会更容易。

我改名为:

@"puzzlePieceHit"

一切都运转良好。

希望这有助于某人!欢呼声。

答案 5 :(得分:0)

确保将要播放的音频文件添加到“副本捆绑资源”中。

  1. 单击Xco​​de项目图标(左侧项目导航器中的第一个)
  2. 点击目标
  3. 点击构建阶段
  4. 转到复制捆绑包资源
  5. 检查列表中是否有您的音频文件。
  6. 如果未添加,请点击 + 图标
  7. 添加它们
  8. 构建并运行