在iOS上使用嵌入式YouTube视频进行媒体回调

时间:2012-01-12 14:42:34

标签: ios cocoa-touch uiwebview youtube

我将YouTube视频嵌入到UIWebView的iOS应用中。我在this YouTube blog post使用“方法2”来嵌入视频。这很有效,除了因为iOS管理媒体播放器,我无法确定视频是播放还是已完成。在播放视频时,我不想将该视图与另一视图交换,但我认为没有一种好方法可以确定。有任何想法吗?如果有办法获得JavaScript回调,那将会有效,或者如果有办法使用HTML5 <video>标记嵌入YouTube视频,那么这也会有用(我已经尝试过但没有成功)。

3 个答案:

答案 0 :(得分:9)

只需添加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);
}

玩得开心!

答案 1 :(得分:3)

您可以将javascript注入UIWebView(请参阅http://iphoneincubator.com/blog/windows-views/how-to-inject-javascript-functions-into-a-uiwebview)...其他有关javascript的有趣内容可以找到herehere http://code.google.com/apis/youtube/iframe_api_reference.html

尝试使用此实验性的youtube API(请参阅here)...这应该能够为您提供所需的内容。

从javascript到您的代码进行回调的另一个有用资源是{{3}}。

答案 2 :(得分:1)

对于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;
}