проблема с использованием MPMovieController в iPhone SDK 4.0 - PullRequest
3 голосов
/ 04 июля 2010

Я использовал MPMoviePlayer для воспроизведения короткого видео в моем приложении без проблем в SDK 3.1.3.Я внес изменения в код в SDK 4, но видео не воспроизводится.У меня просто черный экран и звук.В Центре разработчиков Apple отсутствует пример кода для этого класса для последней версии SDK.Ниже приведен код, который я использую:

- (void)viewDidLoad {

    [super viewDidLoad];

        //videoPlayer is a MPMoviePlayerController object defined in the header file of the view controller

    if (videoPlayer == nil){
        NSString * videoPath = [[NSBundle mainBundle] pathForResource:@"myvideo" ofType:@"mp4"];
        if (videoPath == NULL){
            return; 
        }
        NSURL * videoURL = [NSURL fileURLWithPath:videoPath];

        videoPlayer = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];
        videoPlayer.controlStyle = MPMovieControlStyleNone;
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackFinished:) name:@"MPMoviePlayerPlaybackDidFinishNotification" object:movieController.moviePlayer];

        [videoPlayer play];
        [videoPlayer setFullscreen:YES];
        [self.view addSubview:videoPlayer.view];


    }

}

Выше приведено только воспроизведение звука с черным экраном.Уведомление вызывается правильно в конце воспроизведения.

Когда вышеописанное не сработало, я даже попытался использовать новый класс MPMoviePlayerViewController следующим образом:

- (void)viewDidLoad {

    [super viewDidLoad];
    NSString * videoPath = [[NSBundle mainBundle] pathForResource:@"myvideo" ofType:@"mp4"];

    if (videoPath == NULL){
        return; 
    }
    NSURL * videoURL = [NSURL fileURLWithPath:videoPath];

        //movieController is an MPMoviePlayerViewController object defined in the header file of view controller

    movieController = [[MPMoviePlayerViewController alloc] initWithContentURL:videoURL];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackFinished:) name:@"MPMoviePlayerPlaybackDidFinishNotification" object:movieController.moviePlayer];

    [movieController.moviePlayer setFullscreen:YES];
    [movieController.moviePlayer play];
    [self presentMoviePlayerViewControllerAnimated:movieController];
}

Та же проблема сохраняется -Я слышу звук и уведомление в конце воспроизведения вызывается, как и ожидалось.Однако вместо видео я вижу только черный экран.

В кодировании видео нет ничего плохого, поскольку одно и то же видео отлично воспроизводится как в iTunes, так и на моем iPod Touch в обычном списке воспроизведения видео.

Может ли кто-нибудь помочь мне с этой проблемой?

Заранее спасибо

1 Ответ

3 голосов
/ 04 июля 2010

проблема решена - для тех, кто застрял в аналогичной проблеме, решение состоит в том, чтобы явно создать рамку для представления MPMoviePlayerController следующим образом:

Я изменил строки:

[videoPlayer play];

[videoPlayer setFullscreen:YES];

[self.view addSubview:videoPlayer.view];

до следующего:

[videoPlayer prepareToPlay];

[videoPlayer play];

[self.view addSubview:videoPlayer.view];

videoPlayer.view.frame = CGRectMake(0.0, 0.0, 480.0, 320.0); //this is explicitly added and solves the problem
...