如何录制手机音频输出?尝试react-native-audio-record仅支持麦克风输入
React Native 录制系统音频流解决方案
你提到的react-native-audio-record确实仅支持麦克风输入,要录制手机系统音频流(比如播放的音乐、视频声音等),需要针对iOS和Android分别处理:
Android 端实现
Android 5.0(API 21)及以上支持通过MediaProjection API录制系统音频,步骤如下:
- 在
AndroidManifest.xml中添加RECORD_AUDIO权限,同时动态请求MediaProjection的屏幕录制权限(系统会弹出授权弹窗) - 配置
MediaRecorder的音频源为MediaRecorder.AudioSource.REMOTE_SUBMIX,这个源专门用于捕获系统输出的音频 - 可以封装原生模块,或使用第三方库简化开发,核心逻辑是启动
MediaProjection会话后绑定MediaRecorder开始录制
示例原生代码片段(Kotlin):
val mediaProjectionManager = getSystemService(MEDIA_PROJECTION_SERVICE) as MediaProjectionManager val intent = mediaProjectionManager.createScreenCaptureIntent() startActivityForResult(intent, REQUEST_CODE) // 在onActivityResult中获取MediaProjection实例后 val mediaRecorder = MediaRecorder().apply { setAudioSource(MediaRecorder.AudioSource.REMOTE_SUBMIX) setOutputFormat(MediaRecorder.OutputFormat.MPEG_4) setAudioEncoder(MediaRecorder.AudioEncoder.AAC) setOutputFile(outputFilePath) prepare() } val virtualDisplay = mediaProjection.createVirtualDisplay( "AudioCapture", 1, 1, resources.displayMetrics.densityDpi, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUDIO_ONLY, mediaRecorder.surface, null, null ) mediaRecorder.start()
iOS 端实现
iOS 11及以上可以通过ReplayKit框架录制系统音频,或用AVAudioEngine捕获App内部的音频输出:
- 使用ReplayKit:
RPScreenRecorder支持录制系统音频,只需配置关闭麦克风即可,需要先请求录制权限 - 若仅需捕获App自身播放的音频,可通过
AVAudioEngine添加节点捕获输出音频流
示例原生代码片段(Swift):
import ReplayKit if RPScreenRecorder.shared().isAvailable { RPScreenRecorder.shared().requestRecordingPermission { granted in guard granted else { return } RPScreenRecorder.shared().startRecording( microphoneEnabled: false, // 关闭麦克风,仅录制系统音频 handler: { error in // 处理启动错误 } ) } } // 停止录制 RPScreenRecorder.shared().stopRecording { previewViewController, error in // 获取并处理录制文件 }
跨平台开发建议
目前没有完全成熟的跨平台React Native库直接支持系统音频录制,推荐针对两端分别封装原生模块,或选用维护状态较好的平台专属第三方库快速实现。
内容的提问来源于stack exchange,提问作者spiralCorp.
相关产品推荐
相关产品推荐

