as

Settings
Sign out
Notifications
Alexa
亚马逊应用商店
Ring
AWS
文档
Support
Contact Us
My Cases
新手入门
设计和开发
应用发布
参考
支持

IPlayerServer

IPlayerServer

表示Kepler播放器服务器操作。该接口提供用于管理Kepler播放器服务器处理程序以及更新Kepler播放器会话状态的方法。

对于运行时错误,此类应用应使用Error对象拒绝该Promise。如有可能,应使用IPlayerSessionError发送从媒体播放器收到的错误代码和消息

属性

setHandler

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

为处理与给定组件ID关联的Kepler播放器操作请求,分配处理程序。

分配处理程序对于处理Kepler播放器请求和实现自定义Kepler播放器逻辑至关重要。此调用允许每个组件有一个处理程序。活动处理程序指上次调用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播放器服务器会话状态对于反映媒体播放状态的变化、当前选定媒体及其他相关信息至关重要。例如,应用将在AudioPlayerVideoPlayer(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播放器新轨道的信息。Audio,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播放器的现有轨道被移除的信息。Audio,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除外)。

这在提供自定义消息方面尤为有用,客户端可利用这些消息更新用户界面。


sendError

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

提供将错误从服务组件发送到交互组件的途径。

应用可在HtmlMediaElement实例上注册为 "error" EventListener,然后调用IPlayerServer.addTrack(如果触发该事件)。


Last updated: 2026年7月22日