android - 使用 Chromecast SDK 确定是否在接收器上为 android 启用了隐藏式字幕
问题描述
我希望能够确定我的接收器(CAF 接收器)是否显示了字幕。这样我就可以依靠接收者告诉发送者字幕已启用,而不是在发送者上保存隐藏字幕的先前状态。有没有使用 remoteMediaClient 的方法或方法?
解决方案
我不确定你是指发送者还是接收者,但我会给你两个:)
可以像这样在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 接收器 ( 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
}
推荐阅读
- php - 控制器连接问题
- sql - 如何识别数据中具有集群或块的记录?
- javascript - 有没有一种特定的方法可以降低动画速度而不会失去画布的完整性?
- c# - 当 PlayerClass 是时,如果语句中的 PlayerHealth 属性没有改变
- bash - 将任意数量的参数从变量传递给函数
- python - 无法在 Python 3.6.5 中的类本身中调用类的属性
- python - 基于用户选择进行事件评分的 Python 输入循环
- c++ - 如何从点 abd 获取矢量的坐标,它是方向角
- vb.net - 新手问题:想要调用一个 API url(使用 GET 方法)并处理我得到的答案
- python - 类和列表(自动售货机)