2012-08-23 26 views
8

Tôi đã tạo một dự án mới với ViewController.m sau. Khi tôi chạy ứng dụng, tôi có thể thấy một hộp có kích thước/kích thước dự kiến ​​(38, 100, 250, 163) nhưng nó có màu đen và không có video. Có một đầu ra lạ trong Xcode:Không thể phát video bằng MPMoviePlayerViewController

2012-08-23 15:36:45.559 VideoTest1[11398:c07] [MPAVController] Autoplay: Disabling autoplay for pause 
2012-08-23 15:36:45.560 VideoTest1[11398:c07] [MPAVController] Autoplay: Disabling autoplay 
2012-08-23 15:37:18.186 VideoTest1[11398:c07] [MPAVController] Autoplay: Skipping autoplay, disabled (for current item: 1, on player: 0) 

Lưu ý rằng video được chuyển đổi bằng Videora iPhone Converter và phát ok trong Xcode (vì vậy đây không phải là vấn đề về video); đường dẫn đến video là ok vì khi tôi chỉ định demo-iPhone1 (không tồn tại), tôi nhận được một ngoại lệ nil. Tôi đã thử trong Simulator và trên iPhone: luôn luôn hộp đen. Bất kỳ ý tưởng?

#import "ViewController.h" 
#import <MediaPlayer/MediaPlayer.h> 

@interface ViewController() 

@end 

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

    [moviePlayerController.view removeFromSuperview]; 
} 


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    NSString *filepath = [[NSBundle mainBundle] pathForResource:@"demo-iPhone" ofType:@"mp4"]; 
    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(38, 
                100, 
                250, 
                163)]; 
    [self.view addSubview:moviePlayerController.view]; 
    [moviePlayerController play]; 
} 

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

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
} 

@end 
+0

Bạn đã thử với bất kỳ video nào khác. Có lẽ một mp4 tải xuống vimeo? –

+0

Steve, video thực sự ổn vì nó phát trong ứng dụng khác của tôi với chính xác cùng một mã. Nhưng vẫn không thể tìm ra sự khác biệt. BTW Tôi đã thêm đầu ra Xcode. Có lẽ nó sẽ cho bạn một số ý tưởng đó là vấn đề gì. – maxgrinev

Trả lời

3

tôi giải quyết một vấn đề tương tự bằng cách thêm playercontroller.moviePlayer.movieSourceType = MPMovieSourceTypeFile;

+0

+1: điều này đã giúp tôi .... cảm ơn một tấn ... –

2

Bạn có sử dụng ARC? Nếu vậy bạn phải giữ lại MPMoviePlayerController!

Thêm phần này vào giao diện của bạn

@property (nonatomic, strong) MPMoviePlayerController *controller; 

Kiểm tra dòng cuối cùng của viewDidLoad

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    NSString *filepath = [[NSBundle mainBundle] pathForResource:@"demo-iPhone" ofType:@"mp4"]; 
    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(38, 
               100, 
               250, 
               163)]; 
    [self.view addSubview:moviePlayerController.view]; 
    [moviePlayerController play]; 
    [self setController:moviePlayerController]; 
} 
+0

+1 để giữ lại. Quá nhiều hướng dẫn cho thấy việc sử dụng các biến tạm thời. – DanneManne

13

Tôi chỉ giải quyết một vấn đề tương tự với dòng mã này. Bộ điều khiển trình phát hiện hiển thị và video phát hoàn hảo:

@property (nonatomic, strong) MPMoviePlayerController *moviePlayer; 
// 
@synthesize moviePlayer = _moviePlayer; 
// 
[self.moviePlayer prepareToPlay]; 

Sửa đổi để phù hợp với môi trường của bạn.

+2

Gọi "PrepareToPlay" trên iPad/iOS6 đã sửa lỗi này cho tôi. Không có nó, "MPMoviePlayerLoadStateDidChangeNotification" không được gửi vì người chơi không bận tâm tải trước video. – diachedelic

+1

Đã sửa lỗi cho tôi, trước khi tôi có màn hình đen trên iOS6 (trong khi vẫn hoạt động tốt trên iOS5 trở xuống). – Dado

+0

điều này cố định vấn đề của tôi là tốt, tuy nhiên, khi tải một video khác từ một splitView trong vòng 5 giây, tôi vẫn có thể nghe thấy âm thanh từ video trước đó cho đến khi 5 giây là ... bất cứ ai có vấn đề này? Tôi đang suy nghĩ về việc thêm khuôn khổ AVFoundation chỉ để tôi có thể thử và kiểm soát các phiên âm thanh? – whyoz

-2

Ngoài ra, hãy xem định dạng video. Tôi đã gặp phải lỗi này với video mẫu .m4v (mà tôi đã tải xuống từ trang web của Apple). Cuối cùng tôi đã thử nó với một video clip khác là .mp4 và nó hoạt động tốt. Nhiều lỗi vẫn xuất hiện trên bảng điều khiển của tôi.

2013-01-22 15:44:04.850 VideoTesting[4497:c07] [MPAVController] Autoplay: Likely to keep up or full buffer: 0 
2013-01-22 15:44:04.851 VideoTesting[4497:c07] [MPAVController] Autoplay: Skipping autoplay, not enough buffered to keep up. 
2013-01-22 15:44:04.853 VideoTesting[4497:c07] [MPAVController] Autoplay: Disabling autoplay for pause 
2013-01-22 15:44:04.853 VideoTesting[4497:c07] [MPAVController] Autoplay: Disabling autoplay 
2013-01-22 15:44:04.861 VideoTesting[4497:c07] [MPAVController] Autoplay: Enabling autoplay 

Tuy nhiên, video vẫn phát.

Các vấn đề liên quan