2012-02-20 3 views
0

ビデオを録画するのに1週間以上をかけています。例や例を試してみると、それは不可能で、私はいつも同様の問題に遭遇します。私のコードは、次のいずれかです。ビデオレコーディングの問題

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){ 

} 
} 

この1つは、ビデオを記録している簡単なアプリケーションであることが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 FormatsによるとMPEG_4_SPエンコーディングはアンドロイド4

ティルサポートされていないあなたのためのh.263作品を使用することができます。

+0

おかげで、私はまた、H.263で試してみました、それは私に同じ問題を与えています。私は1つのサムスンギャラクシーSII(アンドロイド2.3.6)、1つのサムスンギャラクシーネクサス(アンドロイド4.0)と1つのLGオプティマウスブラック(アンドロイド2.3.3)と何も動作していなかった........ – zapotec