【发布时间】:2018-07-12 23:03:31
【问题描述】:
我正在使用 expo,我正在尝试使用 webm 输出格式 (Expo.Audio.RECORDING_OPTION_ANDROID_OUTPUT_FORMAT_WEBM) 在 android 上录制。我的问题是我尝试了所有不同的编码器,但它们似乎都不起作用。我期待 vorbis 编码器能够工作(Expo.Audio.RECORDING_OPTION_ANDROID_AUDIO_ENCODER_VORBIS),但我总是得到一个异常
{
"tryLoc": "root",
"completion": {
"type": "throw",
"arg": {
"framesToPop": 1,
"code": "E_AUDIO_RECORDING",
"message": "Start encountered an error: recording not started",
"stack": "Error: Start encountered an error: recording not started\n at createErrorFromErrorData (blob:http://172.16.6.80:19001/96c6e3c7-f483-40d9-a3ad-7a7114468a07:2297:17)\n at blob:http://172.16.6.80:19001/96c6e3c7-f483-40d9-a3ad-7a7114468a07:2249:27\n at MessageQueue.__invokeCallback (blob:http://172.16.6.80:19001/96c6e3c7-f483-40d9-a3ad-7a7114468a07:2691:18)\n at blob:http://172.16.6.80:19001/96c6e3c7-f483-40d9-a3ad-7a7114468a07:2436:18\n at MessageQueue.__guardSafe (blob:http://172.16.6.80:19001/96c6e3c7-f483-40d9-a3ad-7a7114468a07:2604:11)\n at MessageQueue.invokeCallbackAndReturnFlushedQueue (blob:http://172.16.6.80:19001/96c6e3c7-f483-40d9-a3ad-7a7114468a07:2435:14)\n at http://172.16.6.80:19001/debugger-ui/debuggerWorker.js:72:58"
}
}
}
这是我正在尝试的配置:
const recording = new Audio.Recording();
debugger;
await recording.prepareToRecordAsync({
android: {
extension: '.webm',
outputFormat: Audio.RECORDING_OPTION_ANDROID_OUTPUT_FORMAT_WEBM,
audioEncoder: Audio.RECORDING_OPTION_ANDROID_AUDIO_ENCODER_VORBIS,
sampleRate: 44100,
numberOfChannels: 2,
bitRate: 128000
},
ios: {
extension: '.wav',
audioQuality: Audio.RECORDING_OPTION_IOS_AUDIO_QUALITY_MAX,
sampleRate: 44100,
numberOfChannels: 2,
bitRate: 128000,
linearPCMBitDepth: 16,
linearPCMIsBigEndian: false,
linearPCMIsFloat: false,
},
});
关于为什么会发生这种情况以及我必须使用什么合适的编码器有什么想法吗?
【问题讨论】:
-
您在尝试录制之前是否征得了许可?
const { status } = await Expo.Permissions.askAsync(Expo.Permissions.AUDIO_RECORDING);如果用户授权录音,则 conststatus的值为granted。 -
@shimatai - 是的,我要求适当的权限。我可以使用
outputFormat: Audio.RECORDING_OPTION_ANDROID_OUTPUT_FORMAT_AAC_ADTS和audioEncoder: Audio.RECORDING_OPTION_ANDROID_AUDIO_ENCODER_AAC进行录制,但理想情况下我希望使用 webm。 -
你有没有让这个工作?我的观察是,当我在我的代码中复制 HIGH 质量定义(使用修改后的名称)然后引用本地定义时,它会被忽略并且低质量记录,3gp vs m4a,结果。
-
@FitterMan 据我所知,我找不到适合我的东西。我最终创建了一个后端服务,发送我从 ios 和 android 获得的任何内容,并使用 AWS 转码对其进行转码。这并不理想,但可以满足我们的需求。
标签: android audio react-native audio-recording expo