android MediaRecorder的简单应用-录像

之前用MediaRecorder类实现了简单的录音demo,它还有录像功能,如下是一个简单的录像实现过程,

实现步骤跟录音录音大致一样,在此温习一遍:

第一步:实例化对象:mRecord = new MediaRecorder();

第二步:设置输入源:

1、音频输入源:mRecord.setAudioSource(MediaRecorder.AudioSource.MIC);

2、视频输入源:mRecord.setVideoSource(MediaRecorder.VideoSource.CAMERA);

第三步:设置输出格式:mRecord.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

第四步:设置编码方式:

1、音频编码:mRecord.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

2、视频编码:mRecord.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);

第五步:设置音频写入的文件:mRecord.setOutFile(*);
第六步:准备:mRecord.prepare();
第七步:开始录像:mRecord.start();
第八步:停止录像:mRecord.stop(),然后再记得释放资源mRecord.release();

具体实现代码如下:

public class MyVideoRecordActivity extends Activity
{
	/** Called when the activity is first created. */
	MediaRecorder mRecord;
	SurfaceView sView;

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		initWidget();

	}

	private void initWidget()
	{
		// TODO Auto-generated method stub
		Button play = (Button) findViewById(R.id.start);
		play.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				// TODO Auto-generated method stub

				if (mRecord == null)
				{
					boolean result = startRecord();
					if (!result)
					{
						stopRecord();
					}
				}

			}
		});
		Button stop = (Button) findViewById(R.id.stop);
		stop.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				// TODO Auto-generated method stub
				stopRecord();
			}
		});
		
		sView = (SurfaceView) findViewById(R.id.surfaceView1);
		/*设置SurfaceView不需要自己维护缓冲区 */
		sView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
		/*设置视频分辨率 */
		sView.getHolder().setFixedSize(320, 240);
		/*设置不自动屏保 */
		sView.getHolder().setKeepScreenOn(true);

	}

	private void stopRecord()
	{
		if (mRecord != null)
		{
			mRecord.stop();
			mRecord.release();
			mRecord = null;
		}
	}

	private boolean startRecord()
	{
		/* 实例化对象 */
		mRecord = new MediaRecorder();
		/* 设置音频输入源 */
		mRecord.setAudioSource(MediaRecorder.AudioSource.MIC);
		/* 设置视频输入源 */
		mRecord.setVideoSource(MediaRecorder.VideoSource.CAMERA);
		/* 设置音频输出格式 */
		mRecord.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
		/* 设置音频编码方式 */
		mRecord.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
		/* 设置视频编码方式 */
		mRecord.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
//		mRecord.setVideoSize(320, 240);
//		mRecord.setVideoFrameRate(5);
		
		/* 设置音频写入的文件 */
		File file = createFile(".mp4");
		mRecord.setOutputFile(file.getAbsolutePath());		
		mRecord.setPreviewDisplay(sView.getHolder().getSurface());
//		mRecord.setOrientationHint(90);
		/* 准备录音频 */
		try
		{
			mRecord.prepare();
		}
		catch (IllegalStateException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		}
		catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		}
		/* 开始录像 */
		System.out.println("mRecord.start()");
		mRecord.start();
		return true;

	}

	/* 创建指定后缀名的文件 */
	private File createFile(String suffix)
	{
		if (!Environment.getExternalStorageState().equals(
				Environment.MEDIA_MOUNTED)) { return null; }
		File sdcardDir = Environment.getExternalStorageDirectory();
		Time t = new Time();
		t.setToNow();
		String filename = null;
		try
		{
			filename = sdcardDir.getCanonicalPath()
					+ String.format("/MediaRecordTest%04d%02d%02d%02d%02d%02d"
							+ suffix, t.year, t.month + 1, t.monthDay, t.hour,
							t.minute, t.second);
		}
		catch (IOException e)
		{
			e.printStackTrace();
			return null;
		}

		File file = new File(filename);
		if (!file.exists())
		{
			try
			{
				file.createNewFile();
			}
			catch (IOException e)
			{
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return file;
	}

	/* 创建底部退出菜单 */
	public boolean onCreateOptionsMenu(Menu menu)
	{
		super.onCreateOptionsMenu(menu);
		MenuItem item = menu.add(Menu.NONE, Menu.NONE, Menu.NONE, "Exit");
		item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener()
		{
			public boolean onMenuItemClick(MenuItem item)
			{
				stopRecord();
				System.exit(0);
				return true;
			}
		});
		return true;
	}
}

附上demo:




发布了105 篇原创文章 · 获赞 17 · 访问量 120万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览