2012-02-20 48 views
0

我嘗試錄製視頻一週後,在嘗試使用示例和示例之後,這是不可能的,而且我總是會遇到類似的問題。我的代碼是以下之一:視頻錄製問題

public class VideoRecorder extends Activity{ 

private final static String TAG = "Playing"; 
private MediaRecorder recorder; 
private Preview mPreview; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    recorder = new MediaRecorder(); 

    recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 

    recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
    recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); 

    mPreview = new Preview(this,recorder); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    setContentView(mPreview); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu){ 
    menu.add(0, 0, 0, "StartRecording"); 
    menu.add(0, 1, 0, "StopRecording"); 
    return super.onCreateOptionsMenu(menu); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item){ 
    switch (item.getItemId()) 
    { 
     case 0: 
      try { 
       recorder.start(); 

      } catch (Exception e) { 
       Log.w(TAG, e); 
       recorder.release(); 
      } 
      break; 

     case 1: //GoToAllNotes 
      recorder.stop(); 
      recorder.release(); 
      recorder = null; 
      finish(); 
      break; 

     default: 
      break; 
    } 
    return super.onOptionsItemSelected(item); 
} 
} 

class Preview extends SurfaceView implements SurfaceHolder.Callback{ 
    private SurfaceHolder mHolder; 
    private MediaRecorder tempRecorder; 

Preview(Context context, MediaRecorder recorder){ 
    super(context); 
    tempRecorder = recorder; 
    mHolder = getHolder(); 
    mHolder.addCallback(this); 
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
} 

public Surface getSurface(){ 
    return mHolder.getSurface(); 
} 

public void surfaceCreated(SurfaceHolder holder){ 
    tempRecorder.setOutputFile("/sdcard/myVideo.3gp"); 
    tempRecorder.setPreviewDisplay(mHolder.getSurface()); 
    try{ 
     tempRecorder.prepare(); 
    } catch (Exception e) { 
     tempRecorder.release(); 
     tempRecorder = null; 
    } 
} 

public void surfaceDestroyed(SurfaceHolder holder){ 
    if(tempRecorder!=null){ 
     tempRecorder.release(); 
     tempRecorder = null; 
    } 
} 

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h){ 

} 
} 

這一個是supose是其錄製視頻,但在嘗試和努力後,它是不工作的應用方便,但問題是:

媒體記錄器:準備失敗-17

如果有人知道如何使其正常工作....我想幫助的原因,我絕望了。

順便說一句,對於那些誰是會告訴我有關添加的權限,是的,我加入他們:

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

<uses-feature android:name="android.hardware.camera" android:required="true" /> 

我試着用其他的例子,始終我發現一個問題,如果它不與準備-17,開始-0 ............

非常感謝!

回答

0

如果您的設備支持請求的MPEG_4_SP視頻格式,您可以詢問CamcorderProfile api

根據Android Supported Media FormatsMPEG_4_SP編碼,不支持的Android直到4

可能使用h.263爲你工作。

+0

謝謝回答,但我也試圖與H.263和它給我同樣的問題。我嘗試了一個三星Galaxy SII(機器人2.3.6),一個三星Galaxy Nexus(機器人4.0)和一個LG Optimus黑色(Android 2.3.3),沒有任何工作........ – zapotec 2012-02-20 17:01:55