2012-02-01 28 views
0

私のギャラクシータブからサーバーにビデオストリームを書き込もうとしています。 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); 

されている...しかし、奇妙な - はい、フォーマットおよびエンコーダの明示的な設定は、トラブルを解決しました。

答えて

0

私は、出力形式の設定を参照してくださいので、セットアップレコーダーに追加してみません:

recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); 
+0

faとしてrecorder.setProfile私は理解しています。 – Raiv

+0

ああ、私はそれまでNO_INITの値が-19であることを追跡しましたが、(* cameraSource) - > initCheck()がOKでないときは、おそらくsetupCameraSourceから返されました。 – pmod

+0

IC 4.0.4のNexus Sで、その謎のエラー-19とまったく同じ問題がありました。それで、私にとっては、明示的にフレームレートを<15FPSに、ビデオサイズを320x240に設定していました。 – nifo

0

look

を持っており、それはそのセットして、ビデオをストリーミングしているが -

recorder.setOutputFormat(8); 
recorder.setOutputFile(socketFd); 

楽しんでください。

0

ここでは、メディアレコーダークラスを拡張し、super.setVideoFrameRate(レート)を削除することで問題が解決しました。あなたはまだ、フロントカメラでCamcorderProfile.QUALITY_HIGHを使用する場合は、以下を使用することができます

+1

これはそれを呼び出さないのと同じです。役に立たない。 –

0

int currentCameraIdCamera.CameraInfo.CAMERA_FACING_BACKまたは ...FRONT

ある

CamcorderProfile camcorderProfile = CamcorderProfile.get(currentCameraId, CamcorderProfile.QUALITY_HIGH); 
recorder.setProfile(camcorderProfile); 

だから、プロファイルが実際にカメラに依存している(のためのハイエンドの携帯電話は、今のところ1080pをサポートしているので区別なしで正常に動作するようですが、それ以外の場合はローエンドの携帯電話がクラッシュする可能性があります)

関連する問題