as

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

IPlayerClient

IPlayerClient

プレイヤークライアントを表すインターフェイスです。

プロパティ

clearTextView()

clearTextView: (sessionId?) => Promise<void>

PlayerServerのメディアセッションに、キャプションコンテンツをレンダリングしているKeplerCaptionsViewをクリアするようにリクエストします。

パラメーター

sessionId?

IPlayerSessionId

省略可能。キャプションサーフェスをクリアする対象を指定するセッションID。指定しない場合、PlayerServerがリクエストの処理方法を決定します。

戻り値

Promise<void>

リクエストが正常に処理されたときに解決されるプロミスです。リクエストが失敗した場合はエラーで拒否されます。

const sessionId: IPlayerSessionId = {id: 1};
try {
  await playerClientRef.current?.clearTextView(sessionId);
} catch (error) {
  console.error('clearTextViewの呼び出し中にエラーが発生しました:', error);
  // エラー処理を実行します。
}

clearVideoView()

clearVideoView: (sessionId?) => Promise<void>

PlayerServerのメディアセッションに、ビデオコンテンツをレンダリングしているKeplerVideoSurfaceViewをクリアするようにリクエストします。

パラメーター

sessionId?

IPlayerSessionId

省略可能。ビデオ表示をクリアするための対象となるセッションID。指定しない場合、PlayerServerがリクエストの処理方法を決定します。

戻り値

Promise<void>

リクエストが正常に処理されたときに解決されるプロミスです。リクエストが失敗した場合はエラーで拒否されます。

const sessionId: IPlayerSessionId = {id: 1};
try {
  await playerClientRef.current?.clearVideoView(sessionId);
} catch (error) {
  console.error('clearVideoViewの呼び出し中にエラーが発生しました:', error);
  // エラー処理を実行します。
}

destroy()

destroy: () => void

Keplerプレイヤークライアントインスタンスを破棄し、Keplerプレイヤーサービスを停止します。クライアントは、対話型コンポーネントが破棄されたときに、メディアリソースをクリーンアップするためにこのAPIを呼び出すことが期待されます。

戻り値

void

playerClientRef.current?.destroy();

getCurrentPosition()

getCurrentPosition: (sessionId?) => Promise<number>

PlayerServerに、メディア再生の現在の再生位置(秒単位)を取得するようにリクエストします。

パラメーター

sessionId?

IPlayerSessionId

省略可能。リクエストの対象を指定するセッションID。指定しない場合、対象となるセッションはPlayerServerによって決定されます。

戻り値

Promise<number>

リクエストが正常に処理されたときに解決されるプロミスです。リクエストが失敗した場合はエラーで拒否されます。sessionIdに対応する現在の再生位置を示す数値を秒単位で返します。

詳細

メディアセッションは、新しい再生ステータスを反映するようにIPlayerSessionStatusを更新する必要があります。

const sessionId: IPlayerSessionId = {id: 1};
try {
  let position = await playerClientRef.current?.getCurrentPosition(sessionId);
} catch (error) {
  console.error('Error while calling getCurrentPosition: ', error);
  // エラー処理を実行します。
}

load()

load: (mediaInfo, loadParams?, sessionId?) => Promise<void>

指定されたURLを使用してコンテンツをロードするようPlayerServerにリクエストします。

パラメーター

mediaInfo

IPlayerSessionMediaInfo

メディアコンテンツを読み込むために必要なURLとHTTPヘッダーを記述するオブジェクト。

loadParams?

IPlayerSessionLoadParams

省略可能。URLを使用してコンテンツを読み込むために必要なパラメーター。

sessionId?

IPlayerSessionId

省略可能。コンテンツを読み込む対象を指定するセッションID。指定しない場合、PlayerServerは新しいメディアセッションを作成する必要があります。

戻り値

Promise<void>

リクエストが正常に処理されたときに解決されるプロミスです。リクエストが失敗した場合はエラーで拒否されます。

const mediaInfo: IPlayerSessionMediaInfo = {
  mediaUrl: {
    url: 'https://storage.googleapis.com/shaka-demo-assets/angel-one-widevine/dash.mpd',
    httpHeaders: [
      {
        name: 'header1',
        value: 'value1',
      },
      {
        name: 'header2',
        value: 'value2',
      },
    ],
  },
  laUrl: {
    url: 'https://cwip-shaka-proxy.appspot.com/no_auth',
    httpHeaders: [
      {
        name: 'drm_scheme',
        value: 'com.widevine.alpha',
      },
    ],
  },
  oobTextTrackInfo: [
    {
      url: 'https://mtoczko.github.io/hls-test-streams/test-vtt-ts-segments/text/1.vtt',
      kind: 'subtitles',
      label: 'English',
      language: 'en',
      mimeType: 'application/x-subtitle-vtt',
    },
    {
      url: 'https://brenopolanski.github.io/html5-video-webvtt-example/MIB2-subtitles-pt-BR.vtt',
      kind: 'subtitles',
      label: 'Spanish',
      language: 'es',
      mimeType: 'application/x-subtitle-vtt',
    },
  ],
};

const loadParams: IPlayerSessionLoadParams = {
  startPosition: 0,
  autoPlay: true,
};

const sessionId: IPlayerSessionId = {id: 1};

try {
  await playerClientRef.current?.load(mediaInfo, loadParams, sessionId);
} catch (error) {
  console.error('loadの呼び出し中にエラーが発生しました:', error);
  // エラー処理を実行します。
}

pause()

pause: (sessionId?) => Promise<void>

PlayerServerに再生を一時停止するようにリクエストします。

パラメーター

sessionId?

IPlayerSessionId

省略可能。リクエストの対象を指定するセッションID。指定しない場合、対象となるセッションはPlayerServerによって決定されます。

戻り値

Promise<void>

リクエストが正常に処理されたときに解決されるプロミスです。リクエストが失敗した場合はエラーで拒否されます。

詳細

メディアセッションは、新しい再生ステータスを反映するようにIPlayerSessionStatusを更新する必要があります。

const sessionId: IPlayerSessionId = {id: 1};
try {
  await playerClientRef.current?.pause(sessionId);
} catch (error) {
  console.error('pauseの呼び出し中にエラーが発生しました:', error);
  // エラー処理を実行します。
}

play()

play: (sessionId?) => Promise<void>

PlayerServerに再生を開始または再開するようリクエストします。

パラメーター

sessionId?

IPlayerSessionId

省略可能。リクエストの対象を指定するセッションID。指定しない場合、対象となるセッションはPlayerServerによって決定されます。

戻り値

Promise<void>

リクエストが正常に処理されたときに解決されるプロミスです。リクエストが失敗した場合はエラーで拒否されます。

詳細

メディアセッションは、新しい再生ステータスを反映するようにIPlayerSessionStatusを更新する必要があります。Keplerプレーヤーサーバーは、再生速度を通常にリセットする場合があります。

const sessionId: IPlayerSessionId = {id: 1};
try {
  await playerClientRef.current?.play(sessionId);
} catch (error) {
  console.error('playの呼び出し中にエラーが発生しました:', error);
  // エラー処理を実行します。
}

registerBufferedRangesListener()

registerBufferedRangesListener: (listener, sessionId?) => Promise<ISubscription>

リスナーをサブスクライブして、バッファされた範囲の変化を監視します。

パラメーター

listener

IPlayerSessionBufferedRangesListener

追加するリスナー。See IPlayerSessionBufferedRangesListener.

sessionId?

IPlayerSessionId

省略可能。リクエストの対象を指定するセッションID。指定しない場合、対象となるセッションはPlayerServerによって決定されます。

戻り値

Promise<ISubscription>

ISubscriptionオブジェクトを使用して解決されるプロミス。このオブジェクトを使用して、リスナーが不要になったときにリスナーのサブスクライブを解除できます。

const sessionId: IPlayerSessionId = {id: 1};
let subscription: ISubscription =
  await playerClientRef.current?.registerBufferedRangesListener(
    listener,
    sessionId,
  );

registerErrorListener()

registerErrorListener: (listener, sessionId?) => Promise<ISubscription>

サービスコンポーネントからエラーを受け取るようにリスナーをサブスクライブします。

パラメーター

listener

IPlayerSessionErrorListener

追加するリスナー。See IPlayerSessionErrorListener

sessionId?

IPlayerSessionId

省略可能。リクエストの対象を指定するセッションID。指定しない場合、対象となるセッションはPlayerServerによって決定されます。

戻り値

Promise<ISubscription>

ISubscriptionオブジェクトを使用して解決されるプロミス。このオブジェクトを使用して、リスナーが不要になったときにリスナーのサブスクライブを解除できます。

const sessionId: IPlayerSessionId = {id: 1};
let subscription: ISubscription =
  await playerClientRef.current?.registerMessageListener(listener, sessionId);

registerMessageListener()

registerMessageListener: (listener, sessionId?) => Promise<ISubscription>

サービスコンポーネントからメッセージを受信するようにリスナーをサブスクライブします。

パラメーター

listener

IPlayerSessionMessageListener

追加するリスナー。See IPlayerSessionMessageListener

sessionId?

IPlayerSessionId

省略可能。リクエストの対象を指定するセッションID。指定しない場合、対象となるセッションはPlayerServerによって決定されます。

戻り値

Promise<ISubscription>

ISubscriptionオブジェクトを使用して解決されるプロミス。このオブジェクトを使用して、リスナーが不要になったときにリスナーのサブスクライブを解除できます。

const sessionId: IPlayerSessionId = {id: 1};
let subscription: ISubscription =
  await playerClientRef.current?.registerMessageListener(listener, sessionId);

registerPositionListener()

registerPositionListener: (listener, interval, sessionId?) => Promise<ISubscription>

リスナーをサブスクライブして、再生位置の更新を監視します。この位置は秒単位です。

パラメーター

listener

IPlayerSessionPositionListener

追加するリスナー。See IPlayerSessionPositionListener

interval

number

再生位置の更新を受け取る間隔(秒単位)。負でない値である必要があります。

sessionId?

IPlayerSessionId

省略可能。リクエストの対象を指定するセッションID。指定しない場合、対象となるセッションはPlayerServerによって決定されます。

戻り値

Promise<ISubscription>

ISubscriptionオブジェクトを使用して解決されるプロミス。このオブジェクトを使用して、リスナーが不要になったときにリスナーのサブスクライブを解除できます。

const sessionId: IPlayerSessionId = {id: 1};
let subscription: ISubscription =
  await playerClientRef.current?.registerPositionListener(
    listener,
    1.0,
    sessionId,
  );

registerStatusListener()

registerStatusListener: (listener, sessionId?) => Promise<ISubscription>

リスナーをサブスクライブして、プレイヤーセッションステータスの変化を監視します。

パラメーター

listener

IPlayerSessionStatusListener

追加するリスナー。See IPlayerSessionStatusListener

sessionId?

IPlayerSessionId

省略可能。リクエストの対象を指定するセッションID。指定しない場合、対象となるセッションはPlayerServerによって決定されます。

戻り値

Promise<ISubscription>

ISubscriptionオブジェクトを使用して解決されるプロミス。このオブジェクトを使用して、リスナーが不要になったときにリスナーのサブスクライブを解除できます。

const sessionId: IPlayerSessionId = {id: 1};
let subscription: ISubscription =
  await playerClientRef.current?.registerStatusListener(listener, sessionId);

registerTrackListener()

registerTrackListener: (listener, sessionId?) => Promise<ISubscription>

リスナーをサブスクライブしてトラック情報の変化を監視します。

パラメーター

listener

IPlayerSessionTrackListener

追加するリスナー。See IPlayerSessionTrackListener

sessionId?

IPlayerSessionId

省略可能。リクエストの対象を指定するセッションID。指定しない場合、対象となるセッションはPlayerServerによって決定されます。

戻り値

Promise<ISubscription>

ISubscriptionオブジェクトを使用して解決されるプロミス。このオブジェクトを使用して、リスナーが不要になったときにリスナーのサブスクライブを解除できます。

const sessionId: IPlayerSessionId = {id: 1};
let subscription: ISubscription =
  await playerClientRef.current?.registerTrackListener(listener, sessionId);

seek()

seek: (position, isRelative?, sessionId?) => Promise<void>

指定した再生位置(秒単位)までシークするようPlayerServerにリクエストします。

パラメーター

position

number

シーク先の再生位置(秒単位)。現在の再生位置からの相対値(isRelative = true)、またはメディア開始からの絶対値(isRelative = false、0がメディア開始)。

isRelative?

boolean

指定した位置が現在の再生位置からの相対値(isRelative = true)か、メディア内の絶対値(isRelative = false)かを表します。デフォルト値はfalseです。

sessionId?

IPlayerSessionId

省略可能。リクエストの対象を指定するセッションID。指定しない場合、対象となるセッションはPlayerServerによって決定されます。

戻り値

Promise<void>

リクエストが正常に処理されたときに解決されるプロミスです。リクエストが失敗した場合はエラーで拒否されます。

詳細

メディアセッションは、新しい再生位置を反映するようにIPlayerSessionStatusを更新する必要があります。

const sessionId: IPlayerSessionId = {id: 1};
try {
  await playerClientRef.current?.seek(30, true, sessionId);
} catch (error) {
  console.error('seekの呼び出し中にエラーが発生しました:', error);
  // エラー処理を実行します。
}
const sessionId: IPlayerSessionId = {id: 1};
try {
  await playerClientRef.current?.seek(-5, false, sessionId);
} catch (error) {
  console.error('seekの呼び出し中にエラーが発生しました:', error);
  // エラー処理を実行します。
}

sendMessage()

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

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

パラメーター

message

any

送信するカスタムメッセージです。JSON値(undefinedを除く)をメッセージとして送信します。

sessionId?

IPlayerSessionId

省略可能。カスタムメッセージの処理が必要なセッションのセッションIDです。指定しない場合、すべてのセッションのデータに関するリクエストとして扱います。

戻り値

Promise<void>

リクエストが正常に処理されたときに解決されるプロミスです。リクエストが失敗した場合やmessageがundefinedの場合は、エラーで拒否されます。

// 任意のオブジェクトを作成します。
const customMessage = {
  video: {
    title: 'Video 1',
    myVideoId: 34,
  },
};
const sessionId: IPlayerSessionId = {id: 1};

try {
  await playerClientRef.current?.sendMessage(customMessage, sessionId);
} catch (error) {
  console.error('sendMessageの呼び出し中にエラーが発生しました:', error);
  // エラー処理を実行します。
}

setActiveTrack()

setActiveTrack: (trackType, trackId, sessionId?) => Promise<void>

PlayerServerにメディア再生のアクティブトラックを設定するようにリクエストします。

パラメーター

trackType

ITrackType

アクティブとして設定するトラックのタイプ。

trackId

string

アクティブとして設定するトラックのトラックID。

sessionId?

IPlayerSessionId

省略可能。リクエストの対象を指定するセッションID。指定しない場合、対象となるセッションはPlayerServerによって決定されます。

戻り値

Promise<void>

リクエストが正常に処理されたときに解決されるプロミスです。リクエストが失敗した場合はエラーで拒否されます。

詳細

メディアセッションは、新しい再生ステータスを反映するようにIPlayerSessionStatusを更新する必要があります。

const sessionId: IPlayerSessionId = {id: 1};
try {
  await playerClientRef.current?.setActiveTrack('AUDIO', 'JS_0', sessionId);
} catch (error) {
  console.error('setActiveTrackの呼び出し中にエラーが発生しました:', error);
  // エラー処理を実行します。
}

setMediaControlFocus()

setMediaControlFocus: (componentInstance, mediaControlHandler?) => Promise<void>

PlayerClientMediaControlHandlerインスタンスを登録します

バージョン2.1.0以降で使用できます。

パラメーター

componentInstance

IComponentInstance

ハンドラーを設定する必要があるコンポーネントインスタンス。

mediaControlHandler?

PlayerClientMediaControlHandler

イベントハンドラーを含むオブジェクト。

戻り値

Promise<void>

リクエストが正常に処理されたときに解決されるプロミスです。リクエストが失敗した場合や対象バージョンが2.1.0未満の場合は、エラーで拒否されます。

// 対話型コンポーネント内。
import {
  useComponentInstance,
  IComponentInstance,
} from '@amazon-devices/react-native-kepler';
import {PlayerClientMediaControlHandler} from '@amazon-devices/kepler-player-client';

const componentInstance: IComponentInstance = useComponentInstance();
class MyMediaControlsHandler extends PlayerClientMediaControlHandler {
  private playerClientRef: IPlayerClient | undefined;
  // MyMediaControlsHandlerを実装します。
}

let mediaControlsHandler: MyMediaControlsHandler = new MyMediaControlsHandler(
  playerClientRef.current as IPlayerClient,
);
try {
  await playerClientRef.current?.setMediaControlFocus(
    componentInstance,
    mediaControlsHandler,
  );
} catch (error) {
  console.error('setMediaControlFocusの呼び出し中にエラーが発生しました:', error);
  // エラー処理を実行します。
}

setMute()

setMute: (isMuted, sessionId?) => Promise<void>

PlayerServerに再生のミュートまたはミュート解除をリクエストします。

パラメーター

isMuted

boolean

trueの場合、メディアはミュートされます

sessionId?

IPlayerSessionId

省略可能。リクエストの対象を指定するセッションID。指定しない場合、対象となるセッションはPlayerServerによって決定されます。

戻り値

Promise<void>

リクエストが正常に処理されたときに解決されるプロミスです。リクエストが失敗した場合はエラーで拒否されます。

詳細

メディアセッションは、新しい再生ステータスを反映するようにIPlayerSessionStatusを更新する必要があります。

const sessionId: IPlayerSessionId = {id: 1};
try {
  await playerClientRef.current?.setMute(true, sessionId);
} catch (error) {
  console.error('setMuteの呼び出し中にエラーが発生しました:', error);
  // エラー処理を実行します。
}

setPlaybackRate()

setPlaybackRate: (playbackRate, sessionId?) => Promise<void>

メディア再生の再生レートを設定するようPlayerServerにリクエストします。

パラメーター

playbackRate

number

設定する再生レート(0.25、0.5、2.0など)。入力された再生レートがサポートされていない場合、プロミスは拒否され、登録されたIPlayerSessionErrorListenerインスタンスはIPlayerSessionErrorを受け取ります。

sessionId?

IPlayerSessionId

省略可能。リクエストの対象を指定するセッションID。指定しない場合、対象となるセッションはPlayerServerによって決定されます。

戻り値

Promise<void>

リクエストが正常に処理されたときに解決されるプロミスです。リクエストが失敗した場合はエラーで拒否されます。

詳細

メディアセッションは、新しい再生ステータスを反映するようにIPlayerSessionStatusを更新する必要があります。

const sessionId: IPlayerSessionId = {id: 1};
try {
  await playerClientRef.current?.setPlaybackRate(1.5, sessionId);
} catch (error) {
  console.error('setPlaybackRateの呼び出し中にエラーが発生しました:', error);
  // エラー処理を実行します。
}

setTextView()

setTextView: (viewHandle, sessionId?) => Promise<void>

PlayerServerのメディアセッションに、ロードされたコンテンツでKeplerキャプションビューを設定するようにリクエストします。

パラメーター

viewHandle

IViewHandle

Keplerキャプションビューの表示ハンドル。

sessionId?

IPlayerSessionId

省略可能。キャプションサーフェスを設定する対象を指定するセッションID。指定しない場合、PlayerServerがリクエストの処理方法を決定します。

戻り値

Promise<void>

リクエストが正常に処理されたときに解決されるプロミスです。リクエストが失敗した場合はエラーで拒否されます。

詳細

メディアコンテンツがロードされた後に、ロードAPIのいずれかを呼び出してsetTextViewを呼び出す必要があります。

const captionsHandleRef = useRef<IViewHandle | null>(null);
const sessionId: IPlayerSessionId = {id: 1};

// <KeplerCaptionsView>コンポーネントの onCaptionViewCreated関数を以下に登録します。
const onCaptionViewCreated = (surfaceHandle: string): void => {
  captionsHandleRef.current = {handle: surfaceHandle};
  try {
    await playerClientRef.current?.setTextView(
      captionsHandleRef.current,
      sessionId,
    );
  } catch (error) {
    console.error('clearVideoViewの呼び出し中にエラーが発生しました:', error);
    // エラー処理を実行します。
  }
};

setVideoView()

setVideoView: (viewHandle, sessionId?) => Promise<void>

PlayerServerのメディアセッションに、ロードされたコンテンツでKeplerビデオサーフェスビューを設定するようにリクエストします。

パラメーター

viewHandle

IViewHandle

KeplerVideoSurfaceViewの識別子。

sessionId?

IPlayerSessionId

省略可能。ビデオサーフェスを設定する対象を指定するセッションID。指定しない場合、PlayerServerがリクエストの処理方法を決定します。

戻り値

Promise<void>

リクエストが正常に処理されたときに解決されるプロミスです。リクエストが失敗した場合はエラーで拒否されます。

詳細

メディアコンテンツがロードされた後に、ロードAPIのいずれかを呼び出してsetVideoViewを呼び出す必要があります。

const surfaceHandleRef = useRef<IViewHandle | null>(null);
const sessionId: IPlayerSessionId = {id: 1};

// <KeplerVideoSurfaceView>コンポーネントのonSurfaceViewCreated関数を以下に登録します。
const onSurfaceViewCreated = (surfaceHandle: string): void => {
  surfaceHandleRef.current = {handle: surfaceHandle};
  try {
    await playerClientRef.current?.setVideoView(
      surfaceHandleRef.current,
      sessionId,
    );
  } catch (error) {
    console.error('setVideoViewの呼び出し中にエラーが発生しました:', error);
    // エラー処理を実行します。
  }
};

setVolume()

setVolume: (volume, sessionId?) => Promise<void>

PlayerServerにメディア再生の音量を設定するようにリクエストします。

パラメーター

volume

number

0.0から1.0の範囲で設定する音量。

sessionId?

IPlayerSessionId

省略可能。リクエストの対象を指定するセッションID。指定しない場合、対象となるセッションはPlayerServerによって決定されます。

戻り値

Promise<void>

リクエストが正常に処理されたときに解決されるプロミスです。リクエストが失敗した場合はエラーで拒否されます。

詳細

メディアセッションは、新しい再生ステータスを反映するようにIPlayerSessionStatusを更新する必要があります。

const sessionId: IPlayerSessionId = {id: 1};
try {
  await playerClientRef.current?.setVolume(0.75, sessionId);
} catch (error) {
  console.error('Error while calling setVolume: ', error);
  // エラー処理を実行します。
}

unload()

unload: (sessionId?) => Promise<void>

PlayerServerのメディアセッションにメディアコンテンツをアンロードするようにリクエストします。たとえば、アプリの状態がバックグラウンドに変わった場合にメディアコンテンツを同期的にアンロードするには、unloadSyncを呼び出します。

パラメーター

sessionId?

IPlayerSessionId

省略可能。コンテンツをアンロードする対象のセッションID。指定しない場合、PlayerServerがリクエストの処理方法を決定します。

戻り値

Promise<void>

リクエストが正常に処理されたときに解決されるプロミスです。リクエストが失敗した場合はエラーで拒否されます。

const sessionId: IPlayerSessionId = {id: 1};

try {
  await playerClientRef.current?.unload(sessionId);
} catch (error) {
  console.error('unloadの呼び出し中にエラーが発生しました:', error);
  // エラー処理を実行します。
}

unloadSync()

unloadSync: (timeoutMsec, sessionId?) => IUnloadSyncStatus

PlayerServerのメディアセッションにメディアコンテンツを同期的にアンロードするようにリクエストします。このAPIを使用して、アプリの状態がバックグラウンドに変わったときにメディアリソースを解放します。

パラメーター

timeoutMsec

number

unloadSync APIの実行に許可される最大時間(ミリ秒)。

最小値は1000で、最大値は5000です。

sessionId?

IPlayerSessionId

省略可能。コンテンツをアンロードする対象のセッションID。指定しない場合、PlayerServerがリクエストの処理方法を決定します。

戻り値

IUnloadSyncStatus

@amazon-devices/kepler-player-server#IUnloadSyncStatus|PlayerServer IUnloadSyncStatusの列挙値の1つ。

以下のバージョン以降で利用可能

2.2.0

const sessionId: IPlayerSessionId = {id: 1};

if (isPresentOnOS('@amazon-devices/kepler-player-client', '2.2.0')) {
  try {
    let unloadResult: IUnloadSyncStatus | undefined =
      playerClientRef.current?.unloadSync(1000, sessionId);
    if (
      unloadResult === IUnloadSyncStatus.INVALID ||
      unloadResult === IUnloadSyncStatus.TIMEDOUT
    ) {
      console.error('unloadSyncが失敗しました:', unloadResult);
    } else {
      console.log('unloadSync completed successfully.');
    }
  } catch (error) {
    console.error('Error while calling unloadSync: ', error);
    // エラー処理を実行します。
  }
} else {
  console.error('unloadSync not supported in this OS.');
}

Last updated: 2025年10月2日