视频刻录的简单实现

本代码可能在不用的平台上会存在一些问题。。

但是主要方法还是一样的


1、main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
     >

    <SurfaceView android:id="@+id/surfaceview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
         />
    
    <LinearLayout android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        >
        
        <Button android:id="@+id/bt_start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="开始"
        android:onClick="start"
        android:layout_marginRight="10dp"/>
        <Button android:id="@+id/bt_stop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="停止"
        android:onClick="stop"
        android:enabled="false"
        android:layout_marginRight="10dp"/>
    </LinearLayout>

</RelativeLayout>


2、MainActivity

package com.njupt.vediorecorder;

import java.io.File;

import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.view.Menu;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {

	private SurfaceView surfaceview;
	private MediaRecorder mr;
    private Button bt_start;
    private Button bt_stop;
    
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		surfaceview = (SurfaceView) findViewById(R.id.surfaceview);
		bt_start = (Button) findViewById(R.id.bt_start);
		bt_stop = (Button) findViewById(R.id.bt_stop);
		
		SurfaceHolder holder = surfaceview.getHolder();
		holder.setFixedSize(176, 144);
		holder.setKeepScreenOn(true);
		holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

	}

	public void start(View v) {

		try {
			mr = new MediaRecorder();
			mr.reset();
			mr.setAudioSource(MediaRecorder.AudioSource.MIC);
			mr.setVideoSource(MediaRecorder.VideoSource.CAMERA);
			mr.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
			mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
			mr.setVideoEncoder(MediaRecorder.VideoEncoder.H264);

			File file = new File(Environment.getExternalStorageDirectory(),
					System.currentTimeMillis() + ".3gp");
			mr.setOutputFile(file.getAbsolutePath());

			mr.setPreviewDisplay(surfaceview.getHolder().getSurface());
			mr.prepare();
			
			bt_start.setEnabled(false);
			bt_stop.setEnabled(true);
			mr.start();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void stop(View v){
		mr.stop();
		
		bt_start.setEnabled(true);
		bt_stop.setEnabled(false);
		mr.release();
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}


3、AndroidManifest.xml

注册权限

 <uses-permission android:name="android.permission.RECORD_AUDIO"/>//媒体刻录
    <uses-permission android:name="android.permission.CAMERA"/>//拍照
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>//以下两个是读写SD卡
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    


横屏显示

 android:screenOrientation="landscape"


原文地址:https://www.cnblogs.com/riskyer/p/3329105.html