2012-02-11 10 views
9

Tengo una aplicación en la que quiero capturar video usando Surfaceview y la almacené en mi propia carpeta creada, ¿es posible?Uso de surfaceView para capturar un video

Almacena la carpeta predeterminada de video solamente.

Gracias de andvace .....

Respuesta

5

Use este código

public class record extends Activity implements OnClickListener, SurfaceHolder.Callback{ 

MediaRecorder recorder; 
SurfaceHolder holder; 
boolean recording=false; 
public static final String TAG = "VIDEOCAPTURE"; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
    WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

    recorder = new MediaRecorder();// Instantiate our media recording object 
    initRecorder(); 
    setContentView(R.layout.view); 

    SurfaceView cameraView = (SurfaceView) findViewById(R.id.surface_view); 
    holder = cameraView.getHolder(); 
    holder.addCallback(this); 
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

    cameraView.setClickable(true);// make the surface view clickable 
    cameraView.setOnClickListener((OnClickListener) this);// onClicklistener to be called when the surface view is clicked 
} 

private void initRecorder() {// this takes care of all the mediarecorder settings 
    File OutputFile = new File(Environment.getExternalStorageDirectory().getPath()); 
    String video= "/DCIM/100MEDIA/Video"; 
    CamcorderProfile cpHigh = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH); 
    recorder.setProfile(cpHigh);   

    //recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
    // default microphone to be used for audio 
    // recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);// default camera to be used for video capture. 
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);// generally used also includes h264 and best for flash 
    // recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); //well known video codec used by many including for flash 
    //recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);// typically amr_nb is the only codec for mobile phones so... 

    //recorder.setVideoFrameRate(15);// typically 12-15 best for normal use. For 1080p usually 30fms is used. 
    // recorder.setVideoSize(720,480);// best size for resolution. 
    //recorder.setMaxFileSize(10000000); 
    recorder.setOutputFile(OutputFile.getAbsolutePath()+video+".3gp"); 
    //recorder.setVideoEncodingBitRate(256000);// 
    //recorder.setAudioEncodingBitRate(8000); 
    recorder.setMaxDuration(600000); 


} 

/*if(record.setMaxDuration>60000){ 

    recorder.stop(); 
    MediaRecorder.OnInfoListener; 
    Toast display = Toast.makeText(this, "You have exceeded the record time", Toast.LENGTH_SHORT);// toast shows a display of little sorts 
    display.show(); 
    return true; 
}*/ 

private void prepareRecorder() { 
    recorder.setPreviewDisplay(holder.getSurface()); 

    try { 
     recorder.prepare(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
     finish(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     finish(); 
    } 
} 

public void onClick(View v) { 
    if (recording) { 
     recorder.stop(); 
     recording = false; 

     // Let's initRecorder so we can record again 
     initRecorder(); 
     prepareRecorder(); 
     Toast display = Toast.makeText(this, "Stopped Recording", Toast.LENGTH_SHORT);// toast shows a display of little sorts 
     display.show(); 


    } else { 

     recorder.start(); 
     Log.v(TAG,"Recording Started"); 
     recording = true; 

    } 
} 

public void surfaceCreated(SurfaceHolder holder) { 
    initRecorder(); 
    Log.v(TAG,"surfaceCreated"); 
    prepareRecorder(); 
} 

public void surfaceChanged(SurfaceHolder holder, int format, int width, 
     int height) { 
} 

public void surfaceDestroyed(SurfaceHolder holder) { 
    if (recording) { 
     recorder.stop(); 
     recording = false; 
    } 
    recorder.release(); 
    finish(); 

} 

y no se olvide de dar permiso cámara

+0

Thnks pero da una fuerza de cierre de error tengo dar todos los permisos pero ....... fuerza cerca ... – pratik

+0

publique su log cat error – Sameer

+0

02-13 18: 22: 37.733: ERROR/AndroidRuntime (280): EXCEPCIÓN FATAL: principal 02-13 18: 22: 37.733: ERROR/AndroidRuntime (280): java.lang.RuntimeException: no se puede crear una instancia de ac tivity ComponentInfo {com.a.android/com.a.android.CompXMLActivity}: java.lang.ClassNotFoundException: com.a.android.CompXMLActivity en el cargador dalvik.system.PathClassLoader [/data/app/com.a.android- 1.apk] 02-13 18: 24: 22.174: WARN/ActivityManager (59): Actividad destruye tiempo de espera para HistoryRecord {44f6fbf0 com.a.android/.SurfacevideoActivity} – pratik

Cuestiones relacionadas