उत्तर

6

आप सेटऑडियो * पर कॉल किए बिना MediaRecorder का उपयोग कर सकते हैं। यह मेरा पहला MediaRecorder उपयोग कर रहा है, लेकिन इस उदाहरण काम करने के लिए लगता है:

  • setVideoSize(int, int);
  • setVideoFrameRate(int);
+1

धन्यवाद! यह सचमुच काम करता है! शायद आप जानते हैं कि CamcorderProfile के साथ इस सेटिंग्स को कैसे लागू करें? चूंकि मैं स्वचालित रूप से जेनरेट किए गए पैरा का उपयोग कर रहा हूं 'camcorderProfile = CamcorderProfile.get (कैमकॉर्डरप्रोफाइल.क्वैलिटी_एचआईवाई);', तो सभी सेटिंग्स को 'mediaRecorder.setProfile (camcorderProfile) के रूप में लागू किया जाता है; ' – Sergii

+0

क्या आप अधिक जानकारी प्रदान कर सकते हैं क्योंकि यह उचित काम नहीं करता है। –

9

आप तैयार कर सकते हैं MediaRecorder:

public class CamcorderView extends SurfaceView implements 
     SurfaceHolder.Callback { 

    private SurfaceHolder mHolder; 

    private Camera mCamera; 
    private MediaRecorder mRecorder; 

    public CamcorderView(Context context, AttributeSet attrs) { 
     super(context, attrs); 

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

     mCamera = Camera.open(); 
     mRecorder = new MediaRecorder(); 

    } 

    public void stop() { 
     mRecorder.stop(); 
    } 

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

    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 
    } 

    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 
     mCamera.unlock(); 
     mRecorder.setCamera(mCamera); 

     mRecorder.setPreviewDisplay(mHolder.getSurface()); 

     // You may want to change these 
     mRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 
     mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); 
     mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); 

     // You'll definitely want to change this 
     mRecorder.setOutputFile("/mnt/sdcard/out"); 

     try { 
      mRecorder.prepare(); 
     } catch (IllegalStateException e) { 
      Log.e("IllegalStateException", e.toString()); 
     } catch (IOException e) { 
      Log.e("IOException", e.toString()); 
     } 
     mRecorder.start(); 

    } 
} 

तुम भी कॉल करने के लिए चाहते हो सकता है आवश्यक फ़ील्ड को इनबिल्ट प्रोफाइल (कैमकॉर्डर प्रोफाइल) से कॉपी करके। बस ऑडियो सेटिंग्स छोड़ दें और आपको जाने के लिए अच्छा होना चाहिए। अपनी जरूरतों के लिए नीचे कोड संपादित करें, चरण 3 यहां आवश्यक हिस्सा है।

private boolean prepareVideoRecorder() { 

    mCamera = getCameraInstance(); 
    mMediaRecorder = new MediaRecorder(); 

    // store the quality profile required 
    CamcorderProfile profile = CamcorderProfile.get(cameraid, CamcorderProfile.QUALITY_HIGH); 

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

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

    // Step 3: Set all values contained in profile except audio settings 
    mMediaRecorder.setOutputFormat(profile.fileFormat); 
    mMediaRecorder.setVideoEncoder(profile.videoCodec); 
    mMediaRecorder.setVideoEncodingBitRate(profile.videoBitRate); 
    mMediaRecorder.setVideoFrameRate(profile.videoFrameRate); 
    mMediaRecorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight); 

    // 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) { 
     releaseMediaRecorder(); 
     return false; 
    } catch (IOException e) { 
     releaseMediaRecorder(); 
     return false; 
    } 
    return true; 
} 
+0

अच्छी तरह से काम करता है .. धन्यवाद –

+0

अच्छा समाधान ...... यह मेरे लिए बहुत उपयोगी है ..... – jack

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