Приложение PhoneGap воспроизводит видео на фоне (скрыто) - PullRequest
0 голосов
/ 04 января 2012

У меня проблема с воспроизведением видео с помощью веб-приложения и разрыва телефона. В моем веб-приложении есть ссылка, которая напрямую связана с файлом mp4. Я добавил обработчик для этого типа URL в классе AppDelegate PhoneGap.

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest: 
(NSURLRequest *)request navigationType: 
(UIWebViewNavigationType)navigationType 
{ 
    NSURL *url = [request URL]; 
    NSLog(@"redirect detected");
    if ([[[url path] pathExtension] isEqualToString:@"mp4" ] || [[[url path] pathExtension] isEqualToString:@"m4v" ] || [[[url path] pathExtension] isEqualToString:@"m3u8" ]) { 
        //video files are .mp4 or m4v, stream indexes are m3u8 
        //it's a movie, go play! 
        NSLog(@"Movie detected - playing");
        NSLog([url path]);
        [self playMovieAtURL:url]; 
        return NO; 
    } else { 
        return [ super webView:theWebView shouldStartLoadWithRequest:request 
                navigationType:navigationType ]; 
    } 
}

Это работает нормально, и вызывается метод воспроизведения фильма. Метод реализован так (1):

-(void) playMovieAtURL: (NSURL*) theURL {
    NSLog(@"PlayMovieAtUrl");
    MPMoviePlayerController* theMovie =
    [[MPMoviePlayerController alloc] initWithContentURL: theURL];
    [self presentMoviePlayerViewControllerAnimated:theMovie];
}

также пробовал это (2):

-(void) playMovieAtURL: (NSURL*) theURL {
    NSLog(@"PlayMovieAtUrl");
    MPMoviePlayerController* theMovie =
    [[MPMoviePlayerController alloc] initWithContentURL: theURL];

    [theMovie setControlStyle:MPMovieControlStyleFullscreen];
    [theMovie setFullscreen:YES];


    // Register for the playback finished notification
    [[NSNotificationCenter defaultCenter]
     addObserver: self
     selector: @selector(myMovieFinishedCallback:)
     name: MPMoviePlayerPlaybackDidFinishNotification
     object: theMovie];
    NSLog(@"About to play");
    // Movie playback is asynchronous, so this method returns immediately.
    [theMovie play];
}

Но в обоих случаях игрок создан, и он играет. Единственная проблема в том, что это скрыто. Звук слышен, но нет изображения. Веб-просмотр по-прежнему отображается. (1) должен работать без какой-либо настройки, основанной на сообщениях в другом месте. Проблема (я думаю) в том, что он вызывается в классе AppDelegate, а не в классе Controller. Но я понятия не имею, как реализовать это с помощью телефонной пробки :( Есть идеи?

1 Ответ

0 голосов
/ 04 января 2012

Мне удалось это исправить.Проблема заключалась в том, что я не смог получить доступ к ViewController из WebView.Но я нашел https://gist.github.com/527494, где автор использует модальное окно с пробелом в телефоне.Когда у меня был ViewController - это было легко:)

MPMoviePlayerViewController* theMovie =
    [[MPMoviePlayerViewController alloc] initWithContentURL: theURL];
    [super.viewController presentMoviePlayerViewControllerAnimated:theMovie];

Надеюсь, это кому-нибудь поможет.Я потратил на это целый день;)

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