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日

