android MediaPlayer录音amr文件,上传到服务器进行转码mp3
android MediaPlayer录音amr文件,上传到服务器进行转码mp3
android MediaPlayer录音amr文件,上传到服务器进行转码mp3
最近在搞android的录音功能,业务需求是MUI写的移动端用android打包,本来是想用H5+环境去实现录音、上传文件等扩展的api,但是项目上需要对移动端项目里面的js进行修改,但领导不允许动移动端的代码,所以只能放弃咯!改用原生android的录音功能,然后保存在服务器进行转码为mp3的文件,然后再网页上播放!本来使用的是AudioRecord录音但是出来的格式只能是wav、pcm这些,转码失败,,,所以只能求助于MediaPlayer将录音的格式保存在amr的,总之头都大了!!!!下面贴一下具体代码!
创建并实例化MediaPlayer对象,设置一些相关属性
private void createMediaRecord(String name){ /* ①Initial:实例化MediaRecorder对象 */ mMediaRecorder = new MediaRecorder(); /* setAudioSource/setVedioSource*/ mMediaRecorder.setAudioSource(AudioFileFunc.AUDIO_INPUT);//设置麦克风 /* 设置输出文件的格式:THREE_GPP/MPEG-4/RAW_AMR/Default * THREE_GPP(3gp格式,H263视频/ARM音频编码)、MPEG-4、RAW_AMR(只支持音频且音频编码要求为AMR_NB) */ mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); /* 设置音频文件的编码:AAC/AMR_NB/AMR_MB/Default */ mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); /* 设置输出文件的路径 */ File file = new File(AudioFileFunc.getAMRFilePath(name)); if (file.exists()) { file.delete(); } mMediaRecorder.setOutputFile(AudioFileFunc.getAMRFilePath(name)); }
这里注意 android6.0以上需要动态配置权限,否则设置麦克风等会报错,贴一下设置权限代码
if(ContextCompat.checkSelfPermission(this, WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED|| ContextCompat.checkSelfPermission(this, RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(MainActivity.this, new String[]{WRITE_EXTERNAL_STORAGE, RECORD_AUDIO}, 001); }
获取到权限之后进行录音什么的
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if(requestCode == 001) { if(grantResults[0] == PackageManager.PERMISSION_GRANTED &&grantResults[1] == PackageManager.PERMISSION_GRANTED) { audioName = getAudioNameByTime(); mRecord_2.startRecordAndFile(audioName); } else { Toast.makeText(MainActivity.this, "您未获取到权限...", Toast.LENGTH_LONG).show(); } } }
录音的具体实现
public void startMediaPlay(String mFileName){ try { /* 重置多媒体 */ mediaPlayer.reset(); /* 读取mp3文件 */ mediaPlayer.setDataSource(mFileName); /* 准备播放 */ mediaPlayer.prepare(); /* 开始播放 */ mediaPlayer.start(); /* 是否单曲循环 */ mediaPlayer.setLooping(false); mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {//录音完成之后自动结束掉 @Override public void onCompletion(MediaPlayer mp) { mediaPlayer.stop(); MainActivity.flagPlay=0; } }); } catch (IOException e) { e.printStackTrace(); } } public void pauseMediaPlay(){ if (!mediaPlayer.isPlaying()) {// 正在播放 mediaPlayer.pause();// 暂停 } else {// 没有播放 mediaPlayer.start(); } } public void stopMediaPlay(){ if (mediaPlayer != null && !mediaPlayer.isPlaying()) { mediaPlayer.stop(); } }
最后将文件上传到服务器进行转码,,,amr------>mp3,source要转的文件,desFileName转完之后的文件
public static File execute(File source, String desFileName) throws Exception { File target = new File(desFileName); AudioAttributes audio = new AudioAttributes(); audio.setCodec("libmp3lame"); audio.setBitRate(new Integer(36000)); //音频比率 MP3默认是1280000 audio.setChannels(new Integer(2)); audio.setSamplingRate(new Integer(44100)); EncodingAttributes attrs = new EncodingAttributes(); attrs.setFormat("mp3"); attrs.setAudioAttributes(audio); Encoder encoder = new Encoder(); encoder.encode(source, target, attrs); return target; }
将文件返回到网页之后放入到<audio id=”playWebAudio” controls=”controls” src=”………”></audio>进行播放即可