如何在ipad上使用控件在外部显示器上输出视频?

时间:2011-01-06 23:58:07

标签: ipad mpmovieplayer vga

目前,当从iPad输出视频到外部显示器时,它会将控件和所有控件移动到外部显示器。这没有用,因为当控件位于外部显示器上时无法控制电影。以下是我们的应用程序中的一些代码段。

这是屏幕设置代码:(一种名为setupExternalScreen的方法)

if ([[UIScreen screens] count] > 1) {
    external_disp = [[UIScreen screens] objectAtIndex:1];
    [external_disp setCurrentMode:[[external_disp availableModes] objectAtIndex:0]];
    self.external_window = [[UIWindow alloc] init];
    external_window.screen = external_disp;
    [external_window makeKeyAndVisible];
}

这是MPMoviePlayerViewController的创建:

[self setupExternalScreen]; //Calls the code above
MPMoviePlayerViewController *mpv = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
[self presentMoviePlayerViewControllerAnimated:mpv];

我也有一个MPMoviePlayerController并尝试了这个:

self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerDidFinish:) name:MPMoviePlayerDidExitFullscreenNotification object:[self moviePlayer]];
[self.view addSubview:moviePlayer.view];

if (!external_window) {
    [self setupExternalScreen];
}
if (external_window) {
    [external_window addSubview:moviePlayer.view];
} 
[moviePlayer setControlStyle:MPMovieControlStyleDefault];

[moviePlayer setFullscreen:YES];// animated:NO];

if (![moviePlayer isPreparedToPlay]) [moviePlayer prepareToPlay];
[moviePlayer play];

目前在第二个实现中,添加了self.view和external_window,它将在外部显示器上显示视频(带控件),iPad屏幕看起来除了状态栏在电影中消失时没有发生任何事情控制淡出。我还尝试将moviePlayer.view添加到self.view中,它会闪现一些“显示电视上的内容”信息,然后再继续在iPad上播放电影。目前,按下按钮即可启动视频。使用模拟器和TV Out选项,因为它更容易调试。 Xcode版本3.2.5和实际设备上的最新版iOS。怎么解决这个问题?它应该像iPad上的YouTube应用程序一样。

1 个答案:

答案 0 :(得分:2)

使用UIWebView可以轻松实现此目的。它将自动检测外部监视器,并在那里显示视频,同时保持设备上的标准播放控制。

以下是一些示例代码:

- (void)embedInternalVideo:(CGRect)frame {
    NSBundle *bundle = [NSBundle mainBundle];
    NSString* html = @"<video src=\"sample_iPod.m4v\" width=640 height-480 controls autoplay></video>";
    if (videoView == nil) {  
        videoView = [[UIWebView alloc] initWithFrame:frame];  
        [self.view addSubview:videoView];  
    }  
    [videoView loadHTMLString:html baseURL:[bundle resourceURL]];      
}