2012-05-03 20 views
9

iOS 5.1, đây là mã:MPMoviePlayerController mang lại cho tôi một cái nhìn trống rỗng đen, không có video chơi

MPMoviePlayerController *player = 
    [[MPMoviePlayerController alloc] initWithContentURL: [NSURL URLWithString:@"map.mp4"]]; 
    [player prepareToPlay]; 
    [player.view setFrame: self.view.bounds]; // player's frame must match parent's 
    [self.view addSubview: player.view]; 
    // ... 
    [player play]; 

trên thực tế, đây chỉ là giống như các tài liệu tham khảo táo nói, nhưng khi tôi nhấp vào nút để sử dụng chức năng này, chỉ có một hình chữ nhật màu đen ở đó, không có vedio chơi, không có âm thanh xảy ra, và không có lòng, vì vậy tôi muốn biết làm thế nào để làm cho công việc này

+0

mã của tôi có hoạt động hay không? – Dinesh

Trả lời

1

Hãy thử đoạn mã dưới đây để phát video từ dự án của bạn :

NSBundle *bundle = [NSBundle mainBundle]; 
    NSString *moviePath = [bundle pathForResource:@"map" ofType:@"mp4"]; 
    NSURL *movieURL = [[NSURL fileURLWithPath:moviePath] retain]; 

    MPMoviePlayerController *player = 
    [[MPMoviePlayerController alloc] initWithContentURL:movieURL]; 
    [player prepareToPlay]; 
    [player.view setFrame: self.view.bounds]; // player's frame must match parent's 
    [self.view addSubview: player.view]; 
    // ... 
    [player play]; 

Cảm ơn ..!

+0

Chấm dứt ứng dụng do không ngoại lệ 'NSInvalidArgumentException', lý do: '*** - [NSURL initFileURLWithPath:]: tham số chuỗi nil' và Cảm ơn sự giúp đỡ của bạn, nhưng tôi đã thử loại mã này trước đây, đây là thông tin giao diện điều khiển –

+0

thêm video của bạn vào 'tài nguyên bó sao chép'. –

1

Xây dựng dựa trên câu trả lời của @ Dinesh, việc tạo URL của bạn không chính xác. Giá trị của

[NSURL URLWithString:@"map.mp4"] 

sẽ không có nil vì @ "map.mp4" không phải là URL hợp lệ. Để tạo một url hợp lệ từ gói ứng dụng, hãy làm những gì Dinesh nói. Để tạo một URL từ xa, bạn sẽ làm điều gì đó như

[NSURL URLWithString:@"http://www.jplayer.org/video/m4v/Big_Buck_Bunny_Trailer.m4v"] 

URL phải chứa tất cả các phần của nó: giao thức, máy chủ, đường dẫn, tệp.

Chúc mừng, Felipe

+0

Cảm ơn, nhưng thực sự tôi muốn sử dụng một tập tin mp4 địa phương, không phải là một dòng, [NSBundle mainBundle] có vẻ làm việc. –

+1

Tôi rất vui vì nó đã làm việc cho bạn. Xin vui lòng xem xét trao giải cho Dinesh. Nó là tốt nhất cho bạn quá kể từ khi không trao nó sẽ làm tổn thương danh tiếng của bạn. – fsaint

17

Xin lỗi vì đã trả lời rất muộn. Giải pháp là loại khủng khiếp. Nhưng nó đã giúp tôi tiếp tục trong khi đối mặt với cùng một vấn đề.

MPMovieSourceTypeStreaming là điều bạn đã bỏ lỡ.

MPMoviePlayerController *player = 
[[MPMoviePlayerController alloc] initWithContentURL: [NSURL URLWithString:@"map.mp4"]]; 
[player prepareToPlay]; 
[player.view setFrame: self.view.bounds]; // player's frame must match parent's 
player.movieSourceType = MPMovieSourceTypeStreaming; 
[self.view addSubview: player.view]; 
// ... 
[player play]; 
+0

Đây không phải là vấn đề của poster ban đầu, nhưng nó chắc chắn là của tôi! – shulmey

+0

vì vậy @shulmey, Nó có giúp ích gì không? –

+4

Vấn đề của tôi là tôi không đặt thuộc tính movieSourceType. Vì vậy, nếu nó giúp bất cứ ai. đảm bảo bạn đặt thuộc tính đó. Theo mặc định, nó phải được đặt thành MPMovieSourceTypeUnknown. Khi tôi đã đặt nó vào MPMovieSourceTypeFile. Nó làm việc cho tôi. –

0

máy nghe nhạc của bạn phải là một tài sản của bộ điều khiển tầm nhìn của bạn, một cái gì đó như thế này:

.h:

@property(nonatomic,weak)MPMoviePlayerController *moviePlayer; 

.m:

MPMoviePlayerController *player = 
    [[MPMoviePlayerController alloc] initWithContentURL: [NSURL URLWithString:@"map.mp4"]]; 
    [player prepareToPlay]; 
    [player.view setFrame: self.view.bounds]; // player's frame must match parent's 
    //set the player to your property 
    self.moviePlayer=player; 

    [self.view addSubview: self.moviePlayer.view]; 
    // ... 
    [self.moviePlayer play]; 
0

Vui lòng sử dụng MPMoviePlayerViewController Vì tệp MP4. Khi bạn sử dụng MOV sau đó làm việc hoàn hảo !!

MPMoviePlayerViewController *moviePlayerViewController; 

-(void)PlayVideoController:(NSString*)videoUrl1 { 
    NSURL *fileURL = [NSURL URLWithString:videoUrl1]; 
    moviePlayerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:fileURL]; 

    // Register for the playback finished notification. 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMovieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayerViewController.moviePlayer]; 

    //Present 
    [self presentMoviePlayerViewControllerAnimated:moviePlayerViewController]; 

    // Play the movie! 
    moviePlayerViewController.moviePlayer.movieSourceType = MPMovieSourceTypeFile; 
    [moviePlayerViewController.moviePlayer play]; 
} 

-(void)myMovieFinishedCallback:(NSNotification*)aNotification { 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayerViewController.moviePlayer]; 
    [moviePlayerViewController release], moviePlayerViewController = nil; 
} 
4

Bạn có thể gửi tin nhắn

[player play] 

quá sớm.

Sử dụng các quan sát thông báo sau

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playMovie:) name:MPMoviePlayerLoadStateDidChangeNotification object:player]; 

Để nghe cho loadstate thay đổi để có thể chơi được. Để kiểm tra bản cập nhật đó thực hiện việc này:

- (void)playMovie:(NSNotification *)notification { 
    MPMoviePlayerController *player = notification.object; 
    if (player.loadState & MPMovieLoadStatePlayable) 
    { 
     NSLog(@"Movie is Ready to Play"); 
     [player play]; 
    } 
} 

Phim sẽ bắt đầu phát khi sẵn sàng.

1

Thêm phim nghe nhạc xem điều khiển của bạn trên cửa sổ chính như:

MPMoviePlayerController *player = 
    [[MPMoviePlayerController alloc] initWithContentURL: [NSURL URLWithString:@"map.mp4"]]; 
    [player prepareToPlay]; 
    [player.view setFrame: self.view.bounds]; 

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
[appDelegate.window addSubview: player.view]; 

[player play]; 

Hope vì vậy nó sẽ làm việc!

0

Bạn có thể muốn kiểm tra url video cho các khoảng trống. Mã sau hoạt động cho tôi.

- (IBAction)btnPlayVideo:(id)sender { 

    self.strVideoUrl = [self.strVideoUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
    NSURL *fileURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@", self.strVideoUrl]]; 
    NSLog(@"Url to play = %@", self.strVideoUrl); 

     self.moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL]; 

     [[NSNotificationCenter defaultCenter] addObserver:self 
               selector:@selector(moviePlaybackComplete:) 
                name:MPMoviePlayerPlaybackDidFinishNotification 
                object:self.moviePlayerController]; 
     [self.moviePlayerController.view setFrame:self.view.bounds]; 
     [self.view addSubview:self.moviePlayerController.view]; 
     self.moviePlayerController.shouldAutoplay = YES; 
     self.moviePlayerController.fullscreen = YES; 
     self.moviePlayerController.controlStyle=NO; 
     [self.moviePlayerController prepareToPlay]; 
     self.moviePlayerController.movieSourceType = MPMovieSourceTypeStreaming; 

     [self.moviePlayerController play]; 

} 

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

    [self.moviePlayerController.view removeFromSuperview]; 
    self.closeVideAdProp.hidden = NO; 
    btnCloseAd.hidden=FALSE; 
} 
Các vấn đề liên quan