使用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的直接下载链接:
- 把原链接(如
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
相关产品推荐
相关产品推荐

