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

使用Google Cast在Android TV上加载视频失败求助

Google Cast投屏视频加载失败问题排查与修复

可能原因及对应解决方案

1. 视频URI无法被Cast设备访问

Cast设备是独立网络设备,无法直接读取Android本地文件(如file://或content://开头的URI),必须使用同一局域网内可访问的HTTP/HTTPS链接或公网HTTPS链接:

  • 若为本地视频文件:
    • 搭建本地HTTP服务器(如使用NanoHTTPD库),将文件映射为局域网内的HTTP地址
    • 确保Cast设备与Android设备处于同一Wi-Fi网络

2. Content-Type配置不精确

仅设置video/mp4可能无法让Cast设备识别编码格式,需补充明确的编码信息:

val mediaInfo = MediaInfo.Builder(uri.toString())
    .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
    // 明确指定兼容Cast的编码格式
    .setContentType("video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"")
    .setMetadata(metadata)
    .build()
  • avc1.42E01E为H.264基线编码,mp4a.40.2为AAC-LC音频编码,均为Cast设备广泛支持的格式

3. 明文流量限制(Android 9+)

若使用HTTP链接而非HTTPS,Android 9及以上系统默认禁止明文请求,需配置网络安全策略:

  • 在AndroidManifest.xml的<application>标签中添加:
    android:networkSecurityConfig="@xml/network_security_config"
    
  • 在res/xml目录创建network_security_config.xml:
    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">你的局域网服务器IP或域名</domain>
        </domain-config>
    </network-security-config>
    

4. 通过错误码定位具体问题

代码中已打印错误码,可根据对应值快速排查:

  • 7(INVALID_REQUEST):检查URI格式是否合法、MediaInfo参数是否完整
  • 10(NOT_FOUND):确认Cast设备能访问视频服务器,URI路径是否正确
  • 11(UNSUPPORTED_MEDIA_TYPE):验证视频编码是否为Cast支持的格式(优先H.264+AAC)
  • 15(NETWORK_ERROR):排查Cast设备与视频服务器之间的网络连通性

5. 补充:完善MediaInfo参数

添加视频时长可帮助Cast设备优化加载逻辑:

// 先获取视频时长(单位:毫秒)
private fun getVideoDuration(uri: Uri): Long {
    val retriever = MediaMetadataRetriever()
    retriever.setDataSource(requireContext(), uri)
    val durationStr = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)
    retriever.release()
    return durationStr?.toLong() ?: 0
}

// 构建MediaInfo时添加时长
val mediaInfo = MediaInfo.Builder(uri.toString())
    .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
    .setContentType("video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"")
    .setMetadata(metadata)
    .setStreamDuration(getVideoDuration(uri))
    .build()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:08:41