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

Android Java中ExoPlayer如何添加Referer请求头播放视频

ExoPlayer 配置Referer请求头播放防盗链HLS流方案

核心需求

  • 播放目标HLS流:https://reels2watch.com/hls/s1.m3u8
  • 资源防盗链规则:请求必须携带值为http://nbajunkie.xyz/jp1/的Referer请求头才可正常访问
  • 目标:将Referer配置逻辑集成到现有ExoPlayer业务代码中

修改方法

不需要改动现有播放器的其他业务逻辑,只需要在初始化HTTP数据源工厂的位置加一行请求头配置即可,步骤如下:

  • 找到代码中创建DefaultHttpDataSource.Factory实例的位置
  • 在实例创建完成后、生成HlsMediaSource之前,调用设置请求头的方法传入要求的Referer值
  • 保持后续播放器初始化、prepare、播放的逻辑不变即可

代码示例

修改前的典型无防盗链实现

// 原有未配置请求头的代码
ExoPlayer player = new ExoPlayer.Builder(context).build();
DefaultHttpDataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory();
HlsMediaSource hlsMediaSource = new HlsMediaSource.Factory(dataSourceFactory)
        .createMediaSource(MediaItem.fromUri("https://reels2watch.com/hls/s1.m3u8"));
player.setMediaSource(hlsMediaSource);
player.prepare();
player.play();

修改后的可用实现

// 新增Referer配置后的代码
ExoPlayer player = new ExoPlayer.Builder(context).build();
DefaultHttpDataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory();
// 新增以下单行业务逻辑,配置防盗链要求的Referer头
dataSourceFactory.getDefaultRequestProperties().set("Referer", "http://nbajunkie.xyz/jp1/");

HlsMediaSource hlsMediaSource = new HlsMediaSource.Factory(dataSourceFactory)
        .createMediaSource(MediaItem.fromUri("https://reels2watch.com/hls/s1.m3u8"));
player.setMediaSource(hlsMediaSource);
player.prepare();
player.play();

避坑说明

  • Referer值必须和要求完全一致,末尾的/不能省略,否则会触发防盗链拦截
  • 如果你使用的是2.16以下版本的ExoPlayer,将代码中的ExoPlayer替换为SimpleExoPlayer即可,请求头配置逻辑完全兼容
  • 该配置对m3u8索引请求、分片ts请求都会生效,不需要单独给每个分片设置请求头

内容的提问来源于stack exchange,提问作者Nadeem Ahmad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 05:06:30