MPMoviePlayerController не удалось потоковое видео .3gp начиная с iOS 4.3 - PullRequest
2 голосов
/ 06 апреля 2011

У меня есть универсальное приложение для iPhone / iPad, которое транслировало видео с помощью MPMoviePlayerController через Wi-Fi (mp4) и сеть 3G (3gp). Когда вышла iOS 4.3, наши устройства 4.3 больше не могли воспроизводить видео 3gp по сети 3G. Я протестировал локальный файл 3gp, и он тоже не работает, но работает на телефоне 3G с 4.2.x.

После отладки контроллера представления я вижу, что уведомление MPMoviePlayerLoadStateDidChangeNotification не запускается при попытке воспроизведения файла 3gp локально или потоковой передачи по URL-адресу.

[APPDEL showStatusView:  @"Please wait..."];

    NSString * videoUrl = [[request.URL description] stringByReplacingOccurrencesOfString: @"idvideo:" withString: @"http:"];
    DLog(@"Loading video %@", videoUrl);
    _moviePlayer = [[IDMoviePlayerController alloc] initWithContentURL: [NSURL URLWithString: videoUrl]];
    _moviePlayer.view.backgroundColor = [UIColor clearColor];
    _moviePlayer.allowsAirPlay = YES;

    _moviePlayer.scalingMode = MPMovieScalingModeAspectFit;

    if ([_moviePlayer respondsToSelector:@selector(loadState)]) {
        // May help to reduce latency
        [_moviePlayer prepareToPlay];

        // Register that the load state changed (movie is ready)
        [[NSNotificationCenter defaultCenter] addObserver:self 
                                                                                         selector:@selector(moviePlayerLoadStateChanged:) 
                                                                                                 name:MPMoviePlayerLoadStateDidChangeNotification 
                                                                                             object:_moviePlayer];

        [[NSNotificationCenter defaultCenter] addObserver:self 
                                                 selector:@selector(moviePlayerPreloadDidFinish:) 
                                                     name:MPMoviePlayerContentPreloadDidFinishNotification
                                                   object:_moviePlayer];


        //[NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(moviePlayerTimerUp:) userInfo:nil repeats:NO];
    }  
    else {
        // Register to receive a notification when the movie is in memory and ready to play.
        [[NSNotificationCenter defaultCenter] addObserver:self 
                                                                                         selector:@selector(moviePreloadDidFinish:) 
                                                                                                 name:MPMoviePlayerLoadStateDidChangeNotification 
                                                                                             object:nil];
    }       

    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(onMovieDone:) name: MPMoviePlayerPlaybackDidFinishNotification object: nil];

    if ([_moviePlayer respondsToSelector: @selector(view)]) {
        [self.view addSubview: _moviePlayer.view];

        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
            _moviePlayer.controlStyle = MPMovieControlStyleEmbedded;
        }
        else {
            _moviePlayer.controlStyle = MPMovieControlStyleFullscreen;
        }

        _moviePlayer.view.frame = _webView.frame;
    }

    [_moviePlayer play];

Первое условие для loadState всегда выполняется. Для файла 3gp код никогда не достигнет метода селектора moviePlayerLoadStateChanged, который скрывает отображение индикатора / статуса и создает другие полноэкранные уведомления / уведомления об ориентации. Индикатор / статус просмотра просто будет работать и вращаться. В отладчике я вижу, что метод селектора onMovieDone запускается гораздо раньше, чем видео действительно закончено.

Confused.

1 Ответ

0 голосов
/ 26 октября 2012

Это мой ответ относительно воспроизведения .3gp файла с iPhone ..... Я успешно проиграл .3gp файл с iphone sdk с использованием MpMoviePlayerController и моя ссылка для ответа:

Ссылка: https://stackoverflow.com/a/13088808/1092219

надеюсь, вы получите помощь от моего ответа ......... !! :))))))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...