2012-04-08 51 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()); 
. 
.