iOS上embedded式YouTubevideo的媒体callback

我将YouTubevideoembedded到iOS应用的UIWebView中。 我在此YouTube博客post中使用“方法2”来embeddedvideo。 这很好,除了因为iOSpipe理媒体播放器,我不能确定video是播放还是播放完成。 我不想在播放video时将视图与另一个视图交换,但是我不认为有一个好方法可以确定。 有任何想法吗? 如果有一种方法可以获得JavaScriptcallback,那么这将起作用,或者如果有一种方法可以使用HTML5 <video>标记embeddedYouTubevideo,那么这也可以工作(我已经试过了,没有取得成功)。

你可以注入JavaScript的UIWebView (见http://iphoneincubator.com/blog/windows-views/how-to-inject-javascript-functions-into-a-uiwebview )…其他有趣的东西关于JavaScript和UIWebView可以在这里和这里find。

尝试一起使用这个实验性的YouTube API(请参阅http://code.google.com/apis/youtube/iframe_api_reference.html )…这应该能够得到你想要的。

另一个有用的资源,这从JavaScript到你的代码callback是在这里 。

只需添加观察者为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); } 

玩的开心!

对于iPhone我使用了一些棘手的方法。 当video模式视图控制器被解散时,您可能会收到通知。

 -(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; }