iOS上嵌入YouTube视频的媒体回调

iOS上嵌入YouTube视频的媒体回调,ios,cocoa-touch,uiwebview,youtube,Ios,Cocoa Touch,Uiwebview,Youtube,我正在将YouTube视频嵌入iOS应用程序的UIWebView。我正在使用“方法2”来嵌入视频。这非常有效,只是因为iOS管理媒体播放器,所以我无法确定视频是否正在播放或已完成。我不想在视频播放时将该视图与另一个视图交换,但我看不到确定该视图的好方法。有什么想法吗?如果有办法获得JavaScript回调,那就行了,或者有办法使用HTML5标记嵌入YouTube视频,那也行(我已经尝试过了,但没有成功)。你可以将JavaScript注入UIWebView(请参阅)。。。关于javascript和

我正在将YouTube视频嵌入iOS应用程序的
UIWebView
。我正在使用“方法2”来嵌入视频。这非常有效,只是因为iOS管理媒体播放器,所以我无法确定视频是否正在播放或已完成。我不想在视频播放时将该视图与另一个视图交换,但我看不到确定该视图的好方法。有什么想法吗?如果有办法获得JavaScript回调,那就行了,或者有办法使用HTML5
标记嵌入YouTube视频,那也行(我已经尝试过了,但没有成功)。

你可以将JavaScript注入
UIWebView
(请参阅)。。。关于javascript和
UIWebView
的其他有趣的东西可以找到并找到

尝试将其与这个实验性的youtube API结合使用(请参阅)。。。这应该能让你得到你想要的


另一个从javascript回调代码的有用资源是。

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

只需添加MPAVController播放后台更改通知的观察者

[[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);
}

玩得开心

如果你使用YouTube应用程序播放视频。我将它们嵌入到
UIWebView
中。在iPhone上,这推送了一个模态视图控制器,但在iPad上,它们是内联播放的。我理解——对此我不知道。。。删除我的答案。希望有人能给你一个有效的答案。@JeffKelley找到了一个选项。。。虽然我不能测试它。。。但幸运的是,这适用于大容量应用程序。来自API链接:“注意:本文档中描述的IFrame player API是一项实验性功能,代表了YouTube player API的下一阶段。您不应该使用此API构建业务关键型应用程序,也不应该在生产环境中启动任何使用此API的应用程序。”@杰夫凯利这就是为什么我写实验。。。虽然我希望谷歌能在某个时候正式发布这个API。。。不知道你的时间范围-也许值得一试?看看这个问题及其答案:这是可行的,但只适用于视频全屏播放的iPhone。这种方法可以让我达到95%的效果,但由于我有多个YouTube播放器同时出现在屏幕上,它不允许我看到哪个视频开始。谢谢你!您可以解码头文件中的更多通知:例如,MPAVControlleriTemplayBackDiEndNotification