2012-01-12 20 views
0

iOSアプリのUIWebViewにYouTube動画を埋め込みました。私はthis YouTube blog postで "方法2"を使ってビデオを埋め込みました。これは素晴らしいことですが、iOSがメディアプレーヤーを管理しているため、動画が再生中か再生中かを判断できません。ビデオが再生されている間に別のものとそのビューを交換したくないのですが、それを判断する良い方法はありません。何か案は? JavaScriptのコールバックを取得する方法があれば、それが動作するか、HTML5 <video>タグを使用してYouTube動画を埋め込む方法があれば、それもうまくいく(私はそれを試みたが成功していない)。iOSの埋め込みYouTube動画でのメディアコールバック

+1

この質問とその回答をご覧ください:http://stackoverflow.com/questions/8518719/how-to-receive-nsnotifications-from-uiwebview-embedded-youtube-video-playback – Till

答えて

3

あなたはUIWebViewにはJavaScriptを注入(http://iphoneincubator.com/blog/windows-views/how-to-inject-javascript-functions-into-a-uiwebviewを参照してください)... JavaScriptとUIWebViewについて他の興味深いものがherehereを見つけることができますすることができます。

この実験的なYouTube API(http://code.google.com/apis/youtube/iframe_api_reference.htmlを参照)と一緒にこれを試してください...これはあなたが望むものを得ることができるはずです。

javascriptからコードにコールバックするもう1つの有用なリソースはhereです。

+0

YouTubeアプリを使用してビデオを再生する。私はそれらを 'UIWebView'に埋め込みます。 iPhoneでは、これはモーダルビューコントローラをプッシュしますが、iPadではインラインで再生されます。 –

+0

私は理解しています - 私は何の考えも持っていません...私の答えを削除します。誰かがあなたの働く答えを与えることを願っています。 – Yahia

+0

@JeffKelleyはオプションを見つけました...それはテストできません... HTH – Yahia

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

これはうまく動作しますが、ビデオがフルスクリーンで再生されるiPhone上でのみ動作します。 –

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

お楽しみに!

+0

この方法では私のところで95%の視聴率を得ることができますが、一度に複数のYouTubeプレーヤーを画面に表示するため、どの動画が開始されたかを見ることができません。しかし、ありがとう! –

+0

ヘッダファイルからさらに多くの通知をデコードできます。 MPAVControllerItemPlaybackDidEndNotification –

関連する問題