0

Xcodeプロジェクトでビデオを再生するために作成したコードは次のとおりです。プロジェクトを実行すると、クラッシュします。私はこの理由を取得します:キャッチされなかった例外のためにアプリを終了します'NSInvalidArgumentException'、理由:' * -[NSURL initFileURLWithPath:]:nil string parameter'

シミュレーターで実行すると機能するチュートリアルを見つけました。私は自分のビデオをプロジェクトに追加し、それに応じてコードを更新しました。私のビデオは、チュートリアルの他のビデオと同じようにm4v形式です。ビデオを使用してアプリを実行しても、クラッシュして同じエラーが発生します。私は自分のビデオを短時間から取り出してiTunesにエクスポートしました。私は何が間違っているのですか?

.hファイル

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

@interface BigBuckBunnyViewController : UIViewController {

}

-(IBAction)playMovie:(id)sender;

@end

.mファイル

#import "BigBuckBunnyViewController.h"

@implementation BigBuckBunnyViewController

-(IBAction)playMovie:(id)sender
{
UIButton *playButton = (UIButton *) sender; 

NSString *filepath   =   [[NSBundle mainBundle] pathForResource:@"ladder rack 1 4"  
ofType:@"m4v"];
NSURL    *fileURL    =   [NSURL fileURLWithPath:filepath];
MPMoviePlayerController *moviePlayerController = [[MPMoviePlayerController alloc] 
initWithContentURL:fileURL];

[[NSNotificationCenter defaultCenter] addObserver:self

selector:@selector(moviePlaybackComplete:)

name:MPMoviePlayerPlaybackDidFinishNotification

object:moviePlayerController];

[moviePlayerController.view setFrame:CGRectMake(playButton.frame.origin.x, 

playButton.frame.origin.y, 

playButton.frame.size.width, 

playButton.frame.size.height)];

[self.view addSubview:moviePlayerController.view];
//moviePlayerController.fullscreen = YES;

//moviePlayerController.scalingMode = MPMovieScalingModeFill;

[moviePlayerController play];
}

- (void)moviePlaybackComplete:(NSNotification *)notification
{
MPMoviePlayerController *moviePlayerController = [notification object];
[[NSNotificationCenter defaultCenter] removeObserver:self

name:MPMoviePlayerPlaybackDidFinishNotification

object:moviePlayerController];

[moviePlayerController.view removeFromSuperview];
[moviePlayerController release];
}

- (void)dealloc {
[super dealloc];
}

@end

さて、htmlページを作成し、ビューのロードセクションでhtmlページを自分の.mファイルにリンクすることができました。UIWebviewを作成し、それをxibビューに追加しました。ビデオをサーバーに配置しました。これはおそらくより良い解決策であり、ロード時間が短くなります。

4

2 に答える 2

0

これはうまくいきます

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

@interface TipsViewController : UIViewController {

  MPMoviePlayerViewController *playerController;
}

-(IBAction)playVideo;

@end

.m ファイル

 - (IBAction)playVideo{

 NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"tcniche"  
    ofType:@"mp4"]];

 if(url != nil){

           playerController = [[MPMoviePlayerViewController alloc] 
    initWithContentURL:url];
           [self presentMoviePlayerViewControllerAnimated:playerController];

           playerController.moviePlayer.movieSourceType = MPMovieSourceTypeFile;

          [playerController.moviePlayer play]; 
 }
 else{

      NSLog(@"URL not found");

    }

 }

URL が null の場合は、ファイルとパスを確認してください。

:メモリ管理は自分のものにしてください:)

于 2012-09-24T06:08:38.800 に答える
0

NSString *filepath = [[NSBundle mainBundle] pathForResource:@"ladder rack 1 4" ofType:@"m4v"];にスペースが含まれているため、nil になります。したがって、次のように変更する必要があります。

NSURL   *fileURL    =   [NSURL fileURLWithPath:filepath] absoluteString];

このリンクを参照してください

于 2012-09-26T19:10:19.247 に答える