웹캠에서 비디오를 미리 보려면 안드로이드 에뮬레이터를 사용하려고합니다. 나는 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 클래스를 업데이트 한
- .
- Tom의 원래 예제를 "CameraDevice"유형 대신 "Camera"유형을 참조하도록 업데이트했습니다.
- 다음은 내 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
}
}
}