0

Androidでビデオをキャプチャしようとしていますが、キャプチャできません。私のコードは 3gp ファイルを作成していますが、再生できません。エンコーディングに問題がありますか?

MediaRecorder videoRecorder;
sFilePath = sSDPath + "/" + System.currentTimeMillis() + ".3gp";
String sSDPath = Environment.getExternalStorageDirectory().getPath();
String sFilePath="";

if (videoRecorder == null) {
   videoRecorder = new MediaRecorder();
}

videoRecorder.setVideoSource(
MediaRecorder.VideoSource.CAMERA);
videoRecorder.setOutputFormat(
MediaRecorder.OutputFormat.THREE_GPP);
videoRecorder.setVideoSize(640, 480);
videoRecorder.setVideoFrameRate(30);
videoRecorder.setVideoEncoder(
MediaRecorder.VideoEncoder.H264);
videoRecorder.setOutputFile(sFilePath);
try {
 videoRecorder.prepare();
} catch (IllegalStateException e) {
  e.printStackTrace();
} catch (IOException e) {
   e.printStackTrace();
}
videoRecorder.start();
4

3 に答える 3

0

カスタムレコーダーを使用していますか..?そうでない場合は、ビデオをキャプチャするために2行の下に書き込みます..

Intent record_videoIntent=new Intent(android.provider.MediaStore.ACTION_VIDEO_CAPTURE);
    startActivityForResult(record_videoIntent, 1);  

次に、アクティビティで onActivityResult をオーバーライドし、次のような結果を取得します...

ウリ videoUri=data.getData();

于 2013-04-05T11:02:34.647 に答える
0

SpyDroid という名前のオープンソース プロジェクトを見つけるか、 sipdroid を確認してください。その良い例。

于 2013-04-05T11:01:32.553 に答える
-1

SurfaceView を拡張し、SurfaceHolder.Callbackインターフェイス実装するRecorderPreviewクラスを作成します。

class RecorderPreview extends SurfaceView implements SurfaceHolder.Callback
{
  //Create objects for MediaRecorder and SurfaceHolder.
  MediaRecorder recorder;
  SurfaceHolder holder;

  //Create constructor of Preview Class. In this, get an object of
  //surfaceHolder class by calling getHolder() method. After that add
  //callback to the surfaceHolder. The callback will inform when surface is
  //created/changed/destroyed. Also set surface not to have its own buffers.

  public Preview(Contect context,MediaRecorder temprecorder) {
 super(context);
      recorder=temprecorder;
 holder=getHolder();
 holder.addCallback(this);
 holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
   }

  // Implement the methods of SurfaceHolder.Callback interface

  // SurfaceCreated : This method gets called when surface is created.
  // In this, initialize all parameters of MediaRecorder object as explained
  // above.

  public void surfaceCreated(SurfaceHolder holder){
  try{
        recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
        recorder.setOutputFile("/sdcard/recordvideooutput.3gpp");
        recorder.setPreviewDisplay(mHolder.getSurface());
    recorder.prepare();
    } catch (Exception e) {
        String message = e.getMessage()
  }
  }

ビデオの録画を許可するには、アプリケーションのマニフェスト ファイルにアクセス許可を追加します。

      <uses-permission android:name="android.permission.RECORD_VIDEO"/>


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

//surfaceChanged : This method is called after the surface is created.
    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h)
    {
}
}

動画録画アプリの onCreate メソッドを実装します。

//Create objects of MediaRecorder and Preview class
private MediaRecorder recorder;
private Preview preview;
    // In this method, create an object of MediaRecorder class. Create an object of
    // RecorderPreview class(Customized View). Add RecorderPreview class object
    // as content of UI.

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    recorder = new MediaRecorder();
    preview = new RecorderPreview(this,recorder);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    setContentView(preview);
}

//Create option menu which can be used for starting and stopping video recording.
// Also implement the onOptionsItemSelected to handle the events for option menu.

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

public boolean onOptionsItemSelected(MenuItem item)
{
    switch (item.getItemId())
    {
        case 0:
            recorder.start();
            break;
        case 1:
       recorder.stop();
       break;
    }
    return super.onOptionsItemSelected(item);
}

元のコードは次の場所にあります。

http://www.codeproject.com/Articles/107270/Recording-and-Playing-Video-on-Android

于 2013-04-05T11:05:58.540 に答える