Android中VideoView播放Google Drive链接视频失败的问题求助
你的问题核心很明确:你用的是Google Drive的网页预览链接,而不是直接的视频资源链接,从错误日志里的text/html from getMIMEType()就能看出来——VideoView请求这个链接得到的是网页内容,不是它需要的视频媒体流,自然会报错“无法播放此视频”。下面是具体的解决步骤:
1. 转换Google Drive链接为可直接播放的格式
Google Drive默认的分享链接(https://drive.google.com/file/d/[FILE_ID]/view?usp=sharing)是网页预览地址,需要转换成直接指向视频文件的URL:
- 提取原链接中的
FILE_ID:你的链接里是1CRJ8tL-DyjD0Nwd7ezkboGm6570zMf4C - 替换成以下格式:
https://drive.google.com/uc?export=download&id=[FILE_ID]
修改后的Uri代码应该是:
Uri uri = Uri.parse("https://drive.google.com/uc?export=download&id=1CRJ8tL-DyjD0Nwd7ezkboGm6570zMf4C");
⚠️ 注意:你的Google Drive文件必须设置为**“公开可查看”**(分享权限改为“知道链接的任何人都可查看”),否则会返回权限错误,VideoView依然无法播放。
2. 修正网络安全配置
你的network-security-config只信任了diligent_app.com,但Google Drive的资源来自google.com和googleusercontent.com,需要把这些域名加入信任列表,否则会出现SSL验证失败的问题:
<network-security-config> <domain-config> <domain includeSubdomains="true">diligent_app.com</domain> <domain includeSubdomains="true">google.com</domain> <domain includeSubdomains="true">googleusercontent.com</domain> <trust-anchors> <certificates src="system"/> </trust-anchors> </domain-config> </network-security-config>
3. 验证链接有效性(可选但推荐)
在浏览器中打开修改后的链接,如果能直接下载视频,或者浏览器能在线播放,说明链接是有效的。你也可以用命令行工具(比如curl)查看返回的MIME类型:
curl -I https://drive.google.com/uc?export=download&id=1CRJ8tL-DyjD0Nwd7ezkboGm6570zMf4C
如果返回的Content-Type是video/mp4(或其他视频格式),说明链接没问题。
补充:大文件的特殊情况
如果你的视频文件较大(超过100MB),Google Drive可能会弹出安全验证页面,这时候上面的直接链接会返回网页内容。这种情况下,你可以:
- 尝试添加
&confirm=t参数到链接末尾:https://drive.google.com/uc?export=download&id=[FILE_ID]&confirm=t - 或者使用Google Drive API获取签名后的直接播放链接(适合需要处理私有文件或大文件的场景,不过需要额外的API配置)
最后,把修改后的Uri和修正的网络配置应用到你的项目中,应该就能正常播放视频了。
内容的提问来源于stack exchange,提问作者user15583048

