2017-05-29 6 views
0

私はYoutube Iframe Javascript APIを使用してアプリケーションを開発中です。別のアプリケーションからの入力に基づいてビデオを再生または一時停止する必要があります(アプリケーションの呼び出しと呼ばれます)。私はまた、このYoutubeプレイヤー(プレイしたか一時停止したかに関わらず)から更新を取得し、呼び出し元のアプリケーションを更新する必要があります。コードで呼び出されるアクションリスナーとユーザーを区別する方法は?

ここで問題は、あなたのチューブプレイヤーがユーザーアクションで再生されているのか、Callingアプリケーションの入力に基づいているのかを区別する方法です。両方ともアクションリスナを呼び出すためです。呼び出し元のアプリケーションで再生すると、呼び出し元のアプリケーションを再度更新する必要はありません。例えば

ケース1:アプリケーションを呼び出す

  1. は、ユーチューブのプレイヤーにプレイ要求を送信します。
  2. YouTubeプレーヤーが再生されます。
  3. onStateChangeリスナーが呼び出されます。
  4. プレーヤーの状態が変更されたことをアプリケーションに通知します。 (私はこれが起こりたくない)。

ケース2:

  1. ユーザーのヒットは、プレーヤーのボタンを果たしています。
  2. YouTubeプレーヤーが再生されます。
  3. onStateChangeリスナーが呼び出されます。
  4. プレーヤーの状態が変更されたことをアプリケーションに通知します。 (私はこれが起こりたい)。

私はプログラムがそれを呼び出したときにスイッチ変数でこれを行うと、ユーザーがそれを呼び出したときにそれを無効にすることができます。しかし、このような状況が多すぎるため、すべての開発者がこれらの状況をすべて考慮して対応することは期待できません。

私は、アクションリスナーがユーザーがそのアクションを呼び出したか、またはプログラムがアクションを呼び出したかを知るための適切な方法が必要です。これを行うためのAPIが組み込まれていますか?

function callback(responseText) { 
    var response=JSON.parse(responseText.body); 
    var player = getPlayer(); 
    var seekAhead = true; 
    switch (response.playerState) { 
    case YT.PlayerState.PLAYING: 
     player.seekTo(response.seconds,seekAhead); 
     player.playVideo(); 
     break; 
    case YT.PlayerState.PAUSED: 
     player.seekTo(response.seconds,seekAhead); 
     player.pauseVideo(); 
     break; 
    case YT.PlayerState.BUFFERING: 
     break; 
    case YT.PlayerState.ENDED: 
       break; 
    } 

スイッチを管理するための変数を使用しての問題は、呼び出し側のアプリケーションが再生状態を送信するときに、一時停止を呼び出しseekToコールがイベントをバッファリングして再生し、そこにある、ということです。それらは完了するまでに時間がかかりますが、可変スイッチは最初のイベントで切り替えられます。

+0

コードはどこですか? 「*呼び出すアプリケーションがYouTubeプレーヤーに再生要求を送信する*」はどうですか? – RobG

+0

呼び出し元のアプリケーションがjsonを送信します。これには、プレーヤーに適用する必要があるプレーヤーの状態が含まれます。コードを更新します。 –

答えて

0

hm。ケース2のレジスタ・イベント・ローダーの場合、いくつかのデータをプッシュします。ケース1のレジスタの場合、 "コールアプリケーション"では同じコールバックを登録しますが、追加のデータは送信しません。

// In calling application: 
$('selector').on('click', cb) 


// For case 2: 
$('selector').on('click', {userAction: true}, cb) 


function cb (evt) { 
    if (evt.data.userAction) { 
    // react here 
    // this reaction will be not 
    // executed if 
    } 
} 
+0

jQueryタグが表示されません。 OPは* StateChange *イベントを使用していますが、*をクリックしていません。 – RobG

+0

@Waldemarlce呼び出しにもう1つ問題があります。私がプログラムでseekToを呼び出すと、アクションリスナーが3回呼び出され、それぞれ一時停止、バッファリング、再生が行われます。この場合、Callingアプリケーションによって呼び出された単一のアクションのために、追加のデータがAPIによって順番に呼び出されるので、それを渡すことはできません。 –

+0

しかし、それは解決策を持っていないようです... – WaldemarIce

関連する問題