Android 录屏、录音与合成

来源:互联网 发布:最后的圣地 淘宝 编辑:程序博客网 时间:2024/04/28 01:51

最近做的项目需要实现这一功能。顺便记录了下来。。。

1、录音,非常简单,用到了MediaRecorder这个类。需要用到的权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  
    <uses-permission android:name="android.permission.RECORD_AUDIO" /> 

录音代码:

MediaRecorder recorder = new MediaRecorder();

//设置音频来源
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);

//设置音频输出格式
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

//设置录音编码格式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);

//设置输出文件名
recorder.setOutputFile(fileName);

//录制开始

recorder.prepare();
recorder.start();

别忘了结束录音时释放资源:

recorder.stop();
recorder.release();
recorder = null;


2、录屏,方法网上也有很多,我这只是其中一种,是谷歌Android5.0版本时候发放了现在的这个接口android.media.projection.MediaProjection。使用该接口,第三方应用程序无需获取系统root权限也可以直接进行屏幕截图操作了。

录屏代码:

//首先获取一个MediaProjectionManager实例

mediaProjectionManager = (MediaProjectionManager) getSystemService(MEDIA_PROJECTION_SERVICE);

//利用MediaProjectionManager类实例的功能函数createScreenCaptureIntent()生成intent,为接下来的的抓取屏幕做准备,使用startActivityForResult()启动屏幕捕捉

Intent captureIntent = mediaProjectionManager.createScreenCaptureIntent();
startActivityForResult(captureIntent, REQUEST_CODE);

//在onActivityResult()中获取返回值,结果在 getMediaProjection()上,获取捕捉到的屏幕数据

@SuppressWarnings("deprecation")
@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
MediaProjection mediaProjection = mediaProjectionManager.getMediaProjection(resultCode, data);
if (mediaProjection == null) {
return;
}else{

........视频编码,封装想要的格式

File file = new File(Environment.getExternalStorageDirectory(),videoFileName);
final int bitrate = 6000000;
screenRecorder = new ScreenRecorder(width, height, bitrate, 1,mediaProjection, file.getAbsolutePath());
screenRecorder.start();
moveTaskToBack(true);

}

ScreenRecorder这个类是处理获取的屏幕信息的,如编码,格式装换等。

3、现在已经拿到了音频和视频了,下面就是合成一个视频文件

视频合成代码:需要用到isoparser.jar,和aspectjrt.jar俩个jar包

Movie countVideo = MovieCreator.build(videoFileName);              
 Movie countAudioEnglish = MovieCreator.build(audio
FileName);  
  Track audioTrackEnglish = countAudioEnglish.getTracks().get(0);  
     countVideo.addTrack(audioTrackEnglish);  
       {  
           Container out = new DefaultMp4Builder().build(countVideo);  
           FileOutputStream fos = new FileOutputStream(new File(
videoName));  
           out.writeContainer(fos.getChannel());  
           fos.close();  
       }


附上demo链接http://download.csdn.net/detail/wxwxxc/9728348

如有问题,敬请指正!

1 0
原创粉丝点击