2012-04-08 52 views
1

我是一名學生,在做我的Android應用程序任務。我遇到了一個我無法解決的問題。請給我一些建議,thx。 我想要有一個視頻錄製的活動,並且我已經完成了使用此代碼。 Video recording with media recorder 這裏是我的代碼,它做工精細的其他手機,但它並沒有在MOTO-RAZR 做工精細這裏有兩個視頻通過HTC渴望和MOTO RAZR服用。 願望:http://youtu.be/suPF9Hk6iYk RAZR:http://youtu.be/wLvH7SXdcIs 任何一個可以幫助我解決我的問題?moto-razr記錄器問題

package video.pac; 

import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.content.pm.ActivityInfo; 
import android.media.MediaRecorder; 
import android.os.Bundle; 
import android.os.CountDownTimer; 
import android.view.Display; 
import android.view.Surface; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import android.view.Window; 
import android.view.WindowManager; 
public class video extends Activity{ 

private MediaRecorder recorder; 
private Preview mPreview; 

boolean flag=false; 
boolean startedRecording=false; 
boolean stoppedRecording=false; 
boolean key = false; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
     WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 

    recorder = new MediaRecorder(); 
    recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    recorder.setVideoSize(640,480); 
    recorder.setVideoFrameRate(20); 
    recorder.setVideoEncodingBitRate(3000000); 
    recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
    //recorder.setMaxDuration(5000); 
    mPreview = new Preview(video.this,recorder); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    setContentView(mPreview); 

} 

private CountDownTimer mCountDownTimer = new CountDownTimer(9000, 1000) { 

    public void onTick(long millisUntilFinished) {} 

    public void onFinish() { 

     recorder = null; 
     System.out.println("stop"); 
     video.this.finish(); 
    } 
}; 

class stopThread implements Runnable { 
    public void run() { 

      try { 
       mCountDownTimer.start(); 
       Thread.sleep(100);  
      } catch (InterruptedException e) { 
       Thread.currentThread().interrupt(); 
      } 

    } 
} 


class Preview extends SurfaceView implements SurfaceHolder.Callback{ 
    //Create objects for MediaRecorder and SurfaceHolder. 
    SurfaceHolder mHolder; 
    MediaRecorder tempRecorder; 

    public Preview(Context context,MediaRecorder recorder) { 
    super(context); 
    tempRecorder=recorder; 
    mHolder=getHolder(); 
    mHolder.addCallback(this); 
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    // TODO Auto-generated constructor stub 
    } 

    public Surface getSurface(){ 
    return mHolder.getSurface(); 
    } 

    public void surfaceCreated(SurfaceHolder holder){ 

    tempRecorder.setOutputFile("/sdcard/test" + ".3gpp"); 
    tempRecorder.setPreviewDisplay(mHolder.getSurface()); 
    try{ 
     tempRecorder.prepare(); 
     recorder.start(); 
    new Thread(new stopThread()).start(); 

     System.out.println("start"); 
    } catch (Exception e) { 
     tempRecorder.release(); 
     tempRecorder = null; 
    } 
    } 

    public void surfaceDestroyed(SurfaceHolder holder) { 
    if(tempRecorder!=null){ 
     tempRecorder.stop(); 
     tempRecorder.release(); 
     tempRecorder = null; 
     System.out.println("release"); 
    } 
    } 

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {} 
} 
} 

回答

0

我認爲這個問題是一個安全問題:

您需要設置記錄預覽,否則有些設備會認爲這是一個安全漏洞,用於捕獲視頻,而無需在屏幕上顯示您的捕獲/預覽。嘗試添加到您的記錄器設置:

. 
. 
recorder.setPreviewDisplay(mHolder.getSurface()); 
. 
.