Медиа обратные вызовы со встроенными видео YouTube на iOS - PullRequest
0 голосов
/ 12 января 2012

Я встраиваю видео YouTube в UIWebView для приложения для iOS. Я использую «Метод 2» в этой записи блога YouTube для встраивания видео. Это прекрасно работает, за исключением того, что iOS управляет медиапроигрывателем, и я не могу определить, воспроизводится ли видео или выполняется. Я не хочу менять это представление на другое во время воспроизведения видео, но я не вижу хорошего способа определить это. Есть идеи? Если есть способ получить обратный вызов JavaScript, это сработает, или если есть способ встроить видео YouTube с помощью тега HTML5 <video>, это также сработает (я пробовал это и не получил успеха). *

Ответы [ 3 ]

9 голосов
/ 26 января 2012

Просто добавьте наблюдателя для MPAVControllerPlaybackStateChangedNotification.

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(playbackStateDidChange:)
                                                 name:@"MPAVControllerPlaybackStateChangedNotification"
                                               object:nil];

, затем начните слушать:

- (void)playbackStateDidChange:(NSNotification *)note
{
    NSLog(@"note.name=%@ state=%d", note.name, [[note.userInfo objectForKey:@"MPAVControllerNewStateParameter"] intValue]);
    int playbackState = [[note.userInfo objectForKey:@"MPAVControllerNewStateParameter"] intValue];
    switch (playbackState) {
        case 1: //end
            ;
            break;
        case 2: //start
            ;
            break;    
        default:
            break;
    }
}

Исследуйте другие состояния, если вам интересно.Кроме того, каждый, кто интересуется кучей других уведомлений, может зарегистрироваться, чтобы увидеть все:

CFNotificationCenterAddObserver(CFNotificationCenterGetLocalCenter(), 
                                    NULL, 
                                    noteCallbackFunction, 
                                    NULL, 
                                    NULL,  
                                    CFNotificationSuspensionBehaviorDeliverImmediately);

, а затем проверить, что происходит:

void noteCallbackFunction (CFNotificationCenterRef center,
                 void *observer,
                 CFStringRef name,
                 const void *object,
                 CFDictionaryRef userInfo)
{
    NSLog(@"notification name: %@", name);
    NSLog(@"notification info: %@", userInfo);
}

Получайте удовольствие!

3 голосов
/ 14 января 2012

вы можете добавить javascript в UIWebView (см. http://iphoneincubator.com/blog/windows-views/how-to-inject-javascript-functions-into-a-uiwebview)... другие интересные вещи о javascript, и UIWebView можно найти здесь и здесь .

попробуйте использовать это вместе с этим экспериментальным API YouTube (см. http://code.google.com/apis/youtube/iframe_api_reference.html)..., это должно быть в состоянии получить то, что вы хотите.

Еще один полезный ресурс для этого, чтобы сделать обратный вызов из javascript дляВаш код здесь .

1 голос
/ 18 января 2012

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

-(void) onUIWebViewButtonTouch:(id) sender
{
     self.isWatchForNotifications = YES;
    [[NSNotificationCenter defaultCenter]
     addObserver:self
     selector:@selector(windowNowVisible:)
     name:UIWindowDidBecomeVisibleNotification
     object:self.view.window
     ];
}

- (void)windowNowVisible:(NSNotification *)note
{
 if (isWatchForNotifications == YES)
 {
   //modal viewcontroller was dismissed
 }
  self.isWatchForNotifications = NO;
} 
...