非Expo React Native应用当前推荐的音频录制方案咨询
非Expo React Native应用音频录制主流方案
针对你遇到的第三方包维护不佳、构建失败、功能异常等问题,推荐以下两个维护良好的主流解决方案:
1. expo-av(官方维护,支持Bare项目)
expo-av是Expo官方维护的多媒体库,完全兼容非Expo的Bare React Native项目,具备完善的文档和活跃的维护,同时支持音频录制、播放等全流程功能,跨iOS/Android表现稳定。
集成步骤:
- 安装依赖:
npm install expo-av # 或 yarn add expo-av - 原生配置:
- iOS:在
Info.plist中添加麦克风权限声明:
执行<key>NSMicrophoneUsageDescription</key> <string>需要访问麦克风以录制音频</string>cd ios && pod install完成依赖安装 - Android:在
AndroidManifest.xml中添加权限:<uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 可选,用于存储录制文件 -->
- iOS:在
- 基础录制示例:
import { Audio } from 'expo-av'; let activeRecording = null; const startAudioRecording = async () => { try { // 请求麦克风权限 await Audio.requestPermissionsAsync(); // 设置音频模式 await Audio.setAudioModeAsync({ allowsRecordingIOS: true, playsInSilentModeIOS: true, }); // 启动录制 const { recording } = await Audio.Recording.createAsync( Audio.RecordingOptionsPresets.HIGH_QUALITY ); activeRecording = recording; } catch (error) { console.error('录制启动失败:', error); } }; const stopAudioRecording = async () => { if (!activeRecording) return; await activeRecording.stopAndUnloadAsync(); const recordingUri = activeRecording.getURI(); console.log('录制完成,文件路径:', recordingUri); // 可直接用expo-av播放,或传递给其他组件处理 activeRecording = null; };
2. react-native-audio-recorder-player(修复配置后使用)
你之前遇到的iOS构建失败问题,大概率是配置遗漏导致的。这个包仍是社区使用较广的音频工具,维护状态稳定,若需使用可按以下要点修复:
iOS构建修复:
- 在项目
ios/Podfile的target 'YourAppName' do代码块内添加:pod 'RNRecord', :path => '../node_modules/react-native-audio-recorder-player' - 执行
cd ios && pod deintegrate && pod install清除旧缓存并重新安装依赖 - 确认
Info.plist已添加麦克风权限,若需后台录制需开启后台音频权限 - 确保Xcode为最新稳定版,项目iOS部署目标≥11.0
备选:原生模块封装
如果上述库无法满足定制化需求,可自行封装原生模块:
- iOS基于
AVAudioRecorder实现 - Android基于
MediaRecorder实现
该方式完全可控,但需要具备原生开发能力。
内容的提问来源于stack exchange,提问作者David Burson
相关产品推荐
相关产品推荐

