您的位置:首页 > 其它

多媒体 录制视频

2017-11-10 17:11 260 查看
多媒体 录制视频

MeidaRecorder除了可用录制音频之外,还可用于录制视频。使用MeidaRecorder录制视频与录制音频的步骤基本相同。只是录制视频是不仅需要采集声音,还需要采集图像。为了让MediaRecorder录制时采集图像,应该在调用setAudioSource(int audio_source)方法是在调用setVideoSource(int video_source)方法来设置图像来源。除此之外,还需要调用setOutputFormat设置输出文件格式之后,在进行如下步骤:

1. 调用MediaRecorder对象的setVideoEncoder(),setVideoEncodingBitRate(int bitRate) ,setVideoFrameRate 设置所录制的视频的编码格式,编码位率,每秒多少帧等,这些参数将可以控制录制视频的品质,文件大小。

2.调用MeidaRecorder的setPreviewDisplay(SurfaceView sv)方法设置使用哪个SurfaceView来显示预览 。

package com.example.recordview;

import java.io.File;

import java.io.IOException;

import android.support.v7.app.ActionBarActivity;

import android.hardware.Camera;

import android.media.CamcorderProfile;

import android.media.MediaRecorder;

import android.os.Build;

import android.os.Bundle;

import android.os.Environment;

import android.provider.MediaStore.Audio.Media;

import android.view.Menu;

import android.view.MenuItem;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.ImageButton;

import android.widget.Toast;

public class MainActivity extends ActionBarActivity implements OnClickListener {

// button

ImageButton record, stop;

// system audio file

File videoFile;

MediaRecorder mRecorder;

SurfaceView sView;

private boolean isRecording = false ;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

record = (ImageButton) findViewById(R.id.record);

stop = (ImageButton) findViewById(R.id.stop);

stop.setEnabled(false);

record.setOnClickListener(this);

stop.setOnClickListener(this);

sView = (SurfaceView)this.findViewById(R.id.surfaceView1);

sView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

sView.getHolder().setFixedSize(720, 1280);

sView.getHolder().setKeepScreenOn(true);

}

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

try {

if (isRecording) {

mRecorder.stop();

mRecorder.release();

mRecorder = null;

isRecording = false ;

}

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

super.onDestroy();

}

@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;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

// Handle action bar item clicks here. The action bar will

// automatically handle clicks on the Home/Up button, so long

// as you specify a parent activity in AndroidManifest.xml.

int id = item.getItemId();

if (id == R.id.action_settings) {

return true;

}

return super.onOptionsItemSelected(item);

}

public void recordSound() {

try {

if (!Environment.getExternalStorageState().equals(

android.os.Environment.MEDIA_MOUNTED)) {

Toast.makeText(this,

"sdcard is not insert! pls insert in !", 5000)

.show();

return;

}

try {

videoFile = new File(Environment

.getExternalStorageDirectory().getCanonicalFile()

+ "/sound666.amr");

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

mRecorder = new MediaRecorder();

mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);

mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);

mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

mRecorder.setOutputFile(videoFile.getAbsolutePath());

try {

mRecorder.prepare();

} catch (IllegalStateException e) {
<
d7e5
div style="white-space:pre-wrap;text-indent:28px;line-height:1.75;font-size:14px;">
// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

mRecorder.start();

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

}

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

switch (v.getId()) {

case R.id.record:

if(false){

recordSound();

}else{

try {

if (!Environment.getExternalStorageState().equals(

android.os.Environment.MEDIA_MOUNTED)) {

Toast.makeText(this,

"sdcard is not insert! pls insert in !", 5000)

.show();

return;

}

try {

videoFile = new File(Environment

.getExternalStorageDirectory().getCanonicalFile()

+ "/myvideo.mp4");

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

mRecorder = new MediaRecorder();

//mRecorder.reset();

Camera camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);

if (camera != null) {

camera.setDisplayOrientation(90);

camera.unlock();

mRecorder.setCamera(camera);

}

mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);

mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);

mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);

mRecorder.setVideoSize(1280, 720);

mRecorder.setVideoFrameRate(4);

mRecorder.setOutputFile(videoFile.getAbsolutePath());

mRecorder.setPreviewDisplay(sView.getHolder().getSurface());

mRecorder.prepare();

record.setEnabled(false);

stop.setEnabled(true);

isRecording = true;

mRecorder.start();

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

}

break;

case R.id.stop:

if(false){

try {

if (videoFile != null && videoFile.exists()) {

mRecorder.stop();

mRecorder.release();

mRecorder = null;

}

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

}else

{

try {

if (isRecording) {

isRecording = false ;

mRecorder.stop();

mRecorder.release();

mRecorder = null;

record.setEnabled(true);

stop.setEnabled(false);

}

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

}

break;

default:

break;

}

}

}

红色区域出错容易导致 : E/MediaRecorder(9203): start failed: -19,如果出错,可能考虑去除尝试下 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: