Использование Chromecast SDK, чтобы определить, включены ли субтитры на приемнике для Android - PullRequest
0 голосов
/ 30 октября 2019

Я хотел бы иметь возможность определить, отображаются ли подписи на моем приемнике (приемнике CAF). Это будет сделано для того, чтобы я мог рассчитывать на то, что получатель сообщит отправителю, что подписи включены, а не сохранил предыдущее состояние скрытых подписей на отправителе. Есть ли способ или способ сделать это с помощью remoteMediaClient?

1 Ответ

1 голос
/ 31 октября 2019

Я не уверен, если вы имеете в виду отправителя или получателя, но я дам вам и то, и другое:)

Возможно получить его на Android примерно так:

  private val SUB_TITLE_TYPES = intArrayOf(MediaTrack.SUBTYPE_SUBTITLES, MediaTrack.SUBTYPE_CAPTIONS)

 fun getActiveMediaTracks(context: Context): LongArray =
    getRemoteMediaClient(context)?.mediaStatus?.activeTrackIds ?: longArrayOf()

 fun getSubtitleTracks(context: Context): List<MediaTrack> =
    getActiveMediaTracks(context).filter {
        it.type == MediaTrack.TYPE_TEXT && it.subtype in SUB_TITLE_TYPES
    }

илив Chromecast Receiver ( TextTracksManager )

cast.framework.CastReceiverContext.getInstance().getTextTracksManager().getActiveTracks()

EDIT : Можно увидеть, что я перепутал две функции, когда скопировал код из нашей IDE,Существуют активные идентификаторы и все медиа-треки (включая аудио, видео, тексты). Может быть разница между MediaTrack.SUBTYPE_SUBTITLES*, думаю, это зависит от потока.

Вот как найти активные текстовые дорожки

val remoteMediaClient = CastContext.getSharedInstance(context).sessionManager?.currentCastSession?.remoteMediaClient
remoteMediaClient?.mediaInfo?.mediaTracks?.filter {
  it.type == MediaTrack.TYPE_TEXT && it.subtype in SUB_TITLE_TYPES
}?.let { 
  textTracks -> 
  val activeTrackIds = remoteMediaClient.mediaStatus?.activeTrackIds?.filter { activeTrackId ->
     textTracks.none { track -> track.id == activeTrackId }
  }.toLongArray()
 activeTrackIds.size > 0
}
...