2012-02-01 39 views
0

我正在尝试将我的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); 

的也许是因为预建立格式的后置摄像头......但无论如何怪。

回答

0

我没有看到输出格式的设置,所以尽量增加录音机设置:

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

这是使用recorder.setProfile(...)作为fa据我所知。 – Raiv 2012-02-01 15:40:04

+0

哦,我追踪到-19是NO_INIT的值,并且当(* cameraSource) - > initCheck()不正确时,最有可能从setupCameraSource返回。 – pmod 2012-02-01 15:53:12

+0

我在IC 4.0.4的Nexus S上遇到了与神秘错误-19完全相同的问题。所以,它对我的​​工作是明确地设置帧速率<15 FPS和视频大小为320x240。 – nifo 2012-06-09 11:07:54

0

有一个look

尽管它是视频流,从而使集 -

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

玩得开心。

0

我在这里做了一个破解,扩展媒体记录器类和删除super.setVideoFrameRate(rate)为我解决了这个问题。

+1

这就和不叫它一样。没有帮助。 – 2012-07-10 13:38:45

0

如果你仍然想使用CamcorderProfile.QUALITY_HIGH与前置摄像头,你可以使用以下命令:

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

其中int currentCameraIdCamera.CameraInfo.CAMERA_FACING_BACK...FRONT

所以外形确实取决于相机(用于高端手机似乎没有区别地正常工作,因为他们都支持1080p到现在,但低端手机可能会崩溃,否则)