使用Chromecast SDK确定是否在Android接收器上启用了隐藏式字幕

问题描述 投票:0回答:1

我想确定我的接收器(CAF接收器)是否显示了字幕。这样,我就可以依靠接收者告诉发送方字幕已启用,而不是将隐藏字幕的先前状态保存在发送方上。是否有使用remoteMediaClient进行此操作的方法或方法?

android chromecast
1个回答
1
投票

我不确定您是指发送者还是接收者,但我会给你们两个:)

可以像这样在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()

编辑可以看到,当我从IDE复制代码时,我将两个功能混为一谈。有有效的ID和所有媒体轨道(包括音频,视频,文本)。 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
}
© www.soinside.com 2019 - 2024. All rights reserved.