You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从ChromeCast接收端获取播放流元数据到安卓应用

ChromeCast安卓端获取直播流元数据实现方案

你的需求完全可实现,当前回调无法触发的核心原因是onApplicationMetadataChanged仅用于监听接收端应用本身的基础信息(比如应用名称、应用图标)变更,和播放流的内容元数据完全无关。

实现方案

方案1:标准MediaMetadata同步(通用场景)

如果使用官方Cast Application Framework(CAF)作为接收端,可直接通过媒体状态同步机制获取元数据:

  • 接收端侧:加载直播流时将元数据写入MediaInfo的metadata字段,若播放过程中元数据动态更新,主动调用playerManager.setMediaInformation()更新即可,SDK会自动同步给所有已连接的发送端。
  • 安卓发送端侧:注册RemoteMediaClient的状态回调监听元数据变更,示例代码如下:
// 获取当前会话的RemoteMediaClient实例
val remoteMediaClient = CastContext.getSharedInstance(context)
    .sessionManager
    .currentCastSession
    ?.remoteMediaClient

// 注册媒体状态回调
remoteMediaClient?.registerCallback(object : RemoteMediaClient.Callback() {
    override fun onStatusUpdated() {
        super.onStatusUpdated()
        val mediaMetadata = remoteMediaClient.mediaInfo?.metadata ?: return
        // 按需读取预设字段,也可以自定义字段存储特殊业务数据
        val streamTitle = mediaMetadata.getString(MediaMetadata.KEY_TITLE)
        val streamCover = mediaMetadata.images?.firstOrNull()?.url
        Log.d("CastMeta", "当前直播流标题:$streamTitle")
    }
}, Handler(Looper.getMainLooper()))

方案2:自定义消息通道同步(直播动态元数据场景)

如果直播元数据更新频率很高,或者需要传输非标准结构的元数据,可通过自定义消息通道实现:

  • 接收端侧:定义符合urn:x-cast:前缀规则的自定义命名空间,元数据变更时主动向所有连接的发送端推送消息。
  • 安卓发送端侧:监听对应命名空间的消息即可,示例代码如下:
// 和接收端保持一致的自定义命名空间
const val STREAM_META_NAMESPACE = "urn:x-cast:com.your.app.stream.metadata"

val currentSession = CastContext.getSharedInstance(context)
    .sessionManager.currentCastSession

// 注册自定义消息监听器
currentSession?.setMessageReceivedListener(STREAM_META_NAMESPACE) { _, message ->
    // message为接收端推送的JSON字符串,自行解析即可
    Log.d("CastCustomMeta", "收到直播元数据:$message")
}

注意事项

  • 注册的所有监听器需要在Cast会话销毁、页面退出时主动反注册,避免内存泄漏
  • 如果使用自定义开发的接收端,必须主动更新媒体元数据或推送自定义消息,Cast SDK不会自动抓取直播流内嵌的元数据同步给发送端
  • 自定义命名空间必须以urn:x-cast:为前缀,否则会被Cast SDK拦截无法正常传输

内容的提问来源于stack exchange,提问作者Tara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:18:03