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

Android Java:Media3 ExoPlayer无法播放YouTube直播URL问题排查

解决ExoPlayer播放YouTube直播流的UnrecognizedInputFormatException问题

核心问题分析

你遇到的错误本质是ExoPlayer找不到能解析YouTube直播流的提取器,根源大概率是流格式不匹配或者缺少对应解码模块依赖——YouTube直播流基本是HLS或DASH自适应流,不是普通MP4文件,硬指定MimeTypes.VIDEO_MP4会直接导致解析失败。

具体修复步骤

  • 移除硬编码的MIME类型,让ExoPlayer自动检测
    删掉setMimeType(MimeTypes.VIDEO_MP4),也可根据实际流格式手动指定正确类型:

    MediaItem mediaItem = new MediaItem.Builder()
            .setUri(mediaUri)
            // 若确定是HLS流,可指定:.setMimeType(MimeTypes.APPLICATION_M3U8)
            // 若确定是DASH流,可指定:.setMimeType(MimeTypes.APPLICATION_DASH_XML)
            .setLiveConfiguration(new MediaItem.LiveConfiguration.Builder().setMaxPlaybackSpeed(1.02f).build())
            .build();
    
  • 添加HLS/DASH解码模块依赖
    在Module级别的build.gradle中添加Media3对应的自适应流模块,没有这些模块ExoPlayer无法解析HLS/DASH流:

    implementation "androidx.media3:media3-exoplayer-hls:1.3.1"
    implementation "androidx.media3:media3-exoplayer-dash:1.3.1"
    // 基础模块若未添加需补上:
    implementation "androidx.media3:media3-exoplayer:1.3.1"
    implementation "androidx.media3:media3-ui:1.3.1"
    
  • 配置HttpDataSource支持跨协议重定向
    YouTube直播流URL可能存在跨协议跳转(如http转https),开启重定向支持避免解析失败:

    DefaultHttpDataSource.Factory httpDataSourceFactory = new DefaultHttpDataSource.Factory()
            .setAllowCrossProtocolRedirects(true);
    
    exoPlayer = new ExoPlayer.Builder(getApplicationContext())
            .setMediaSourceFactory(new DefaultMediaSourceFactory(httpDataSourceFactory).setLiveTargetOffsetMs(5000))
            .setHandleAudioBecomingNoisy(true)
            .setWakeMode(WAKE_MODE_LOCAL)
            .setTrackSelector(new DefaultTrackSelector(this))
            .setBandwidthMeter(new DefaultBandwidthMeter.Builder(this).build())
            .setLivePlaybackSpeedControl(new DefaultLivePlaybackSpeedControl.Builder().setFallbackMaxPlaybackSpeed(1.04f).build())
            .build();
    
  • 确认直播URL的有效性
    确保使用的是实际媒体流URL,而非YouTube直播的网页URL(如https://www.youtube.com/watch?v=xxx)。网页URL是HTML页面而非媒体流,需通过YouTube Data API获取直播的实际流地址,或使用合法的嵌入流链接。

内容的提问来源于stack exchange,提问作者Viraj S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 05:16:09