react-native-video v5.0.2 iOS本地视频无法播放问题求助
解决react-native-video在iOS端无法播放本地视频的问题
根据你的描述,Android端正常但iOS不行,核心问题大概率出在文件路径的处理逻辑上——iOS和Android对本地文件URI的要求有差异,再加上RNFS的路径规则需要特别注意。下面是一步步的解决方案:
1. 修正RNFS写入文件的路径(关键!)
你当前写入文件时给的路径带了file://前缀,但RNFS的writeFile方法接受的是原生文件系统路径,不是URI格式。iOS上RNFS.DocumentDirectoryPath已经是绝对路径(比如/var/mobile/Containers/Data/Application/xxx/Documents),加上file://会导致RNFS找不到正确的写入位置,文件实际没写到你预期的地方。
修正后的写入代码:
// 去掉file://前缀,直接用文件系统路径 const localFilePath = `${RNFS.DocumentDirectoryPath}/test.mp4`; RNFS.writeFile(localFilePath, base64.encode(content), 'base64') .then(success => { console.log('FILE WRITTEN', localFilePath); // 打印路径方便排查 // 写入成功后,把带file://的URI传给视频组件 this.setState({ fileUrl: `file://${localFilePath}` }); }) .catch(err => { console.log('File Write Error: ', err.message); });
2. 验证文件是否真的写入成功
在写入成功后,建议用RNFS的exists和stat方法确认文件存在且大小合理,排除写入失败的可能:
RNFS.exists(localFilePath) .then(exists => { if (exists) { return RNFS.stat(localFilePath); } throw new Error('File does not exist'); }) .then(statResult => { console.log('File size:', statResult.size); // 大小不为0才正常 }) .catch(err => { console.log('File check error:', err.message); });
3. 调整react-native-video的配置
iOS端播放本地文件时,除了正确的URI,还需要确保视频组件的配置符合要求:
- 确保source的uri是
file://开头的完整URI(上面已经在写入成功后生成了) - 添加
resolveAssetSource: false属性,避免react-native自动解析资源(因为这是本地文件,不是打包的资产) - 加上
onError回调排查播放错误:
<Video source={{ uri: this.state.fileUrl, resolveAssetSource: false }} onError={(error) => console.log('Video Play Error:', error)} // 其他配置(比如style、controls等) />
4. 检查iOS权限配置
如果你的App需要访问Documents目录,确保在Info.plist中添加了对应的权限描述(虽然RNFS写入默认允许,但系统限制时可能需要):
添加以下键值对到Info.plist:
<key>NSDocumentsFolderUsageDescription</key> <string>需要访问Documents目录存储视频文件</string>
5. 排除视频格式问题
虽然Android能播放,但iOS对视频编码的要求更严格,确保你的MP4文件是H.264编码、AAC音频的标准格式,如果是其他编码可能iOS无法解码。可以用工具(比如FFmpeg)转换格式验证。
按照上面的步骤调整后,iOS端应该能正常播放本地视频了。
内容的提问来源于stack exchange,提问作者david890ch
相关产品推荐
相关产品推荐

