使用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
相关产品推荐
相关产品推荐

