Android_音视频录制功能
import java.io.File; import java.io.IOException; import android.app.Activity; import android.media.MediaRecorder; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity { private static final String TAG = "MainActivity"; private SurfaceView surfaceView; private MediaRecorder mediaRecorder; private boolean recording; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mediaRecorder = new MediaRecorder(); surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView); // 设置分辨率 surfaceView.getHolder().setFixedSize(176, 144); // 设置surface不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前 surfaceView.getHolder() .setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); Button recordBtn = (Button) this.findViewById(R.id.record); Button stopBtn = (Button) this.findViewById(R.id.stop); ButtonClickListener listener = new ButtonClickListener(); recordBtn.setOnClickListener(listener); stopBtn.setOnClickListener(listener); } @Override protected void onDestroy() { super.onDestroy(); mediaRecorder.release(); } private final class ButtonClickListener implements OnClickListener { @Override public void onClick(View v) { try { switch (v.getId()) { case R.id.record: if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { Toast.makeText(MainActivity.this, R.string.sdcarderror, Toast.LENGTH_LONG).show(); return; } File vedioFile = new File(Environment .getExternalStorageDirectory(), System .currentTimeMillis() + ".3gp"); mediaRecorder.reset(); // 从麦克风采集音频 mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 从照相机采集视频 mediaRecorder .setVideoSource(MediaRecorder.VideoSource.CAMERA); // 设置输出文件格式 mediaRecorder .setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); // 设置视频大小 mediaRecorder.setVideoSize(320, 240); // 设置每秒采集3帧 mediaRecorder.setVideoFrameRate(3); // 设置音频编码方式 mediaRecorder .setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); // 设置视频编码方式 mediaRecorder .setVideoEncoder(MediaRecorder.VideoEncoder.H263); mediaRecorder.setOutputFile(vedioFile.getAbsolutePath()); mediaRecorder.setPreviewDisplay(surfaceView.getHolder() .getSurface()); // 预期准备 mediaRecorder.prepare(); // 开始刻录 mediaRecorder.start(); recording = true; break; case R.id.stop: if (recording) { mediaRecorder.stop(); recording = false; } break; default: break; } } catch (IOException e) { Toast.makeText(MainActivity.this, R.string.error, Toast.LENGTH_LONG).show(); Log.e(TAG, e.toString()); } } } }
***万事万物都有裂痕,那是光照进来的地方***

浙公网安备 33010602011771号