在我的 Ionic 2 应用程序中。我制作了一个录制音频并上传到服务器的功能。我使用过MediaPlugin,它可以很好地记录,但是当上传并在服务器上打开它时,文件无法收听。我认为这是因为类型。那么,如何将媒体插件转换为正确的base64文件以进行上传。
用于录制的服务类
import { Injectable } from '@angular/core';
import { MediaPlugin } from 'ionic-native';
export enum AudioRecorderState {
Ready,
Recording,
Recorded
}
@Injectable()
export class AudioRecorder {
mediaPlugin: MediaPlugin = null;
state: AudioRecorderState = AudioRecorderState.Ready;
getMediaPlugin(){
return this.mediaPlugin;
}
preparedRecord(){
this.mediaPlugin = new MediaPlugin('audio.mp3');
}
startRecording() {
this.mediaPlugin.startRecord();
this.state = AudioRecorderState.Recording;
}
stopRecording() {
this.mediaPlugin.stopRecord();
this.state = AudioRecorderState.Ready;
}
}
页面类中调用开始录制和停止录制的函数
startRecording() {
try {
this.audioRecorder.preparedRecord();
this.audioRecorder.startRecording();
}
catch (e) {
this.showAlert('Failed');
}
}
stopRecording() {
try {
this.audioRecorder.stopRecording();
const media = this.audioRecorder.getMediaPlugin();
this.base64Audio = "data:audio/mp3;base64," + media
//Use base64Audio to Upload to Server...
}
catch (e) {
this.showAlert('Could not stop recording.');
}
}
真正的问题是,MediaPlugin
不会创建mp3
,这只是一种外观。所以你可以使用 wav
,asd
或任何东西,MediaPlugin
会正确播放。但是,此插件会创建一个扩展名为aac
(在android 3gp
上(的文件。所以你不能在服务器上播放,因为这认为文件是一个mp3
但事实并非如此。当我尝试使用 html5 audio
播放它时,我遇到了以下问题。
我不知道你的服务器是如何工作的,但如果像html5 audio
那么你应该将你的文件转换为支持的扩展名(mp3
,ogg
,wav
(,或者你应该使用另一个插件。