[Android(安卓)N]MediaRecorder系列之初识mediaRecorder
16lz
2021-01-25
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地址上来。
更多相关文章
- Android(安卓)情景模式设置
- Android(安卓)EditView输入内容格式验证
- Android中的音频播放(MediaPlayer和SoundPool)
- Android中如何把bitmap存成BMP格式的图片
- Android(安卓)App中使用AudioManager类来编写音频播放器
- androidの获取天气预报JSON 实现
- Android(安卓)ImageView 不显示JPEG图片 及 Android(安卓)Studio
- Android硬件编解码与软件编解码
- android项目 从eclipse导入Android(安卓)Studio过程问题披露