私のギャラクシータブからサーバーにビデオストリームを書き込もうとしています。 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);
}
をすべてはそれが何を意味するのでしょうし、私はレコーダーを起動するために何をすべき
02-01 19:03:39.265: E/MediaRecorder(11922): start failed: -19
奇妙なエラーでステップrecorder.start();
に失敗しましたか?
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);
されている...しかし、奇妙な - はい、フォーマットおよびエンコーダの明示的な設定は、トラブルを解決しました。
faとしてrecorder.setProfile私は理解しています。 – Raiv
ああ、私はそれまでNO_INITの値が-19であることを追跡しましたが、(* cameraSource) - > initCheck()がOKでないときは、おそらくsetupCameraSourceから返されました。 – pmod
IC 4.0.4のNexus Sで、その謎のエラー-19とまったく同じ問題がありました。それで、私にとっては、明示的にフレームレートを<15FPSに、ビデオサイズを320x240に設定していました。 – nifo