メディア トラックを使用する

MediaTrack メディア トラック(音声ストリーム、動画ストリーム、テキスト)を表します。 提供します。アプリのグループ化、スタイル設定、有効化が可能 使用できます。

トラックを設定する

トラックを設定し、一意の ID を割り当てることができます。次のコードでは、 英語のテキスト トラック、フランス語のテキスト トラック、フランス語の音声トラックを作成します。 それぞれ独自の ID が割り当てられます。

Kotlin
val englishSubtitle = MediaTrack.Builder(1 /* ID */, MediaTrack.TYPE_TEXT)
    .setName("English Subtitle")
    .setSubtype(MediaTrack.SUBTYPE_SUBTITLES)
    .setContentId("https://some-url/caption_en.vtt")
    /* language is required for subtitle type but optional otherwise */
    .setLanguage("en-US")
    .build()

val frenchSubtitle = MediaTrack.Builder(2, MediaTrack.TYPE_TEXT)
    .setName("French Subtitle")
    .setSubtype(MediaTrack.SUBTYPE_SUBTITLES)
    .setContentId("https://some-url/caption_fr.vtt")
    .setLanguage("fr")
    .build()

val frenchAudio = MediaTrack.Builder(3, MediaTrack.TYPE_AUDIO)
    .setName("French Audio")
    .setContentId("trk0001")
    .setLanguage("fr")
    .build()
をご覧ください。 <ph type="x-smartling-placeholder">
</ph>
Java
MediaTrack englishSubtitle = new MediaTrack.Builder(1 /* ID */,
MediaTrack.TYPE_TEXT)
  .setName("English Subtitle")
  .setSubtype(MediaTrack.SUBTYPE_SUBTITLES)
  .setContentId("https://some-url/caption_en.vtt")
  /* language is required for subtitle type but optional otherwise */
  .setLanguage("en-US")
  .build();

MediaTrack frenchSubtitle = new MediaTrack.Builder(2, MediaTrack.TYPE_TEXT)
  .setName("French Subtitle")
  .setSubtype(MediaTrack.SUBTYPE_SUBTITLES)
  .setContentId("https://some-url/caption_fr.vtt")
  .setLanguage("fr")
  .build();

MediaTrack frenchAudio = new MediaTrack.Builder(3, MediaTrack.TYPE_AUDIO)
  .setName("French Audio")
  .setContentId("trk0001")
  .setLanguage("fr")
  .build();

グループ トラック

複数のトラックを 1 つのメディア アイテムにグループ化できます。メディア アイテムは、 MediaInfoMediaInfo のインスタンス はトラックの配列を受け取り、メディア アイテムに関するその他の情報を集約します。 この例を基にすると、アプリはこれら 3 つのメディア トラックをメディアに追加できます。 3 つのトラックのリストを MediaInfo.Builder.setMediaTracks(List)。 アプリが読み込まれる前に、この方法で MediaInfo にトラックを関連付ける必要があります 受信します。

Kotlin
val tracks: MutableList<MediaTrack> = ArrayList<MediaTrack>()
tracks.add(englishSubtitle)
tracks.add(frenchSubtitle)
tracks.add(frenchAudio)
val mediaInfo = MediaInfo.Builder(url)
    .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
    .setContentType(getContentType())
    .setMetadata(getMetadata())
    .setMediaTracks(tracks)
    .build()
をご覧ください。 <ph type="x-smartling-placeholder">
</ph>
Java
List tracks = new ArrayList();
tracks.add(englishSubtitle);
tracks.add(frenchSubtitle);
tracks.add(frenchAudio);
MediaInfo mediaInfo = MediaInfo.Builder(url)
  .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
  .setContentType(getContentType())
  .setMetadata(getMetadata())
  .setMediaTracks(tracks)
  .build();

トラックを削除

現在のメディアからすべてのトラックを削除する サブタイトル)、 MediaInfo.Builder.setMediaTracks(List) ID の空のリストを渡します。

トラックを更新する

アプリは、メディアに関連付けられた 1 つ以上のトラックを有効にできます (メディアが読み込まれた後)に呼び出すことで、 RemoteMediaClient.setActiveMediaTracks(long[]) 有効にするトラックの ID を渡しますこの例では、 フランス語字幕とフランス語音声:

Kotlin
// the ID for the French subtitle is '2' and for the French audio '3'
remoteMediaClient.setActiveMediaTracks(longArrayOf(2, 3))
    .setResultCallback(ResultCallback {
            mediaChannelResult: RemoteMediaClient.MediaChannelResult ->
                if (!mediaChannelResult.status.isSuccess) {
                    Log.e(TAG, "Failed with status code:" +
                            mediaChannelResult.status.statusCode
                    )
                }
    })
をご覧ください。 <ph type="x-smartling-placeholder">
</ph>
Java
// the ID for the French subtitle is '2' and for the French audio '3'
remoteMediaClient.setActiveMediaTracks(new long[]{2, 3})
    .setResultCallback(mediaChannelResult -> {
        if (!mediaChannelResult.getStatus().isSuccess()) {
            Log.e(TAG, "Failed with status code:" +
                    mediaChannelResult.getStatus().getStatusCode());
        }
    });

テキスト トラックのスタイルを設定する

TextTrackStyle テキスト トラックのスタイル設定情報をカプセル化します。作成または更新後 既存の TextTrackStyle を使用した場合、そのスタイルを現在再生中の 使用してメディア アイテムを作成し、 RemoteMediaClient.setTextTrackStyle 例:

Kotlin
// the ID for the French subtitle is '2' and for the French audio '3'
remoteMediaClient.setTextTrackStyle(style)
    .setResultCallback(ResultCallback {
            mediaChannelResult: RemoteMediaClient.MediaChannelResult ->
                if (!mediaChannelResult.status.isSuccess) {
                    Log.e(TAG, "Failed to set the style, status code: " +
                            mediaChannelResult.status.statusCode
                    )
                }
    })
をご覧ください。 <ph type="x-smartling-placeholder">
</ph>
Java
remoteMediaClient.setTextTrackStyle(style)
    .setResultCallback(mediaChannelResult -> {
        if (!mediaChannelResult.getStatus().isSuccess()) {
            Log.e(TAG, "Failed to set the style, status code: " +
                    mediaChannelResult.getStatus().getStatusCode());
        }
    });

アプリでテキスト トラックのスタイルを、次のいずれかの方法で更新できるようにする必要があります。 システムまたはアプリ自体によって提供される設定。Android KitKat の場合 以降を使用する場合は、 フレームワーク:

Kotlin
val textTrackStyle = TextTrackStyle.fromSystemSettings(context)
をご覧ください。 <ph type="x-smartling-placeholder">
</ph>
Java
TextTrackStyle textTrackStyle = TextTrackStyle.fromSystemSettings(context);

KitKat より前のバージョンの場合、上記の呼び出しでは、次の条件を満たすオブジェクトが返されます。 フィールドは未定義であるため、アプリの要件に基づいて、 ユーザー選択と一部のデフォルト値に左右されます。次のテキストのスタイルを設定できます トラック スタイル要素:

  • フォアグラウンド(テキスト)の色と不透明度
  • 背景の色と透明度
  • エッジの種類
  • エッジの色
  • フォント スケール
  • フォント ファミリー
  • フォント スタイル

たとえば、次のようにテキストの色を赤(FF)、不透明度 50%(80)に設定します。

Kotlin
textTrackStyle.foregroundColor = Color.parseColor("#80FF0000")
をご覧ください。 <ph type="x-smartling-placeholder">
</ph>
Java
textTrackStyle.setForegroundColor(Color.parseColor("#80FF0000"));

KitKat 以降のバージョンでは、アプリを登録して通知を受け取る必要があります。 システム全体の字幕設定が更新されたとき。そのためには 実装 CaptioningManager.CaptioningChangeListener 実装し、以下を呼び出してこのリスナーを登録します。

Kotlin
CaptioningManager.addCaptioningChangeListener(yourChangeListener)
をご覧ください。 <ph type="x-smartling-placeholder">
</ph>
Java
CaptioningManager.addCaptioningChangeListener(yourChangeListener);

字幕設定が変更されたというコールバックをアプリが受信すると、 その後、新しい設定を抽出してテキストのスタイルを更新する必要があります。 を呼び出して、現在再生中のメディアのキャプションを RemoteMediaClient.setTextTrackStyle 新しいスタイルを渡します。

最新の状況を受け取る

複数の送信者が同じ受信機に接続されている場合、 各送信者は、受信者が変更された場合でも、その変更に気づくことができます 他の送信者から送信されました。

そのためには、アプリで RemoteMediaClient.Listener および RemoteMediaClient.ProgressListener

もし TextTrackStyle クリックすると、接続されているすべての送信者に通知されます 上記の両方の 登録済みのリスナーを介して行われますこの場合 レシーバー SDK は では、新しいスタイルが以前のスタイルと異なるかどうかは検証されず、 接続されているすべての送信者に通知されます。ただし、 アクティブなトラックの変更は、RemoteMediaClient.ProgressListener のみが対象 接続されている送信者に通知されます。

CORS の要件を満たす

アダプティブ メディア ストリーミングでは、Google Cast に CORS ヘッダー、ただし単純な mp4 メディア ストリームにトラックが含まれている場合は CORS が必要です。トラックを有効にして すべてのメディアについて、トラック ストリームとメディアの両方で CORS を有効にする必要があります 使用できます。単純な mp4 メディアで CORS ヘッダーを使用できない場合は、 単純な字幕トラックを追加しても、 使用するようにサーバーを更新しないと、メディアをストリーミングできません。 CORS ヘッダーです。また、少なくとも次のヘッダーを許可する必要があります。 Content-Type、Accept-Encoding、Range があります。最後の 2 つのヘッダーは、 追加ヘッダーを使用できます。