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

React Native Track Player无法播放获取的Blob音频文件

React Native Track Player 无法播放Blob转URL的音频解决方案

核心问题:React Native里URL.createObjectURL生成的Blob URL是Web JS环境专属的临时内存地址,Track Player底层依赖原生播放器,无法识别这类Web环境资源,所以直接用Blob URL会播放失败。

下面提供两种可行的解决方法:

方法1:将Blob保存到本地文件后播放

把下载到的Blob写入设备本地沙盒,用本地文件路径作为音频源,原生播放器可以直接访问:

import * as FileSystem from 'expo-file-system'; // 也可使用react-native-fs替代
import TrackPlayer from 'react-native-track-player';

export const FetchGetFile = async () => {
  const res = await fetch('http://localhost:8080/downloadFile/9to5.mp3');
  const blob = await res.blob();
  
  // 将Blob转为Base64格式
  const base64Data = await new Promise((resolve) => {
    const reader = new FileReader();
    reader.readAsDataURL(blob);
    reader.onloadend = () => resolve(reader.result.split(',')[1]);
  });
  
  // 定义本地保存路径(沙盒目录下的文件)
  const localFileUri = `${FileSystem.documentDirectory}9to5.mp3`;
  
  // 写入本地文件
  await FileSystem.writeAsStringAsync(localFileUri, base64Data, {
    encoding: FileSystem.EncodingType.Base64,
  });
  
  // 添加到Track Player
  const track = {
    url: localFileUri,
    title: 'a',
    artist: 'b',
    duration: 166,
  };
  await TrackPlayer.add(track);
};

方法2:直接使用API地址并配置认证头(如果需要)

如果你的私有API只需要简单的认证(比如Token),可以直接把API地址作为音频源,同时给Track Player配置请求头,无需下载Blob:

import TrackPlayer from 'react-native-track-player';

// 初始化Player时配置全局请求头
TrackPlayer.setupPlayer().then(async () => {
  await TrackPlayer.updateOptions({
    // 其他配置项(如通知样式、播放控制等)
    headers: {
      Authorization: 'Bearer YOUR_AUTH_TOKEN', // 替换成你的认证Token
      // 其他需要的请求头
    },
  });
});

export const FetchGetFile = async () => {
  const track = {
    url: 'http://localhost:8080/downloadFile/9to5.mp3',
    title: 'a',
    artist: 'b',
    duration: 166,
  };
  await TrackPlayer.add(track);
};

补充说明

  • 方法1适合需要离线播放的场景,缺点是会占用设备存储;
  • 方法2更轻量化,适合在线播放的场景,前提是API支持直接被原生播放器请求(跨域、认证等问题已处理)。

内容的提问来源于stack exchange,提问作者Dean Campagnolo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:55:16