我正在尝试将我的Galaxy Tab中的视频流写入服务器。 根据this manual我应该做这样的事情:打开安卓相机流式视频时出错
frontCamera = getFrontCamera();
if((socket!= null)&&(frontCamera!=null))
{
try {
frontCamera.setPreviewDisplay(cameraPreview.getHolder());
} catch (IOException e1) {
// TODO Auto-generated catch block
Log.e("","",e1);
}
frontCamera.startPreview();
recorder = new MediaRecorder();
frontCamera.unlock();
recorder.setCamera(frontCamera);
recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
pfd = ParcelFileDescriptor.fromSocket(socket);
recorder.setOutputFile(pfd.getFileDescriptor());
recorder.setPreviewDisplay(cameraPreview.getHolder().getSurface());
try {
recorder.prepare();
recorder.start();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
Log.e("","",e);
} catch (IOException e) {
// TODO Auto-generated catch block
Log.e("","",e);
}
但都未能上一步recorder.start();
用奇怪的错误
02-01 19:03:39.265: E/MediaRecorder(11922): start failed: -19
这是什么意思,我应该怎样做才能开始记录?
UPD: 由于我的getFrontCamera方法而发生故障。当我用camera.open()替换它时,所有的作品都是正确的。
protected Camera getFrontCamera()
{
Camera.CameraInfo inf = new Camera.CameraInfo();
for(int i = 0; i< Camera.getNumberOfCameras(); i++)
{
Camera.getCameraInfo(i, inf);
if(inf.facing==Camera.CameraInfo.CAMERA_FACING_FRONT)
{
return Camera.open(i);
}
}
return null;
}
UPD2 - 是的,格式和编码器的显式设置解决了麻烦 -
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
的也许是因为预建立格式的后置摄像头......但无论如何怪。
这是使用recorder.setProfile(...)作为fa据我所知。 – Raiv 2012-02-01 15:40:04
哦,我追踪到-19是NO_INIT的值,并且当(* cameraSource) - > initCheck()不正确时,最有可能从setupCameraSource返回。 – pmod 2012-02-01 15:53:12
我在IC 4.0.4的Nexus S上遇到了与神秘错误-19完全相同的问题。所以,它对我的工作是明确地设置帧速率<15 FPS和视频大小为320x240。 – nifo 2012-06-09 11:07:54