android媒体录制出现问题,在android媒体录制器中,surfaceview预览显示_android_开发99编程知识库...

我遇到了同樣的問題。 我查了一下這是我的Activity 。 我花了點時間使它不會崩潰,所以這裡有最後的結果。 它在用戶單擊REC按鈕之前顯示預覽。 ( 我也顯示了倒計時,但不要介意) 。 注意,在這個示例( 單擊時) 中,對主線程執行了太多的工作。 這裡有一些不是最佳實踐的事情,但是對於一個工作的例子,我覺得這足夠了。import android.app.Activity;

import android.hardware.Camera;

import android.media.CamcorderProfile;

import android.media.MediaRecorder;

import android.os.Bundle;

import android.os.CountDownTimer;

import android.os.Environment;

import android.util.Log;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

import java.io.File;

import java.io.IOException;

public class MainActivity extends Activity implements SurfaceHolder.Callback {

private static final String LOG_TAG = MainActivity.class.getCanonicalName();

Button myButton;

MediaRecorder mediaRecorder;

SurfaceHolder surfaceHolder;

boolean recording;

private TextView mTimer;

private Camera mCamera;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

recording = false;

mediaRecorder = new MediaRecorder();

mCamera = Camera.open();

initMediaRecorder();

SurfaceView myVideoView = (SurfaceView) findViewById(R.id.videoview);

surfaceHolder = myVideoView.getHolder();

surfaceHolder.addCallback(this);

myButton = (Button) findViewById(R.id.mybutton);

myButton.setOnClickListener(myButtonOnClickListener);

mTimer = (TextView) findViewById(R.id.timer);

}

private Button.OnClickListener myButtonOnClickListener

= new Button.OnClickListener() {

@Override

public void onClick(final View arg0) {

CountDownTimer countDownTimer = new CountDownTimer(90 * 1000, 1000) {

@Override

public void onTick(long millisUntilFinished) {

mTimer.setText(String.valueOf(millisUntilFinished/1000));

}

@Override

public void onFinish() {

onClick(arg0);

}

};

if (recording) {

//Stop recording and finish

try {

mediaRecorder.stop();

mediaRecorder.reset();

mediaRecorder.release();

finish();

} catch (Exception e) {

Log.e(LOG_TAG,"Failed to stop recorder", e);

}

} else {

//Release the camera and start recording

mCamera.release();

countDownTimer.start();

mediaRecorder.start();

recording = true;

myButton.setText("STOP");

}

}

};

@Override

public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {

}

@Override

public void surfaceCreated(SurfaceHolder holder) {

if (mCamera!= null) {

Camera.Parameters params = mCamera.getParameters();

mCamera.setParameters(params);

try {

mCamera.setPreviewDisplay(holder);

} catch (IOException e) {

e.printStackTrace();

}

mCamera.startPreview();

}

prepareMediaRecorder();

}

@Override

public void surfaceDestroyed(SurfaceHolder arg0) {

}

private void initMediaRecorder() {

mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);

mediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);

CamcorderProfile camcorderProfile_HQ = CamcorderProfile.get(CamcorderProfile.QUALITY_CIF);

mediaRecorder.setProfile(camcorderProfile_HQ);

File file = new File(getExternalFilesDir(Environment.DIRECTORY_MOVIES),"myvideo.mp4");

if (file.exists()) {

file.delete();

}

mediaRecorder.setOutputFile(file.getAbsolutePath());

mediaRecorder.setMaxDuration(90000);//Set max duration 90 sec.

mediaRecorder.setMaxFileSize(15000000);//Set max file size 15M

}

private void prepareMediaRecorder() {

mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface());

try {

mediaRecorder.prepare();

} catch (IllegalStateException | IOException e) {

Log.e(LOG_TAG,"Failed to prepare recorder", e);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值