2016-07-30 8 views
0

Ich möchte die Videoaufnahme von der Kamera starten, wenn ich auf lyte klicke und die Aufnahme stoppe, wenn ich sie erneut anklicke. Dieser Code macht "myVideo.mp4" Datei aber es ist nicht spielbar. auch ich möchte keine Vorschau anzeigen. kann mir jemand helfen?Video ohne Vorschau aufnehmen

Aktivität Main:

public class ActivityMain extends Activity { 

MediaRecorder rec; 
static Camera camera; 
boolean  isRecording = false; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    LinearLayout lyt = (LinearLayout) findViewById(R.id.lyt); 

    rec = new MediaRecorder(); 

    lyt.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 

      if (isRecording) { 
       // stop recording and release camera 
       Log.e("TEST", "befor stop"); 
       rec.stop(); // stop the recording 
       Log.e("TEST", "stop"); 
       releaseMediaRecorder(); // release the MediaRecorder object 
       camera.lock(); // take camera access back from MediaRecorder 

       // inform the user that recording has stopped 
       isRecording = false; 
      } else { 
       // initialize video camera 
       if (prepareVideoRecorder()) { 
        // Camera is available and unlocked, MediaRecorder is prepared, 
        // now you can start recording 
        Log.e("TEST", "befor start"); 
        rec.start(); 
        Log.e("TEST", "start"); 

        // inform the user that recording has started 
        isRecording = true; 
       } else { 
        // prepare didn't work, release the camera 
        releaseMediaRecorder(); 
        // inform user 
       } 
      } 

     } 
    }); 

    // Intent intent = new Intent(ActivityMain.this, VideoCapture.class); 
    // startActivity(intent); 
} 


private void releaseMediaRecorder() { 

    if (rec != null) { 
     // rec.reset(); // clear recorder configuration 
     rec.release(); // release the recorder object 
     rec = null; 
     camera.lock(); // lock camera for later use 
     Log.e("TEST", "released"); 
    } 
} 


/** A safe way to get an instance of the Camera object. */ 
public static Camera getCameraInstance() { 
    Camera c = null; 
    try { 
     c = Camera.open(); // attempt to get a Camera instance 
    } 
    catch (Exception e) { 
     Log.e("TEST", "Camera is not avalable : " + e); 
    } 
    return c; // returns null if camera is unavailable 
} 


private boolean prepareVideoRecorder() { 

    camera = getCameraInstance(); 
    rec = new MediaRecorder(); 

    // Step 1: Unlock and set camera to MediaRecorder 
    camera.unlock(); 
    rec.setCamera(camera); 

    // Step 2: Set sources 
    rec.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); 
    rec.setVideoSource(MediaRecorder.VideoSource.CAMERA); 

    // Step 3: Set a CamcorderProfile (requires API Level 8 or higher) 
    rec.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); 

    // Step 4: Set output file 
    rec.setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath().toString() + "/" + "myVideo.mp4"); 

    // Step 6: Prepare configured MediaRecorder 
    try { 
     rec.prepare(); 
    } 
    catch (IllegalStateException e) { 
     Log.e("TEST", "IllegalStateException preparing MediaRecorder: " + e.getMessage()); 
     releaseMediaRecorder(); 
     return false; 
    } 
    catch (IOException e) { 
     Log.e("TEST", "IOException preparing MediaRecorder: " + e.getMessage()); 
     releaseMediaRecorder(); 
     return false; 
    } 
    return true; 
} 

}

+0

bezogen werden: http://stackoverflow.com/questions/1252172/android -how-initialize-mediarecorder-ohne-gültige-oberfläche-für-video-previ – muratgu

Antwort

1

diesen Code Versuchen. Es funktioniert gut. Eine Vorschau wird angezeigt, aber Sie können sie nicht sehen. Wenn Sie eine Anleitung zum Aufzeichnen von Videos ohne Aktivität finden, schreiben Sie bitte hier. Ich versuche das zu tun.

Manifest.xml

<uses-permission android:name="android.permission.CAMERA"/> 
<uses-permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT"/> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

    <activity 
     android:name=".CameraActivity" 
     android:screenOrientation="landscape"> 
     <intent-filter> 
      <category android:name="android.intent.category.LAUNCHER"/> 
      <action android:name="android.intent.action.MAIN"/> 
     </intent-filter> 
    </activity> 

CameraActivity.java

public class CameraActivity extends Activity { 

    public static final int MEDIA_TYPE_VIDEO = 2; 
    private boolean isRecording = false; 
    private Camera mCamera; 
    private SurfaceView mPreview; 
    private MediaRecorder mMediaRecorder; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_camera); 

     // Create an instance of Camera 
     mCamera = getCameraInstance(); 

     // Create our Preview view and set it as the content of our activity. 
     mPreview = new CameraPreview(this, mCamera); 
     FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview); 
     preview.addView(mPreview); 
    } 

    public void onLinearClick(View v) { 
     if (isRecording) { 
      // stop recording and release camera 
      mMediaRecorder.stop(); // stop the recording 
      releaseMediaRecorder(); // release the MediaRecorder object 
      mCamera.lock();   // take camera access back from MediaRecorder 

      // inform the user that recording has stopped 
      //       setCaptureButtonText("Capture"); 
      isRecording = false; 
     } else { 
      // initialize video camera 
      if (prepareVideoRecorder()) { 
       // Camera is available and unlocked, MediaRecorder is prepared, 
       // now you can start recording 

       try { 
        mMediaRecorder.start(); 

        // inform the user that recording has started 
        //        setCaptureButtonText("Stop"); 
        isRecording = true; 

       } catch (IllegalStateException e) { 
        e.printStackTrace(); 
       } 

      } else { 
       // prepare didn't work, release the camera 
       releaseMediaRecorder(); 
       // inform user 
      } 
     } 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     releaseMediaRecorder();  // if you are using MediaRecorder, release it first 
     releaseCamera();    // release the camera immediately on pause event 
    } 

    private void releaseMediaRecorder(){ 
     if (mMediaRecorder != null) { 
      mMediaRecorder.reset(); // clear recorder configuration 
      mMediaRecorder.release(); // release the recorder object 
      mMediaRecorder = null; 
      mCamera.lock();   // lock camera for later use 
     } 
    } 

    private void releaseCamera(){ 
     if (mCamera != null){ 
      mCamera.release();  // release the camera for other applications 
      mCamera = null; 
     } 
    } 

    /** Create a File for saving an image or video */ 
    private static File getOutputMediaFile(int type){ 
      File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "MyCameraApp"); 

     // Create the storage directory if it does not exist 
     if (! mediaStorageDir.exists()){ 
      if (! mediaStorageDir.mkdirs()){ 
       Log.d("MyCameraApp", "failed to create directory"); 
       return null; 
      } 
     } 

     // Create a media file name 
     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
     File mediaFile; 
     if(type == MEDIA_TYPE_VIDEO) { 
      mediaFile = new File(mediaStorageDir.getPath() + File.separator + 
        "VID_"+ timeStamp + ".mp4"); 
     } else { 
      return null; 
     } 

     return mediaFile; 
    } 


    private boolean prepareVideoRecorder(){ 
mMediaRecorder = new MediaRecorder(); 

     // Step 1: Unlock and set camera to MediaRecorder 
     mCamera.unlock(); 
     mMediaRecorder.setCamera(mCamera); 

     // Step 2: Set sources 
     mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); 
     mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 

     // Step 3: Set a CamcorderProfile (requires API Level 8 or higher) 
     mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); 

     // Step 4: Set output file 
     mMediaRecorder.setOutputFile(getOutputMediaFile(MEDIA_TYPE_VIDEO).toString()); 

     // Step 5: Set the preview output 
     mMediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface()); 

     // Step 6: Prepare configured MediaRecorder 
     try { 
      mMediaRecorder.prepare(); 
     } catch (IllegalStateException e) { 
      Log.d("", "IllegalStateException preparing MediaRecorder: " + e.getMessage()); 
      releaseMediaRecorder(); 
      return false; 
     } catch (IOException e) { 
      Log.d("", "IOException preparing MediaRecorder: " + e.getMessage()); 
      releaseMediaRecorder(); 
      return false; 
     } 
     return true; 
    } 

    private static Camera getCameraInstance(){ 
     Camera c = null; 
     try { 
      c = Camera.open(); 
     } catch (Exception e){ 
      e.printStackTrace(); 
      // Camera is not available (in use or does not exist) 
     }return c; // returns null if camera is unavailable 
    } 

    /** A basic Camera preview class */ 
    public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback { 
     private SurfaceHolder mHolder; 
     private Camera mCamera; 

     public CameraPreview(Context context, Camera camera) { 
      super(context); 
      mCamera = camera; 

      // Install a SurfaceHolder.Callback so we get notified when the 
      // underlying surface is created and destroyed. 
      mHolder = getHolder(); 
      mHolder.addCallback(this); 
      // deprecated setting, but required on Android versions prior to 3.0 
      mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
     } 

     public void surfaceCreated(SurfaceHolder holder) { 
      // The Surface has been created, now tell the camera where to draw the preview. 
      try { 
       mCamera.setPreviewDisplay(holder); 
       mCamera.startPreview(); 
      } catch (IOException e) { 
       Log.d("", "Error setting camera preview: " + e.getMessage()); 
      } 
     } 

     public void surfaceDestroyed(SurfaceHolder holder) { 
      // empty. Take care of releasing the Camera preview in your activity. 
     } 

     public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 
      // If your preview can change or rotate, take care of those events here. 
      // Make sure to stop the preview before resizing or reformatting it. 

      if (mHolder.getSurface() == null){ 
       // preview surface does not exist 
       return; 
      } 

      // stop preview before making changes 
      try { 
       mCamera.stopPreview(); 
      } catch (Exception e){ 
       // ignore: tried to stop a non-existent preview 
      } 

      // set preview size and make any resize, rotate or 
      // reformatting changes here 

      // start preview with new settings 
      try { 
       mCamera.setPreviewDisplay(mHolder); 
       mCamera.startPreview(); 

      } catch (Exception e){ 
       Log.d("", "Error starting camera preview: " + e.getMessage()); 
      } 
     } 
    } 
} 

activity_camera.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:onClick="onLinearClick"> 
    <FrameLayout 
     android:id="@+id/camera_preview" 
     android:layout_width="1dp" 
     android:layout_height="1dp"/> 
</LinearLayout> 
Verwandte Themen