2012-03-11 13 views
6

यह वह कोड है जिसे मैं एमपी 4 प्रारूप में एंड्रॉइड डिवाइस से वीडियो रिकॉर्ड करने के लिए उपयोग करता था। फ़ाइल बनाई जा रही है लेकिन 0 बाइट आकार का है। मुझे समझ में नहीं आता कि क्या गलत हो गया है। किसी भी तरह की सहायता को आभार समझेंगे।एंड्रॉइड मीडियारेकोडर खाली फ़ाइल सहेजता है

   if(mCamera == null) { 
     mCamera = Camera.open(); 
     mCamera.unlock(); 
    } 

    if(mediaRecorder == null) 
     mediaRecorder = new MediaRecorder(); 


    mediaRecorder.setCamera(mCamera); 

    mediaRecorder.setCamera(mCamera); 
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 

    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 

    mediaRecorder.setMaxDuration(maxDurationInMs); 


    mediaRecorder.setOutputFile("/sdcard/1.mp4"); 

    mediaRecorder.setVideoFrameRate(videoFramesPerSecond); 
    mediaRecorder.setVideoSize(176,144); 

    mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
    mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); 

    mediaRecorder.setPreviewDisplay(surface); 

    mediaRecorder.setMaxFileSize(maxFileSizeInBytes); 

       mediaRecorder.prepare();   
    try { 
     mediaRecorder.prepare(); 
    } catch (IllegalStateException e) { 
     // This is thrown if the previous calls are not called with the 
     // proper order 
     e.printStackTrace(); 
    } 

      mediaRecorder.start(); 
+0

एक नज़र - http://stackoverflow.com/questions/10186503/camera-app- कुछ कारणों से getStorageDir() का पता नहीं लगाया जा रहा है/10187932 # 10187932 –

उत्तर

3

ठीक है तो मैं अंत में इसे अपने आप को लगा बाहर। मैंने यहां वर्णित विधि का उपयोग किया और यह ठीक से काम किया।

http://developer.android.com/guide/topics/media/camera.html#saving-media

+2

हाय, मुझे एक ही समस्या है। क्या आप कृपया मुझे कुछ विचार दें कि आपने इसे कैसे समझ लिया? – Saurabh

+3

नमस्ते कृपया अपना कोड पोस्ट करें जो आपकी समस्या हल करता है – Shalini

+1

हाँ कृपया इसे पोस्ट करें! – Lichtamberg

0
public static final String rootDir = getStorageDir().concat(yours_dir); 
... 
mediaRecorder.setOutputFile(rootDir); 
+0

। मैंने अंतिम स्ट्रिंग rootDir = Environment.getExternalStorageDirectory()। toString()। concat ("चित्र/i.mp4") का उपयोग करने का प्रयास किया; mediaRecorder.setOutputFile (rootDir); अभी भी काम नहीं करेगा। –

7

इस तरह के व्यवहार के लिए कारण यह है कि आप शायद (95% यकीन है कि) recorder.setOutputFile() फिर से कॉल के बाद आप अपने रिकॉर्डिंग (recorder.stop() शायद के बाद) समाप्त कर दिया है कर रहे हैं। इस प्रकार पुरानी फाइल को नई खाली फाइल द्वारा फिर से लिखा जा रहा है।

0

उपयोगकर्ता की अनुमति आप निर्धारित किया है क्या

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

नीचे कोड मेरे लिए काम किया:

private boolean isRecording = false; 

public static final int MEDIA_TYPE_IMAGE = 1; 
public static final int MEDIA_TYPE_VIDEO = 2; 

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

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

    mHolder = surfaceViewRecReadyTestimonial.getHolder(); 
    mHolder.addCallback(this); 
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
} 


public static Camera getCameraInstance() { 
    Camera c = null; 
    try { 
     c = Camera.open(); // attempt to get a Camera instance 
    } catch (Exception e) { 
     // Camera is not available (in use or does not exist) 
    } 
    return c; // returns null if camera is unavailable 
} 

private boolean prepareVideoRecorder() { 

    mCamera = getCameraInstance(); 
    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(surfaceViewRecReadyTestimonial.getHolder().getSurface()); 

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

@Override 
public void onClick(View v) { 

    if (v == btnStart) { 

      // initialize video camera 
      if (prepareVideoRecorder()) { 
       // Camera is available and unlocked, MediaRecorder is prepared, 
       // now you can start recording 
       mMediaRecorder.start(); 

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


     } else if (v == btnStop) { 

      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 
       isRecording = false; 
      } 

     } } 

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) { 
    // To be safe, you should check that the SDCard is mounted 
    // using Environment.getExternalStorageState() before doing this. 

    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
      Environment.DIRECTORY_DCIM), "FolderName"); 
    // This location works best if you want the created images to be shared 
    // between applications and persist after your app has been uninstalled. 

    // Create the storage directory if it does not exist 
    if (!mediaStorageDir.exists()) { 
     if (!mediaStorageDir.mkdirs()) { 
      Log.d("FolderName", "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_IMAGE) { 
     mediaFile = new File(mediaStorageDir.getPath() + File.separator + 
       "IMG_" + timeStamp + ".jpg"); 
    } else if (type == MEDIA_TYPE_VIDEO) { 
     mediaFile = new File(mediaStorageDir.getPath() + File.separator + 
       "VID_" + timeStamp + ".mp4"); 
    } else { 
     return null; 
    } 

    return mediaFile; 
} 

@Override 
protected void onPause() { 
    super.onPause(); 

    releaseMediaRecorder();  // if you are using MediaRecorder, release it first 
    releaseCamera();    // release the camera immediately on pause event 

} 

@Override 
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("RecordVideo", "Error setting camera preview: " + e.getMessage()); 
    } 
} 

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

    // 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 
    } 

    try { 
     Camera.Parameters parameters = mCamera.getParameters(); 

     Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); 

     if (display.getRotation() == Surface.ROTATION_0) { 
      parameters.setPreviewSize(height, width); 
      mCamera.setDisplayOrientation(90); 
     } 

     if (display.getRotation() == Surface.ROTATION_90) { 
      parameters.setPreviewSize(width, height); 
     } 

     if (display.getRotation() == Surface.ROTATION_180) { 
      parameters.setPreviewSize(height, width); 
     } 

     if (display.getRotation() == Surface.ROTATION_270) { 
      parameters.setPreviewSize(width, height); 
      mCamera.setDisplayOrientation(180); 
     } 

     if (mCamera != null) { 
      try { 
       mCamera.setPreviewDisplay(mHolder); 
       mCamera.startPreview(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    // 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(TAG, "Error starting camera preview: " + e.getMessage()); 
    } 

} 

@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 

} 
संबंधित मुद्दे