MediaRecorder简介

mediaRecorder是android系统中可以用于录制视频,音频的模块。可以通过java和cpp去调用到相关的api,从而去录制到本地文件里面。如果你有整个android 的源码,甚至可以做定制。让framework通过广播把encode好的数据上报。这样可以做实时流的传送。

mediaRecorder的使用还有一个好处就是兼容性强,从4.3就有这个东西。虽然后面google有出了一个mediaProjection用于录制屏幕内容,但是这个底层框架没有像mediaRecorder这么灵活。

MediaRecorder的使用

mediaRecorder的使用很简单,如下。NDK和java的写法类似,都如下面所示。

这个是录制video的写法:

// 创建保存录制视频的视频文件   videoFile = new File(Environment       .getExternalStorageDirectory()       .getCanonicalFile() + "/testvideo.3gp");   // 创建MediaPlayer对象   mRecorder = new MediaRecorder();   mRecorder.reset();   // 设置从麦克风采集声音(或来自录像机的声音AudioSource.CAMCORDER)   mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);   // 设置从摄像头采集图像   mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);   // 设置视频文件的输出格式   // 必须在设置声音编码格式、图像编码格式之前设置   mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);   // 设置声音编码的格式   mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);   // 设置图像编码的格式   mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);   mRecorder.setVideoSize(1280, 720);   // 每秒 4帧   mRecorder.setVideoFrameRate(20);   mRecorder.setOutputFile(videoFile.getAbsolutePath());   // 指定使用SurfaceView来预览视频   mRecorder.setPreviewDisplay(sView.getHolder().getSurface());  //①   mRecorder.prepare();   // 开始录制   mRecorder.start(); 

这个录制audio的写法

   // 创建保存录音的音频文件     soundFile = new File(Environment           .getExternalStorageDirectory().getCanonicalFile()         + "/sound.amr");     mRecorder = new MediaRecorder();     // 设置录音的声音来源     mRecorder.setAudioSource(MediaRecorder         .AudioSource.MIC);     // 设置录制的声音的输出格式(必须在设置声音编码格式之前设置)     mRecorder.setOutputFormat(MediaRecorder         .OutputFormat.AMR_NB);     // 设置声音编码的格式     mRecorder.setAudioEncoder(MediaRecorder         .AudioEncoder.AMR_NB);     mRecorder.setOutputFile(soundFile.getAbsolutePath());     mRecorder.prepare();     // 开始录音     mRecorder.start();  //① 

但是mediaRecorder有个比较麻烦的地方是,他是的数据回调是写到一个file里面的,而不是一个buffer里面。这样的话,要做实时流的话,需要把socketfile传给他。然后通过socket实时去发送。但是没有上传buffer这种方式,来得灵活。

但是如果是android原厂,有android源码,我们可以做一下定制,修改底层的framework,让底层回报buffer地址上来。

更多相关文章

  1. Android(安卓)情景模式设置
  2. Android(安卓)EditView输入内容格式验证
  3. Android中的音频播放(MediaPlayer和SoundPool)
  4. Android中如何把bitmap存成BMP格式的图片
  5. Android(安卓)App中使用AudioManager类来编写音频播放器
  6. androidの获取天气预报JSON 实现
  7. Android(安卓)ImageView 不显示JPEG图片 及 Android(安卓)Studio
  8. Android硬件编解码与软件编解码
  9. android项目 从eclipse导入Android(安卓)Studio过程问题披露

随机推荐

  1. android Home事件汇总
  2. Sensor传感器源码的阅读与应用开发简单实
  3. Android的三种监听方式
  4. Android Location的使用!!
  5. React-Native 项目打包(iOS/Android)
  6. Android数据解析-----解析json数据
  7. Android 简单实现贪吃蛇源码
  8. Android之ViewPager与Fragment
  9. android lifecycle库监听app生命周期 app
  10. listView背景问题以及限制editText字数以