PhoneGap 应用在后台播放视频(隐藏)

Posted

技术标签:

【中文标题】PhoneGap 应用在后台播放视频(隐藏)【英文标题】:PhoneGap app plays video on background (hidden) 【发布时间】:2012-01-04 12:57:34 【问题描述】:

我在使用网络应用程序和 phonegap 播放视频时遇到问题。我的网络应用程序中有一个链接直接链接到 mp4 文件。我在 phonegap 的 AppDelegate 类中为这种类型的 URL 添加了一个处理程序。

- (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 ]; 
     

这很好,并且调用了电影播放的方法。方法是这样实现的(一):

-(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];

但在这两种情况下,播放器都是创建并播放的。唯一的问题是,它是隐藏的。可以听到声音,但没有图像。 webView 仍然显示。 (1)应该根据其他地方的帖子在没有任何设置的情况下工作。问题(我猜)是,它是在 AppDelegate 类中调用的,而不是在 Controller 类中。但我不知道如何使用 phonegap 实现这一点 :( 有什么想法吗?

【问题讨论】:

如果您需要更多信息,请告诉我 【参考方案1】:

我设法解决了这个问题。问题是,我无法访问 WebView 的 ViewController。但我发现https://gist.github.com/527494 作者使用带有phonegap 的模态窗口。当我拥有 ViewController 时 - 这很容易 :)

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

我希望对某人有所帮助。我花了一整天的时间来解决它;)

【讨论】:

以上是关于PhoneGap 应用在后台播放视频(隐藏)的主要内容,如果未能解决你的问题,请参考以下文章

播放后退出视频问题(ios phonegap 应用程序)

如何防止我的 Phonegap 应用在 ios 上全屏播放视频?

在 iOs 和 Android 的 PhoneGap/Cordova-app 中播放视频

在 PhoneGap 中自动播放视频

PhoneGap iOS 无法使用 HTML 5 播放视频

Phonegap html5视频不播放