2011-01-06 4 views
3

В настоящее время при выводе видео на внешний дисплей с iPad он перемещает элементы управления и все на внешний дисплей. Это не полезно, потому что вы не можете управлять фильмом, пока элементы управления находятся на внешнем дисплее. Вот некоторые фрагменты кода из нашего приложения.Как выводить видео на внешний дисплей с элементами управления на 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]; 

В настоящее время со второй реализацией addi ng как для self.view, так и для external_window, он покажет видео на внешнем дисплее (с элементами управления), а экран iPad выглядит так, как будто ничего не происходит, кроме того, что строка состояния исчезает, когда управление фильмом исчезает. Я также попытался добавить moviePlayer.view к просто self.view, и он будет мерцать чем-то в связи с сообщением «показывать контент на ТВ», прежде чем он затем продолжит играть в фильм на iPad. В настоящее время видео запускается нажатием кнопки. Использование имитатора и опции TV Out, поскольку его легче отлаживать. Xcode версии 3.2.5 и последней версии iOS на самом устройстве. Как это можно зафиксировать? Он должен вести себя как приложение youtube на iPad.

ответ

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]];  
} 
+0

Brilliant, только то, что я искал. Хотя это слишком плохо, что никто больше не размещал решение 6 месяцев назад LOL. – Kaili

+0

это не работает в iOS9 – Chris