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

使用Media3-ExoPlayer播放OneDrive MP3时遇UnrecognizedInputFormatException问题

解决Media3-ExoPlayer无法播放OneDrive MP3文件的问题

错误原因分析

你遇到的UnrecognizedInputFormatException本质原因是:你使用的OneDrive分享链接并非直接的MP3文件URL。这个链接指向的是OneDrive的分享网页,ExoPlayer请求该链接后获取到的是HTML页面内容,而非音频流,导致所有提取器都无法识别格式。

解决方案

1. 获取OneDrive文件的直接下载URL

OneDrive默认的分享链接是网页跳转地址,需要转换成直接指向文件的URL:

  • 手动获取方式:打开你的OneDrive分享链接,点击页面上的「下载」按钮,在浏览器的「开发者工具-网络」面板中,找到MP3文件的请求URL(通常是带有download参数或直接以.mp3结尾的链接),复制这个真实的文件URL。
  • 链接转换方式:将原分享链接进行格式转换,生成OneDrive API的直接下载链接:
    1. 把原链接(如https://1drv.ms/u/s!AinVIRl3CTeehK4nagw3kE9u9ArztA?e=Cvd4v3)转换为https://api.onedrive.com/v1.0/shares/u! + URL安全的Base64编码(去掉末尾=) + /root/content
      例如,对原链接进行URL安全Base64编码后,最终链接格式类似:
    https://api.onedrive.com/v1.0/shares/u!aHR0cHM6Ly8xZHJ2Lm1zL3UvcyFBaW5WSVJsM0NUZWVoSzRuYWd3M2tFOXVhTXJ6Vj9lPUN2ZDR2Mw/root/content
    

2. 修改代码使用真实文件URL

将你的代码中的audioURL替换为获取到的直接下载链接即可:

audioURL = "这里替换成真实的MP3直接下载URL";

Uri audioUri = Uri.parse(audioURL);

exoPlayer = new ExoPlayer.Builder(this).build();
exoPlayerView = findViewById(R.id.mediaPlayer);
exoPlayerView.setPlayer(exoPlayer);

MediaItem mediaItem = MediaItem.fromUri(audioUri);
exoPlayer.setMediaItem(mediaItem);
exoPlayer.prepare();
exoPlayer.play();

补充说明

你之前尝试切换不同的MediaSource无效,是因为问题根源不在播放源的类型,而在于请求的URL本身不是音频文件流。只要获取到正确的直接下载链接,使用基础的MediaItem就能正常播放。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:34:57