2011-01-28 2 views
0

웹캠에서 비디오를 미리 보려면 안드로이드 에뮬레이터를 사용하려고합니다. 나는 webbroadcaster를 빼고 tom gibara 샘플 코드를 사용했다. (대신 HTTP를 통해 VLC 스트리밍을 사용하고있다.)Tom G의 HttpCamera에서 작동하도록 카메라 에뮬레이션을 가져 오는 데 문제가 발생했습니다.

그래서 SDK의 "CameraPreview"앱을 수정하여 HttpCamera를 사용했지만 스트림이 나타나지 않습니다. 디버깅을 통해 아무런 단서를주지 못합니다. 명백한 것이 다른 사람에게 명확한가요? 미리보기 앱이 실행되고 검은 색으로 유지됩니다.

주 : http://www.inter-fuser.com/2009/09/live-camera-preview-in-android-emulator.html,하지만 socketcamera 대신 httpCamera을 참조 : 여기에 설명 된대로 내가 원래 CameraPreview 클래스를 업데이트 한

  1. .
  2. Tom의 원래 예제를 "CameraDevice"유형 대신 "Camera"유형을 참조하도록 업데이트했습니다.
  3. 다음은 내 CameraPreview.java입니다.

 

package com.example.android.apis.graphics; 

import android.app.Activity; 
import android.content.Context; 
import android.hardware.Camera; 
import android.os.Bundle; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import android.view.Window; 
import java.io.IOException; 
import android.graphics.Canvas; 

// ---------------------------------------------------------------------- 

public class CameraPreview extends Activity {  
    private Preview mPreview; 

    @Override 
protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Hide the window title. 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 

     // Create our Preview view and set it as the content of our activity. 
     mPreview = new Preview(this); 
     setContentView(mPreview); 
    } 

} 

// ---------------------------------------------------------------------- 

class Preview extends SurfaceView implements SurfaceHolder.Callback { 
    SurfaceHolder mHolder; 
    //Camera mCamera; 
    HttpCamera mCamera;//changed 

    Preview(Context context) { 
     super(context); 

     // Install a SurfaceHolder.Callback so we get notified when the 
     // underlying surface is created and destroyed. 
     mHolder = getHolder(); 
     mHolder.addCallback(this); 
     //mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
     mHolder.setType(SurfaceHolder.SURFACE_TYPE_NORMAL);//changed 
    } 

    public void surfaceCreated(SurfaceHolder holder) { 
     // The Surface has been created, acquire the camera and tell it where 
     // to draw. 
     //mCamera = Camera.open(); 
    this.StartCameraPreview(holder); 
    } 

    public void surfaceDestroyed(SurfaceHolder holder) { 
     // Surface will be destroyed when we return, so stop the preview. 
     // Because the CameraDevice object is not a shared resource, it's very 
     // important to release it when the activity is paused. 
     //mCamera.stopPreview();//changed 
     mCamera = null; 
    } 

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 
     // Now that the size is known, set up the camera parameters and begin 
     // the preview. 
     //Camera.Parameters parameters = mCamera.getParameters(); 
     //parameters.setPreviewSize(w, h); 
     //mCamera.setParameters(parameters); 
     //mCamera.startPreview(); 
    this.StartCameraPreview(holder); 
    } 

    private void StartCameraPreview(SurfaceHolder sh) 
    { 
    mCamera = new HttpCamera("10.213.74.247:443", 640, 480, true);//changed 

     try { 
      //mCamera.setPreviewDisplay(holder); 
     Canvas c = sh.lockCanvas(null); 
     mCamera.capture(c); 
     sh.unlockCanvasAndPost(c); 

     } catch (Exception exception) { 
      //mCamera.release(); 
      mCamera = null; 
      // TODO: add more exception handling logic here 
     } 
    } 

} 

답변

1

당신은 당신의 HttpCamera에 대한 프로토콜을 지정하지 않은 감사합니다. 시도해보십시오 http://10.213.74.247:443

관련 문제