iPhone - Воспроизвести видео на 3.0 и 4.0 OS / SDK? - PullRequest
5 голосов
/ 21 апреля 2010

Начиная с 3.2 iPhone OS SDK, воспроизведение видео действительно отличается.

Поэтому мне было интересно, есть ли способ воспроизвести видео в полноэкранном режиме с совместимым кодом (как <, так и> 3.2) без написания кода для двух случаев.

Я думаю, что нам придется написать 2 версии наших классов для обработки видео ...

Твой!

Ответы [ 3 ]

2 голосов
/ 28 июля 2010

Я делаю в основном то, что Джефф Келли выше предлагает запустить на 3.1 и выше, обратите внимание на вызов instancesRespondToSelector:

// Initialize a movie player object with the specified URL
MPMoviePlayerController *mp = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
if (mp)
{

    // Register to receive a notification when the movie has finished playing. 
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(moviePlayBackDidFinish:) 
                                                 name:MPMoviePlayerPlaybackDidFinishNotification 
                                               object:nil];


    //Will only run this code for >= OS 3.2 
    if ([MPMoviePlayerController instancesRespondToSelector:@selector(setFullscreen:animated:)]){   

        [[NSNotificationCenter defaultCenter] addObserver:self 
                                                 selector:@selector(moviePlayBackStateDidChange:) 
                                                     name:MPMoviePlayerPlaybackStateDidChangeNotification 
                                                   object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self 
                                                 selector:@selector(nowPlayingMovieDidChange:) 
                                                     name:MPMoviePlayerNowPlayingMovieDidChangeNotification 
                                                   object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self 
                                                 selector:@selector(moviePlayBackDidFinish:) 
                                                     name:MPMoviePlayerDidExitFullscreenNotification 
                                                   object:nil];

        mp.controlStyle = MPMovieControlStyleFullscreen;


        [mp setScalingMode:MPMovieScalingModeAspectFit];

                    //change mainMenu here to whatever your parent view is
        [mp.view setFrame:mainMenu.frame];
        [self.view addSubview:mp.view];



        [mp setFullscreen:YES animated:NO];
    }
//continue as normal

и затем в функции moviePlayBackDidFinish я использую ту же технику для удаления уведомлений.

0 голосов
/ 27 июля 2010

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

Чтобы написать сам вспомогательный метод, вам нужно проверить, доступен ли MPMoviePlayerViewController. Если так, используйте это, и затем представьте тот полный экран. В противном случае просто используйте обычный MPMoviePlayerController.

Таким образом, базовая структура будет:

-(void)playMovie:(NSURL *)movieURL
{
    Class mpVC = NCClassFromString("MPMoviePlayerViewController");
    if(mpVC)
    {
        // Generate MPPlayerViewController here and use accordingly
    }
    else
    {
        // Generate MPPlayerController here and use accordingly
    }
}
0 голосов
/ 21 апреля 2010

Возможно, вам придется использовать блоки # if / # else / # endif и скомпилировать универсальный двоичный файл, который имеет подходящий исполняемый файл для определенного уровня O / S.

...