2012-04-23 41 views
5

Tôi đang cố gắng tạo ứng dụng ghi video bằng ứng dụng máy ảnh, sau đó lưu video đó trên thẻ SD để tôi có thể phát video đó. Tôi có một số mã nhưng tôi bị mất về cách tiếp tục như tôi là người mới bắt đầu trong Android.Ghi, lưu và phát video trong Android

Hoạt động của tôi:

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 lớp:

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

Có một cái nhìn - http://stackoverflow.com/questions/10186503/camera-app- không làm việc/10187932 # 10187932 –

+2

tôi hy vọng [này] [1] sẽ giúp bạn [1]: http://stackoverflow.com/questions/1817742/android-video-recordi ng-mẫu –

+0

kiểm tra này nếu bạn có thể. http://stackoverflow.com/questions/3956746/how-can-i-record-video-using-the-camera-with-android –

Trả lời

6

hey tôi nghĩ rằng bạn không thử một này. vì vậy hãy kiểm tra liên kết này và nếu bạn có bất kỳ vấn đề nào sau đó, hãy cho tôi biết video recording example

1

kiểm tra điều này nếu bạn có thể. How can I record video using the camera with Android?. và nếu không nhận được thì google cho máy quay hoặc vào trang web của nhà phát triển của

+0

liên kết này mà bạn đã đưa ra chưa được trả lời. Không có một câu trả lời duy nhất cho câu hỏi này. Làm thế nào bạn đang cố gắng để giúp đỡ ở đây? –

1

Vâng nó rất đơn giản để ghi lại video trong Android bằng cách sử dụng mã này đơn giản

Đầu tiên vào một nút bấm đơn giản bắt đầu một Ý định

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

hơn onActivityResult phương pháp

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

và cuối cùng là thêm quyền truy cập vào menife st

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

Hy vọng nó sẽ giúp những người khác đang tìm kiếm sự giúp đỡ :)

Cảm ơn

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(); 
     } 
    } 
} 
Các vấn đề liên quan