APL Video



APL Video

ビデオプレイヤーでは、一つ、または複数の埋め込み動画が再生されます。埋め込み動画のプレイヤーでは操作はできません。その代わり、ビデオプレイヤーを操作するためのコントロールを作成するのに必要なイベントとコマンドが、プレイヤーに提供されます。ビデオプレイヤーの再生方法については、PlayMediaコマンドとControlMediaコマンドを参照してください。

Videoコンポーネントを使用するスキルでは、音声と画面上のボタンでビデオコンテンツを一時停止する方法を用意する必要があります。

サンプルビデオ

{
  "type": "Video",
  "source": URL,
  "autoplay": true
}

再生用インテント

音声ベースの再生操作に対応するには、 ビルトインインテントを実装する必要があります。

ビデオ再生後の音声入力を管理する

自分のスキルでビデオを再生し、その後、音声入力を受け入れる場合、onEndイベントハンドラーを使用し、SendEventコマンドを呼び出します。後に続くUserEventリクエストをスキルで処理する必要があります。音声入力を受け入れるには、shouldEndSessionfalseに設定してresponseを送信します。Alexaユーザーが入力を行えるように、応答には、適切なoutputSpeechオブジェクトとrepromptオブジェクトを含める必要があります。

ビデオをサポートしないデバイス

画面付きのデバイスでも、ビデオ再生をサポートしていないものもあることに注意してください。ビデオをサポートしていないデバイスでは、Videoコンポーネントは画面上に表示されていますが、コンテンツは表示されないため、ユーザーには画面に空白の領域が見えることになります。ビデオをサポートしていないデバイスには、別のエクスペリエンスを提供してください。

デバイスがビデオをサポートしていない場合、データバインディングコンテキストdisallowVideoプロパティはtrueを返します。このプロパティは、APLドキュメント内の条件付きロジックで使用できます。

スキルコードでビデオをサポートしているか確認することもできます。スキルに送信されたリクエストのcontext.Viewport.videoプロパティを確認してください。

プロパティ

Videoコンポーネントには、コンポーネントのプロパティのほかに次のプロパティがあります。列の意味については、こちらを参照してください

高さと幅のプロパティは、それぞれデフォルトで100dpに設定されています。

再生されるメディアはファイル1個のみです。ライブコンテンツには対応していません。

プロパティ デフォルト スタイル設定 動的 説明
audioTrack foregroundbackgroundnoneのいずれかです。 foreground 再生するオーディオトラックです。
autoplay ブール値 false trueの場合、ビデオの再生が自動的に始まります。
onEnd コマンド配列 [ ] 最後のビデオトラックの再生が終わったときに実行するコマンドです。
onPause コマンド配列 [ ] ビデオが再生から一時停止に切り替えられたときに実行するコマンドです。
onPlay コマンド配列 [ ] ビデオが一時停止から再生に切り替えられたときに実行するコマンドです。
onTimeUpdate コマンドの配列 [ ] 再生位置が変更されたときに実行するコマンドです。
onTrackUpdate コマンド配列 [ ] 現在のビデオトラックが変更されるときに実行するコマンドです。
scale best-fillまたはbest-fitのいずれかです。 best-fit ビデオのサイズ変更方法です。
source(s) URLまたはSource配列 [ ] ビデオソースです。

指定されない場合、Videoコンポーネントのheightwidthのデフォルトは100dpです。

セッションを開いたままで音声入力を受け取るようにするには、autoplaytrueに設定し、かつshouldEndSessionfalseに設定しないでください。ビデオの再生中、マイクがオンになってしまいます。ビデオ再生後の音声入力を管理するを参照してください。

Videoコンポーネントがイベントのターゲットである場合、event.targetは以下の値を報告します。

"event": {
  "target": {
    "currentTime": Integer, // 現在のトラックの現在の再生位置(ミリ秒単位)
    "disabled": Boolean,    // コンポーネントが無効な場合はtrue
    "id": ID,               // コンポーネントのID
    "uid": UID,             // ランタイムで生成されたコンポーネントの固有ID
    "height": Number,       // コンポーネントのdp単位の高さ(パディングを含む)
    "opacity": Number,      // コンポーネントの不透明度[0~1]
    "paused": Boolean,      // ビデオが一時停止状態の場合はtrue
    "source": String,       // 現在再生中またはキューに入っているトラックのURL
    "trackIndex": Integer,  // 現在のトラックのインデックス
    "width": Number         // コンポーネントのdp単位の幅(パディングを含む)
  }
}

audioTrack

audioTrackプロパティは、フォアグラウンドまたはバックグラウンドオーディオにメディアコンテンツを割り当てるか、完全にミュート(noneまたはmute)します。フォアグラウンドオーディオは、音声コマンドやサウンドエフェクトと共にインターリーブします。バックグラウンドオーディオは、音声コマンドやサウンドエフェクトの後に再生します。フォアグラウンドまたはバックグラウンドに使用できるオーディオソースは、一度に1つのみです。

説明
foreground フォアグラウンドトラックのオーディオが再生されます。Alexaと話すと、このメディアは一時停止します。
background バックグラウンドの音楽トラックのオーディオが再生されます。既存のバックグラウンドオーディオを終了させます。Alexaと話すと、このメディアは一時非表示になるか、短時間一時停止する場合があります。
none|mute オーディオコンテンツは無視され、ビデオコンテンツのみが再生されます。

audioTrackforegroundに設定していると、すべてのメディアトラックが終わるまでPlayMediaコマンドは「完了」となりません。このため、シンプルなコマンドシークエンスで、この例のようにメディアコンテンツと音声をインターリーブして実行できます。

"onPress": [
  {
    "type": "PlayMedia",
    "componentId": "myVideoPlayer",
    "source": URL,
    "audioTrack": "foreground"
  },
  {
    "type": "SpeakItem",
    "description": "これはメディアの再生終了後に実行されます",
    "componentId": "myAnswerBox"
  }
]

PlayMediaコマンドがaudioTrackbackgroundまたはnoneに設定した場合、オーディオはただちに「終了」し、メディアコンテンツの終わりまで待つことはありません。バックグラウンドメディアは画面タッチに対応していません。たとえば以下のシークエンスでは、SendEventコマンドがただちに実行され、メディアの再生終了を待っていません。

"onPress": [
  {
    "type": "PlayMedia",
    "componentId": "myVideoPlayer",
    "source": URL,
    "audioTrack": "background"
  },
  {
    "type": "SendEvent",
    "description": "これはすぐに実行されます",
    "arguments": ["メディアが開始されましたが、まだ停止されていません"]
  }
]

autoPlay

trueに設定すると、ビデオは読み込まれた直後に再生を自動的に開始します。falseの場合、ビデオに明示的に開始を命令する必要があります。デフォルトはfalseです。

scale

Container内でのビデオのサイズを調整します。

名前 説明
best-fill 画面の端を切らずにContainerいっぱいに表示されるよう、ビデオのサイズが調整されます。ビデオとContainerのアスペクト比が異なる場合、ビデオの上下または左右の端が表示されません。
best-fit Container内に収まるよう、ビデオのサイズが調整されます。ビデオとContainerのアスペクト比が異なる場合、黒帯状の画像がビデオの左右または上下の端に表示されます。

source

再生するビデオクリップまたはビデオクリップシーケンスを指定します。sourceプロパティはプレーンURL(文字列)かソースデータ配列になります。

複数のビデオが指定された場合、プレイヤーは各ビデオを順番に再生します。Videoコンポーネントの sourceプロパティと各ソースのurlプロパティは「配列化」のルールに従います。urlプロパティの場合、urlプロパティのあるオブジェクトのほかに、プレーンテキスト形式の文字列を単一URLとして受け取ることができます。そのため、sourceプロパティを設定する方法として以下はすべて有効となります。

"source": URL
"source": [ URL ]
"source": { "url": URL }
"source": [ { "url": URL } ]
"source": [ URL1, { "url": URL2 } ]

メディアソースを指定する最も一般的な方法は、定義を完全に拡張することです。

"source": [
  {
    "description": "再生する最初のビデオクリップです",
    "offset": 150,   // 最初の150ミリ秒をスキップします
    "url": URL1,
  },
  {
    "description": "再生する2番目のビデオクリップです",
    "url": URL2,
    "repeatCount": -1    // 永久に繰り返します 
  },
  {
    "description": "このビデオは、コマンドからのみ操作できます",
    "url": URL3
  }
]

以下の最小限の定義は、前述の定義と同じです。

"source": [
  {
    "offset": 150,   // 最初の150ミリ秒をスキップします
    "url": URL1,
  },
  {
    "url": URL2,
    "repeatCount": -1    // 永久に繰り返します 
  },
  URL3
]

sourceがデータ配列の場合、次のような構造になります。

プロパティ デフォルト 説明
description 文字列 "" このソースの任意の説明です。
duration 数値 none ミリ秒単位の再生時間です。設定しない場合、ストリーム全体が指定されます。
url URL 必須 メディアのソースです。
repeatCount 整数 0 ビデオをループさせる回数です。
entity (entities) エンティティの配列 [] このメディアをAlexaに報告する際に設定するエンティティデータです。
offset 数値 0 補正値を指定し、ストリームの中でその場所から再生を開始します。
duration
ミリ秒単位の再生時間です。ビデオ全体を再生するように設定しないでください。実際のメディアクリップよりも短い時間に設定すると、指定した時間だけ再生して停止します。指定した再生時間が実際のメディアクリップより長い場合、再生時間が増えることはありません。durationがゼロ以下の場合、そのメディアクリップはスキップされ、再生されません。
url
メディアソースのURLです。https URLにする必要があります。Viewportのvideoプロパティを確認して、サポートされている形式を判断します。
repeatCount
このメディアの再生を繰り返す回数です。デフォルトは0です。つまり、一回通して再生したら停止となります。-1に設定した場合、ビデオは永久に繰り返されます。
offset
メディアの開始点からのoffsetであり、この場所から再生を開始します。ミリ秒で指定します。デフォルトは0です。つまり、メディアの開始点から再生が始まります。ビデオのrepeatCount値が正の場合、毎回同じ補正値でメディアが再生されます。

ハンドラー

次のハンドラーが説明のとおり呼び出されます。

onEnd

onEndハンドラーは、ビデオシーケンスの最後のビデオで繰り返しが終わり、再生が完了となったときに呼び出されます。onEndハンドラーは複数回呼び出すことができます。たとえば、あるビデオを最後まで再生して停止し、シークコマンドを受け取って前のポイントまで早戻しして、再生コマンドを受け取って最後まで再生して停止することができます。

生成されるイベントの形式は、次のようになります。

"event": {
  "source": {
    "type": "Video",
    "handler": "End",
    "id": ID,          // VideoコンポーネントのID
    "uid": UID,          // ランタイムで生成されたコンポーネントの固有ID
    "value": null      // 値は報告されません
  },
  "trackIndex": Integer,    // trackCount – 1と等しくなります
  "trackCount": Integer,
  "currentTime": Integer,   // durationと等しいか、それ以上になります
  "duration": Integer,
  "paused": true,
  "ended": true
}

onPause

onPauseハンドラーは、ビデオ再生が再生から一時停止に意図的に切り替えられたときに呼び出されます。最後のビデオの終わりに到達したとき、再生を停止するコマンドがビデオプレイヤーに渡されたとき、同期的ビデオ再生が中断されたときなどに発生します。ビデオコンテンツをダウンロードするためにビデオプレイヤーで再生を一時停止しなければならない場合、onPauseハンドラーは呼び出されません。

生成されるイベントの形式は、次のようになります。

"event": {
  "source": {
    "type": "Video",
    "handler": "Pause",
    "id": ID,          // VideoコンポーネントのID
    "uid": UID,          // ランタイムで生成されたコンポーネントの固有ID
    "value": null      // 値は報告されません
  },
  "trackIndex": Integer,
  "trackCount": Integer,
  "currentTime": Integer,
  "duration": Integer,
  "paused": true,
  "ended": BOOLEAN
}

onPlay

onPlayハンドラーは、ビデオ再生が一時停止から再生に切り替えられるたびに呼び出されます。autoplaytrueに設定されたビデオ、PlayMediaコマンド、再生コマンドなどによって発生します。

生成されるイベントの形式は、次のようになります。

"event": {
  "source": {
    "type": "Video",
    "handler": "Play",
    "id": ID,          // VideoコンポーネントのID
    "uid": UID,          // ランタイムで生成されたコンポーネントの固有ID
    "value": null      // 値は報告されません
  },
  "trackIndex": Integer,
  "trackCount": Integer,
  "currentTime": Integer,
  "duration": Integer,
  "paused": false,
  "ended": BOOLEAN
}

onTimeUpdate

onTimeUpdateハンドラーは、現在のビデオの再生位置が変更されたときに呼び出されます。ハンドラーは「ベストエフォート」ベースで呼び出されます。呼び出しの頻度は保証されていません。

生成されるイベントの形式は、次のようになります。

{
  "event": {
    "source": {
      "type": "Video",
      "handler": "TimeUpdate",
      "id": "VideoコンポーネントのID",
      "uid": "ランタイムで生成されたコンポーネントの固有ID",
      "value": "下のcurrentTimeフィールドと等しいです"
    },
    "trackIndex": Integer,
    "trackCount": Integer,
    "currentTime": Integer,
    "duration": Integer,
    "paused": BOOLEAN,
    "seekable": BOOLEAN,
    "ended": BOOLEAN
  }
}

onTimeUpdateハンドラーは、常に高速モードで実行されます。

onTrackUpdate

onTrackHandlerハンドラーは、別のビデオトラックがアクティブになったときに呼び出されます。通常のビデオシーケンスとしてプレイヤーが次のビデオトラックに進むとき、プレイヤーにコマンドが渡されたときなどに発生します。

生成されるイベントの形式は、次のようになります。

"event": {
  "source": {
    "type": "Video",
    "handler": "TrackUpdate",
    "id": ID,              // VideoコンポーネントのID
    "uid": UID,            // ランタイムで生成されたコンポーネントの固有ID
    "value": trackIndex    // 下のtrackIndexフィールドと等しいです
  },
  "trackIndex": Integer,
  "trackCount": Integer,
  "currentTime": Integer,
  "duration": Integer,
  "paused": BOOLEAN,
  "ended": BOOLEAN
}