Amazon Developer

as

Settings
Sign out
Notifications
Alexa
Amazonアプリストア
Ring
AWS
ドキュメント
Support
Contact Us
My Cases
開発
設計と開発
公開
リファレンス
サポート

IPlayerServer

IPlayerServer

Keplerプレーヤーサーバーの操作を表します。このインターフェイスは、Keplerプレーヤーサーバーのハンドラーを管理し、Keplerプレーヤーのセッションステータスを更新するためのメソッドを提供します。

ランタイムエラーの場合、アプリはErrorオブジェクトでプロミスを拒否し、可能な場合はメディアプレーヤーから受信したエラーコードとメッセージをIPlayerSessionErrorを使用して送信する必要があります。

プロパティ

setHandler

setHandler: (handler: IPlayerServerHandler, componentId: string) => void

指定されたコンポーネントIDに関連付けられたKeplerプレーヤーのアクションに関するリクエストを処理するハンドラーを割り当てます。

Keplerプレーヤーのリクエストを処理し、Keplerプレーヤーのカスタムロジックを実装するには、ハンドラーの割り当てが不可欠です。この呼び出しでは、コンポーネントごとに1つのハンドラーを使用できます。アクティブなハンドラーは、setHandlerの前回の呼び出しで設定されたハンドラーです。


updateBufferedRanges

updateBufferedRanges: (bufferedRanges: Array<ITimeRange>, sessionId?: IPlayerSessionId) => Promise<void>

通知を希望するクライアントにKeplerプレーヤーのバッファ範囲について通知します。

サーバーセッションの再生バッファ範囲に関する更新は、メディアの再生ステータス、現在選択されているメディア、その他の関連情報の変更を反映するために不可欠です。

let sessionId1: IPlayerSessionId = { id: 1 };
let mediaPlayer1: HtmlMediaElement | VideoPlayer | AudioPlayer; // sessionId 1に関連付けられると想定。
let sessionId2: IPlayerSessionId = { id: 2 };
let mediaPlayer2: HtmlMediaElement | VideoPlayer | AudioPlayer; // sessionId 2に関連付けられると想定。

private getBufferedRanges(mediaPlayer: HtmlMediaElement | VideoPlayer | AudioPlayer): Array<ITimeRange> {
  const result: Array<ITimeRange> = [];
  const bufferedTimeRanges = mediaPlayer.buffered;
  for (let i = 0; i < bufferedTimeRanges.length; ++i) {
    result.push({
      start: bufferedTimeRanges.start(i),
      end: bufferedTimeRanges.end(i)
    });
  }
  return result;
}

playerServerRef.current?.updateBufferedRanges(getBufferedRanges(mediaPlayer1), sessionId1);
playerServerRef.current?.updateBufferedRanges(getBufferedRanges(mediaPlayer2), sessionId2);


updateStatus

updateStatus: (status: Array<IPlayerSessionStatus>) => Promise<void>

通知を希望するクライアントにKeplerプレーヤーのセッションステータスが更新されたことを通知します。

Keplerプレーヤーサーバーのセッションステータスに関する更新は、メディアの再生ステータス、現在選択されているメディア、その他の関連情報の変更を反映するために不可欠です。たとえばアプリでは、AudioPlayerまたはVideoPlayer(https://html.spec.whatwg.org/#event-handlers-on-elements,-document-objects,-and-window-objects)にメディア関連のEventListenerを登録して、それに応じてIPlayerSessionStatusのパラメーターを更新し、updateStatusを呼び出します。該当する場合、Keplerプレーヤーサーバーは、インストールされているIPlayerServerHandlerインスタンスを通じて受け取ったKeplerプレーヤーのリクエストに対して処理を実行したときに、セッションステータスの更新を発行する必要があります。


addTrack

addTrack: (newTrack: ITrackInfo, sessionId?: IPlayerSessionId) => Promise<void>

通知を希望するクライアントにKeplerプレーヤーの新しいトラックが追加されたこと通知します。AudioPlayerまたはVideoPlayerは、AudioTrackList、VideoTrackList、TextTrackListのいずれかに"addtrack"のEventListenerを登録してから、このAPIを呼び出す必要があります。

サーバーセッションの新しいトラックに関する更新は、メディアの再生ステータス、現在選択されているメディア、その他の関連情報の変更を反映するために不可欠です。アプリでは、HtmlMediaElement.audioTracks,videoTracks,textTracks属性に"addtrack"のEventListenerを登録し、イベントが発生した場合にIPlayerServer.addTrackを呼び出すことができます。

例:

let media = useRef<VideoPlayer | AudioPlayer | null>(...);
let sessionId = useRef<IPlayerSessionId | undefined>(...);

const onAudioTrackAdded = (event: Event): void => {
  if (event instanceof TrackEvent) {
    let track = (event as TrackEvent).track;
    if (track !== undefined) {
      playerServerRef.current?.addTrack({
        id: track.id,
        type: "AUDIO",
        kind: track.kind,
        label: track.label,
        language: track.language,
        enabled: (track as AudioTrack).enabled
      }, sessionId.current);
      // 必要に応じてその他の操作を実行します。
    } else {
      console.error("オーディオトラックが未定義です。");
    }
  }
}

const onVideoTrackAdded = (event: Event): void => {
  if (event instanceof TrackEvent) {
    let track = (event as TrackEvent).track;
    if (track !== undefined) {
      playerServerRef.current?.addTrack({
        id: track.id,
        type: "VIDEO",
        kind: track.kind,
        label: track.label,
        language: track.language,
        enabled: (track as VideoTrack).selected
      }, sessionId.current);
      // 必要に応じてその他の操作を実行します。
    } else {
      console.error("ビデオトラックが未定義です。");
    }
  }
}

const onTextTrackAdded = (event: Event): void => {
  if (event instanceof TrackEvent) {
    let track = (event as TrackEvent).track;
    if (track !== undefined) {
      playerServerRef.current?.addTrack({
        id: track.id,
        type: "TEXT",
        kind: track.kind,
        label: track.label,
        language: track.language,
        mode: (track as TextTrack).mode
      }, sessionId.current);
      // 必要に応じてその他の操作を実行します。
    } else {
      console.error("テキストトラックが未定義です。");
    }
  }
}

media.current?.audioTracks.addEventListener("addtrack", onAudioTrackAdded);
media.current?.videoTracks.addEventListener("addtrack", onVideoTrackAdded);
media.current?.textTracks.addEventListener("addtrack", onTextTrackAdded);


removeTrack

removeTrack: (removedTrack: ITrackInfo, sessionId?: IPlayerSessionId) => Promise<void>

通知を希望するクライアントにKeplerプレーヤーの既存のトラックが削除されたことを通知します。AudioPlayerまたはVideoPlayerは、AudioTrackList、VideoTrackList、TextTrackListのいずれかに"removetrack"のEventListenerを登録してから、このAPIを呼び出す必要があります。

サーバーセッションの削除されたトラックに関する更新は、メディアの再生ステータス、現在選択されているメディア、その他の関連情報の変更を反映するために不可欠です。アプリでは、HtmlMediaElement.audioTracks,videoTracks,textTracks属性に"removetrack"のEventListenerを登録し、イベントが発生した場合にIPlayerServer.removeTrackを呼び出すことができます。

例:

let media = useRef<VideoPlayer | AudioPlayer | null>(...);
let sessionId = useRef<IPlayerSessionId | undefined>(...);

const onAudioTrackRemoved = (event: Event): void => {
  if (event instanceof TrackEvent) {
    let track = (event as TrackEvent).track;
    if (track !== undefined) {
      playerServerRef.current?.removeTrack({
        id: track.id,
        type: "AUDIO",
        kind: track.kind,
        label: track.label,
        language: track.language,
        enabled: (track as AudioTrack).enabled
      }, sessionId.current);
      // 必要に応じてその他の操作を実行します。
    } else {
      console.error("オーディオトラックが未定義です。");
    }
  }
}

const onVideoTrackRemoved = (event: Event): void => {
  if (event instanceof TrackEvent) {
    let track = (event as TrackEvent).track;
    if (track !== undefined) {
      playerServerRef.current?.removeTrack({
        id: track.id,
        type: "VIDEO",
        kind: track.kind,
        label: track.label,
        language: track.language,
        enabled: (track as VideoTrack).selected
      }, sessionId.current);
      // 必要に応じてその他の操作を実行します。
    } else {
      console.error("ビデオトラックが未定義です。");
    }
  }
}

const onTextTrackRemoved = (event: Event): void => {
  if (event instanceof TrackEvent) {
    let track = (event as TrackEvent).track;
    if (track !== undefined) {
      playerServerRef.current?.removeTrack({
        id: track.id,
        type: "TEXT",
        kind: track.kind,
        label: track.label,
        language: track.language,
        mode: (track as TextTrack).mode
      }, sessionId.current);
      // 必要に応じてその他の操作を実行します。
    } else {
      console.error("テキストトラックが未定義です。");
    }
  }
}

media.current?.audioTracks.addEventListener("removetrack", onAudioTrackRemoved);
media.current?.videoTracks.addEventListener("removetrack", onVideoTrackRemoved);
media.current?.textTracks.addEventListener("removetrack", onTextTrackRemoved);


sendMessage

sendMessage: (message: any, sessionId?: IPlayerSessionId) => Promise<void>

対話型コンポーネントにカスタムメッセージを送信する方法を提供します。任意のJSON型をメッセージとして送信できます(undefinedを除く)。

これは、UIの更新に使用できるカスタムメッセージをクライアントに提供する場合に特に役立ちます。


sendError

sendError: (error: IPlayerSessionError, sessionId?: IPlayerSessionId) => Promise<void>

サービスコンポーネントから対話型コンポーネントにエラーを送信する方法を提供します。

アプリでは、HtmlMediaElementインスタンスに"error"のEventListenerを登録し、イベントが発生した場合にIPlayerServer.addTrackを呼び出すことができます。


Last updated: 2026年7月22日