使用 Chromecast SDK 确定接收器上是否为 android 启用了隐藏式字幕
Using Chromecast SDK to determine if closed captions are enabled on the receiver for 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
}
我希望能够确定我的接收器(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
}