2012-04-23 2 views
5

Я пытаюсь создать приложение, которое записывает видео с помощью приложения для камеры, а затем сохраняет это видео на SD-карте, чтобы я мог его воспроизвести. У меня есть код, но я проиграл, как продолжить, поскольку я новичок в Android.Запись, сохранение и воспроизведение видео в Android

Моя активность:

public class Camcorder extends Activity { 

    private CamcorderView camcorderView; 
    private boolean recording = false; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      //irrelevant code 

      camcorderView = (CamcorderView) findViewById(R.id.camcorder_preview); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    { 
     if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) 
     { 
      if (recording) { 
       camcorderView.stopRecording(); 
       finish(); 
      } else { 
       recording = true; 
       camcorderView.startRecording(); 
      } 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    }  
} 

CamcorderView класс:

public class CamcorderView extends SurfaceView implements 
    SurfaceHolder.Callback { 

MediaRecorder recorder; 
SurfaceHolder holder; 
String outputFile = "/sdcard/default.mp4"; 

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

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

    recorder = new MediaRecorder(); 
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 
    recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
    recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); 
    // recorder.setVideoSize(480, 320); 
    // recorder.setVideoFrameRate(15); 
    // recorder.setMaxDuration(10000); 
} 

public void surfaceCreated(SurfaceHolder holder) { 
    recorder.setOutputFile(outputFile); 
    recorder.setPreviewDisplay(holder.getSurface()); 
    if (recorder != null) { 
     try { 
      recorder.prepare(); 
     } catch (IllegalStateException e) { 
      Log.e("IllegalStateException", e.toString()); 
     } catch (IOException e) { 
      Log.e("IOException", e.toString()); 
     } 
    } 
} 

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

public void surfaceDestroyed(SurfaceHolder holder) { 
} 

public void setOutputFile(String filename) 
{ 
    outputFile = filename; 
    recorder.setOutputFile(filename); 
} 

public void startRecording() 
{ 
    recorder.start(); 
} 

public void stopRecording() 
{ 
    recorder.stop(); 
    recorder.release(); 
} 
} 
+0

Посмотрите - http://stackoverflow.com/questions/10186503/camera-app- не-работает/10187932 # 10187932 –

+2

я надеюсь, что [это] [1] поможет вам [1]: http://stackoverflow.com/questions/1817742/android-video-recordi ng-sample –

+0

проверьте этот, если сможете. http://stackoverflow.com/questions/3956746/how-can-i-record-video-using-the-camera-with-android –

ответ

6

эй я думаю, вы не пробовали это. поэтому, пожалуйста, проверьте эту ссылку, и если у вас есть какие-либо проблемы, сообщите нам об этом. video recording example

1

проверьте этот вариант, если вы можете. How can I record video using the camera with Android?. и если не получить, то Google для видеокамеры или перейти на сайт разработчика

+0

Эта ссылка, на которую вы указали, не ответила. На этот вопрос нет ни одного ответа. Как вы здесь пытаетесь помочь? –

1

Ну его очень просто записывать видео в Android с помощью этого простого кода

сначала на кнопку мыши просто начать Intent

Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
      if (takeVideoIntent.resolveActivity(getPackageManager()) != null) { 
       startActivityForResult(takeVideoIntent, 
         CAMERA_REQUEST_CODE_VEDIO); 
      } 

onActivityResult чем метод

Uri videoUri = data.getData(); 
       path = Utils.getRealPathFromURI(videoUri, this); 
       manageVideo(path);///What ever you want to do with your vedio 

и, наконец, добавить разрешения на menife ул

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

Надеется, что это поможет другим, которые ищут помощь :)

Благодарности

0
// Put this code in ,on Button click or in onCreate to Capture the Video 


    Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
    videoUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, videoUri); 
    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); 
    startActivityForResult(intent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE); 

    //////////////////////////////// 


private static Uri getOutputMediaFileUri(int type){ 
    return Uri.fromFile(getOutputMediaFile(type)); 
} 

private static File getOutputMediaFile(int type){ 
    // Check that the SDCard is mounted 
    File mediaStorageDir = new File(Environment.getExternalStorageDirectory() +"/YourDirectoryName"); 
    // Create the storage directory(MyCameraVideo) if it does not exist 
    if (! mediaStorageDir.exists()){ 

     if (! mediaStorageDir.mkdirs()){ 

      Log.d("MyCameraVideo", "Failed to create directory MyCameraVideo."); 
      return null; 
     } 
    } 

    // Create a media file name 
    // For unique file name appending current timeStamp with file name 
    java.util.Date date= new java.util.Date(); 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(date.getTime()); 

    File mediaFile; 
    if(type == MEDIA_TYPE_VIDEO) { 

     // For unique video file name appending current timeStamp with file name 
     mediaFile = new File(mediaStorageDir.getPath() + File.separator + 
       "VID_"+ timeStamp + ".mp4"); 

    } else { 
     return null; 
    } 

    return mediaFile; 
} 
@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // After camera screen this code will execute 
    if (requestCode == CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE) { 

     if (resultCode == RESULT_OK) { 
      videoUri = data.getData(); 

      // Video captured and saved to fileUri specified in the Intent 
      // Toast.makeText(getActivity(), "Video saved to: " +data.getData(), Toast.LENGTH_LONG).show(); 

     } else if (resultCode == RESULT_CANCELED) { 

      // User cancelled the video capture 
      Toast.makeText(getActivity(), "User cancelled the video capture.", Toast.LENGTH_LONG).show(); 

     } else { 
      // Video capture failed, advise user 
      Toast.makeText(getActivity(), "Video capture failed.", Toast.LENGTH_LONG).show(); 
     } 
    } 
} 
Смежные вопросы