我正在尝试在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();
答案 0 :(得分:0)
你要找到名为SpyDroid的开源项目,或者检查sipdroid。它的好例子。
答案 1 :(得分:0)
Intent record_videoIntent=new Intent(android.provider.MediaStore.ACTION_VIDEO_CAPTURE);
startActivityForResult(record_videoIntent, 1);
然后覆盖您活动中的onActivityResult并获得结果,如...
Uri videoUri = data.getData();
答案 2 :(得分:-1)
创建 RecorderPreview 类,该类扩展 SurfaceView 和实施 SurfaceHolder.Callback 界面。
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