MPMoviePlayerController - невозможно воспроизвести фильмы в моем приложении на <3GS (3GS в порядке) - PullRequest
3 голосов
/ 02 февраля 2010

В моем приложении у меня играет несколько фильмов. Я проверил информацию о фильмах, и они оказались в пределах того, что MPMoviePlayerController должно уметь обрабатывать (битрейт и т. Д.)

Они транслируются с URL, и он будет воспроизводиться только на 3GS , ничего ниже. Я попытался собрать ошибку из уведомлений в MPMoviePlayerController для MPMoviePlayerContentPreloadDidFinishNotification и MPMoviePlayerPlaybackDidFinishNotification, но я получаю бесполезную строку ошибки для ключа userInfo в уведомлении, которая не говорит мне ничего, кроме факта что фильм не может быть воспроизведен.

URL-адрес, с которым я тестирую: http://movies.apple.com/movies/independent/lawabidingcitizen/lawabidingcitizen_h.480.mov

На iPhone 3G или 2G iPhone появляется MPMoviePlayerController, который на короткое время пытается загрузить фильм, но затем возвращается к контроллеру представления, откуда он пришел.

Кто-нибудь знает, почему я не могу транслировать и воспроизводить вышеуказанный URL-адрес только на 3GS? Я уверен, что это проблема с памятью, но я попробовал 2G iPhone с 50 МБ свободной памяти, и он все еще не работает.

Я использую фрагмент кода из собственного примера приложения Apple для потоковой передачи фильмов для запуска фильма:

MPMoviePlayerController *mp = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:@"http://movies.apple.com/movies/independent/lawabidingcitizen/lawabidingcitizen_h.480.mov"];
if (mp) {
    self.moviePlayer = mp;
    [mp release];
    [self.moviePlayer play];
}

Спасибо

1 Ответ

1 голос
/ 22 сентября 2010

Я думаю, что часть релиза доставляет вам неприятности, я использую этот код и отлично работает:

moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:fileURL];

    //// //// //// //// //// //// //// //// //// //// //// //// //// //// //// //// /
    // ONLY FOR IOS 3.2 or later
    if ( kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iPhoneOS_3_2 ) {

        // May help to reduce latency
        [moviePlayer prepareToPlay];

        /// //// //// //// //// //// //// //// //// //// //// //// //// //// /
        // Set the correct frame for Movie Controller.
        moviePlayer.view.frame = self.view.frame;

        /// //// //// //// //// //// //// //// //// //// //// //// //// //// /
        // Autorezing the view, allows him to adjust with the orientation.
        moviePlayer.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
        moviePlayer.view.autoresizesSubviews = YES;

        /// //// //// //// //// //// //// //// //// //// //// //// //// //// /
        // Add to screen.
        [self.view addSubview:moviePlayer.view];
    } 

    //// //// //// ///// //// //// ///// //// //// ///// //// //// ///// //// //// /
    // Older than 3.2
    else {
        // Play Movie.
        [moviePlayer play];

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

Этот код подготовлен для всех iOS. Если вы поддерживаете только <3.2, используйте правильную часть. </p>

Вы должны реализовать метод moviePlayBackDidFinish: для получения уведомления о завершении воспроизведения фильма, как указано ниже:

//// //// //// ///// //// //// ///// //// //// ///// //// //// ///// //// //// /
// Notification called when the movie finished playing. This Call is only for iOS 3.2
- (void) moviePlayBackDidFinish:(NSNotification*)notification {
    // Unregister. 
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:MPMoviePlayerPlaybackDidFinishNotification
                                                  object:nil];

    // Your finish code here.
}

Вы должны объявить moviePlayer в вашем UIViewController @interface и dealloc в вашем dealloc: методе.

...