안드로이드 - 소켓을 이용한 카메라 연결 안드로이드 이야기2012. 8. 29. 00:57
안드로이드 - 소켓을 이용한 카메라 연결
실행은 안해봤지만 나중에 한번 해보려고 관련 자료를 가져왔다.
[출처 : 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
를
디폴트로
구동
\>javaWebcamBroadcaster
이후에
…
안드로이드
에뮬레이터에서 프로젝트를
실행
하면
….
쨘
~~
뭔가석연찮은부분이많긴하지만…잘돌아간다..ㅋㅋㅋㅋㅋ
'안드로이드 이야기' 카테고리의 다른 글
안드로이드 - 안드로이드폰 기기별 DB (첨부 Exel File) (0) | 2012.08.29 |
---|---|
안드로이드 - 서버/클라이언트 소켓(Socket) 통신하기 (0) | 2012.08.29 |
안드로이드 - 3G / Wifi 상황에서 IP 가져오기 (0) | 2012.08.29 |
안드로이드 - IP 주소 가져오기 (0) | 2012.08.29 |
안드로이드 - ip 가져오기 (1) | 2012.08.29 |