一个星期以来,我一直在尝试录制一段视频,在尝试了一些例子之后,这是不可能的,我总是会遇到类似的问题。我的代码如下:
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){
}
}这个应用程序很容易录制视频,但经过尝试和尝试,它不起作用,问题是:
媒体记录器:准备失败-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.
非常感谢!
发布于 2012-02-20 17:33:46
您必须按照如下所述的顺序调用MediaRecorder和Camera方法:http://developer.android.com/guide/topics/media/camera.html#capture-video
发布于 2012-02-20 16:31:03
您可以询问CamcorderProfile api设备是否支持所请求的MPEG_4_SP视频格式。
根据Android支持的媒体格式的说法,直到Android4才支持MPEG_4_SP编码。
可能正在使用h.263为您工作。
https://stackoverflow.com/questions/9363669
复制相似问题