首页 > 代码库 > 录音视频
录音视频
录音需要用到MediaRecorder,先用它录制音频,保存到本地文件;之后用MediaPlayer 传递路径进行播放
首先在onCreate中生成保存音频的文件夹 (也要判断有没有sd卡)
String dir=Environment.getExternalStorageDirectory()+ "/"+getPackageName()+"/Audio"; File file=new File(dir); if (!file.exists()){ file.mkdirs(); }
开始录音
4 音频来源
5 输出格式
6 音频编码
7 输出文件
1 void record() { 2 path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" +getPackageName() + "/Audio/" + System.currentTimeMillis() + ".amr"; 3 recorder = new MediaRecorder(); 4 recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 5 recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); 6 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 7 recorder.setOutputFile(path); 8 try { 9 recorder.prepare();10 recorder.start();11 } catch (IOException e) {12 e.printStackTrace();13 }14 }
停止录音
void stoprecord(){ if (recorder!=null){ recorder.stop(); recorder.reset(); recorder.release(); recorder=null; } }
点击开始录音后,最好把录音按钮设置成不能点击,等结束录音再开启
查看官方文档,发现在api24 也就是 android 7.0 中加入了 暂停和恢复 pause() resume(),所以以前的版本是没有官方的录制暂停和恢复的,网上有合成文件的方法
播放音频 setDataSource可以是本地路径 也可以是网络链接
void play(){ player=new MediaPlayer(); try { player.setDataSource(path); player.prepare(); player.start(); } catch (IOException e) { e.printStackTrace(); } }
停止播放
void stopplay(){ if (player!=null){ player.stop(); player.release(); player=null; } }
暂停 用pause() 恢复方法 就是 start()
视频录制 需要画面来显示
这里用 SurfaceView
首先初始化
1 和10 都是 设置录制视频的分辨率 ,可以只设置一边,此时两边都设置了,最后录制出来的还是 320*240的视频
7 8 设置视频来源 音频来源
9 设置输出格式
11 视频的帧率
12 13 设置视频音频编码
14 很重要 让视频显示到view上
1 surfaceView.getHolder().setFixedSize(176, 144); 2 surfaceView.getHolder().setKeepScreenOn(true); 3 surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() { 4 @Override 5 public void surfaceCreated(SurfaceHolder surfaceHolder) { 6 recorder = new MediaRecorder(); 7 recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 8 recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 9 recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);10 recorder.setVideoSize(320, 240);11 recorder.setVideoFrameRate(5);12 recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);13 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);14 recorder.setPreviewDisplay(surfaceHolder.getSurface());15 }16 17 @Override18 public void surfaceChanged(SurfaceHolder surfaceHolder, int format,int width,int height) {19 20 }21 22 @Override23 public void surfaceDestroyed(SurfaceHolder surfaceHolder) {24 if (recorder!=null){25 recorder.release();26 }27 28 }29 });
录制视频
void record(){ path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" +getPackageName() + "/video/" + System.currentTimeMillis() + ".mp4"; recorder.setOutputFile(path); try { recorder.prepare(); recorder.start(); } catch (IOException e) { e.printStackTrace(); }catch (IllegalStateException e) { e.printStackTrace(); } }
停止录制
void btn_stoprecord(){ if (recorder!=null){ try { recorder.setOnErrorListener(null); recorder.setPreviewDisplay(null); recorder.stop(); recorder.release(); recorder=null; }catch (IllegalStateException e){ e.printStackTrace(); }catch (RuntimeException e){ e.printStackTrace(); } } }
播放
void play(View view){ player = new MediaPlayer(); try { player.setDataSource(path); player.setDisplay(surfaceView.getHolder()); player.prepare(); player.start(); } catch (IOException e) { e.printStackTrace(); } }
其他部分和音频差不多
另一种播放视频的方式 VideoView
感觉和webview 差不多
给他setVideoPath 就能指定视频地址
然后设置一个 MediaController 就能控制视频播放了
录音视频
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。