如何使用react-native-video读取Android Asset文件夹中的视频?
解决react-native-video读取Android Asset文件夹视频的问题
正确的Asset路径写法
你之前尝试的路径格式有误,Android Asset的标准写法应该是:
source={{ uri: 'asset:///test.mp4' }}
注意是三个斜杠,这是react-native-video对Android Asset资源的官方规范路径。
验证前提条件
- 确认视频文件
test.mp4确实放在Android项目的src/main/assets目录下,文件名区分大小写,不要包含空格或特殊字符。 - 建议使用
react-native-video的稳定新版本,旧版本可能存在Asset路径解析的兼容性bug。
备选方案:复制Asset到缓存目录播放
如果直接使用Asset路径仍无法播放,可能是部分Android设备或旧版本库不支持直接读取Asset资源,可通过将Asset文件复制到应用缓存目录再播放:
- 安装文件操作库:
npm install react-native-fs --save
- 实现复制与播放逻辑:
import Video from 'react-native-video'; import RNFS from 'react-native-fs'; import { useEffect, useState } from 'react'; function AssetVideoPlayer() { const [videoUri, setVideoUri] = useState(null); useEffect(() => { const prepareVideo = async () => { const assetFileName = 'test.mp4'; const cacheFilePath = `${RNFS.CachesDirectoryPath}/${assetFileName}`; // 缓存存在则直接使用,否则从Asset复制 if (!(await RNFS.exists(cacheFilePath))) { await RNFS.copyFileAssets(assetFileName, cacheFilePath); } setVideoUri(`file://${cacheFilePath}`); }; prepareVideo(); }, []); if (!videoUri) return <div>加载中...</div>; return ( <Video source={{ uri: videoUri }} style={{ width: '100%', height: 200 }} controls={true} /> ); } export default AssetVideoPlayer;
额外检查项
- 确保
react-native-video已正确集成:RN0.60+版本会自动链接,旧版本需手动执行链接命令。 - 检查Android项目
build.gradle配置,确保sourceSets.main.assets.srcDirs包含src/main/assets目录(默认已配置,若自定义路径需调整)。
内容的提问来源于stack exchange,提问作者Joe199382
相关产品推荐
相关产品推荐

