달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
728x90
반응형

안드로이드 - 소켓을 이용한 카메라 연결

실행은 안해봤지만 나중에 한번 해보려고 관련 자료를 가져왔다.

 

[출처 : http://bbangjem2.tistory.com/]

안드로이드 에뮬레이터에서 카메라 대신 데스크탑의 웹캠 사용하기

안드로이드 에뮬레이터 카메라 사용하기
안드로이드 소켓 카메라
등등.... 많이 검색 해봤는데.......

전부....

 CameraSource cs = new SocketCamera("192.168.0.100", 9889, 320, 240, true); if (!cs.open()) { /* deal with failure to obtain camera */ } while(/*some condition*/) { cs.capture(canvas) //capture the frame onto the canvas } cs.close();


OTL.........

그래서... 걍.. 소스 분석해 봤는데....

헐... 정말 간단하네....이거.. 여기 적어도 될지 모르겠으나...


분명히... public domain..... no warranty 라고.............

혹시 나중에 필요할지 몰라 혼자 볼려고 여기에 적어둠..ㅋㅋ
비웃지 마세요... 혼자 보려고 만든 글이니....

출처 : http://www.tomgibara.com/android/camera-source

 



=============================================================

1.JMF다운 받기

 

Download Java(TM) Media Framework (JMF) 2.1.1e for Windows

 

http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/download.html

 

 


 

 

2. JMF설치 후 확인 하기

 

http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/jmfdiagnostics.html

 

 

 

 

붉은색 박스 안에 내용이 애플릿이 구동되면 됨!!


 

 

3.소스 다운

 

http://www.tomgibara.com/android/camera-source

 

 

 

 

필요한 파일은 붉은색 박스3개 다운 받기

 

4. WebBroadcaster.java구동 위 사이트에서

 

java "-Djava.library.path=C:\Program Files\JMF2.1.1e\lib" WebcamBroadcaster

이렇게 사용하라고 나와있음

 

BUT…

 

 

 

 

 

 



환경변수에서 CLASSPATH등록 되어있었기 때문에 그냥 폴더 하나 만들어서 디폴트로 컴파일과 실행

 

아무 메시지 안 나오면 잘된 듯…..

 

 


 

5.프로젝트 만들기

 

 

 

WebCam이라는 프로젝트를 만들고..

 

 


다운 받은 CameraSource.java와 SocketCamera.java를 넣어주고

 

 

Apidemos에 있던.. Preview.java파일을 복사해서 넣어주고..

 

WebCam.java....디폴트로 만든 액티비티 클래스 입니다.

 

<AndroidManifest.xml >

 

<?xmlversion="1.0"encoding="utf-8"?>

<manifestxmlns:android="http://schemas.android.com/apk/res/android"

package="com.test.WebCam"

android:versionCode="1"

android:versionName="1.0">

<applicationandroid:icon="@drawable/icon"android:label="@string/app_name">

<activityandroid:name="WebCam"android:label="Webcam">

<intent-filter>

<actionandroid:name="android.intent.action.MAIN"/>

<categoryandroid:name="android.intent.category.LAUNCHER"/>

</intent-filter>

</activity>

 

</application>

<uses-sdkandroid:minSdkVersion="7"/>

 

<uses-permissionandroid:name="android.permission.INTERNET"></uses-permission>

</manifest>

 

인터넷 관련 퍼미션 주고 뭐... 이런식 ???이렇게해주고

 

Preview.java는 약간만 수정해서

 

package com.test.WebCam;

import android.content.Context;

import android.graphics.Canvas;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

publicclass Previewextends SurfaceViewimplements SurfaceHolder.Callback,Runnable{

private Threadthread =null;

SurfaceHoldermHolder;

WebCammCamera;

Canvascanvas;

SocketCameracs=new SocketCamera("ip주소 ex)123.456.77.23", 9889, 320, 480,true);

 

public Preview(Context context) {

super(context);

mHolder = getHolder();

mHolder.addCallback(this);

mHolder.setType(SurfaceHolder.SURFACE_TYPE_NORMAL);

}

 

publicvoid run(){

while (true) {

Canvas c =null;

try {

c =mHolder.lockCanvas(null);

synchronized (mHolder){

cs.capture(c);

Thread.sleep(0);

}//sync

}catch (InterruptedException e){

e.printStackTrace();

}finally {

if (c !=null) {mHolder.unlockCanvasAndPost(c);}

}

}//while()

}//run(){}

 

publicvoid surfaceCreated(SurfaceHolder holder)

{

thread =new Thread(this);

thread.start();

}

 

publicvoid surfaceDestroyed(SurfaceHolder holder){

thread.stop();

}

 

publicvoid surfaceChanged(SurfaceHolder holder,int format,int w,int h){

thread.stop();

}

 

}


 

WebCam.java..

 

package com.test.WebCam;

 

import android.app.Activity;

import android.os.Bundle;

import android.view.Window;

 

public class WebCamextends Activity{

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(new Preview(this));

}

}

 

이렇게 해주고

웬례사이트에서

-----------------------------------------------------------------------------

 

CameraSource cs = new SocketCamera("192.168.0.100", 9889, 320, 240, true);

if (!cs.open()) { /* deal with failure to obtain camera */ }

while(/*some condition*/) {

cs.capture(canvas) //capture the frame onto the canvas

}

cs.close();

 

-----------------------------------------------------------------------------

이것만적으면된다고했지만뭔가..서페이스뷰랑..

쓰레드를써야한다는걸한참후에알았다는

 

mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

이렇게쓰라고했지만..

 

mHolder.setType(SurfaceHolder.SURFACE_TYPE_NORMAL);

이렇게써도됐으니까넘어감

 

 

쏘쓰이제구동하기..!!

 

 

JMStudio구동하고!!

 

 

 

캡쳐하기누른다음

 

 

 

 

 

설정하고

 

OK눌러서캠이정상적으로작동하는지확인

 

확인했으면

 

아까위에서컴파일WebcamBroadcaster디폴트로구동 

\>java
WebcamBroadcaster

 

이후에안드로이드에뮬레이터에서 프로젝트를실행하면….~~

 

 

 

 

 

뭔가석연찮은부분이많긴하지만돌아간다..ㅋㅋㅋㅋㅋ

 

728x90
반응형
:
Posted by mapagilove