제임스딘딘의
Tech & Life

android 15

FFmpeg 참고자료

* 스마트폰을 이용한 가정용 화상감시 장비 프로젝트 진행 과정에서 얻게된 지식을 공유하는 포스팅 입니다. 본 프로젝트에서는 FFmpeg와 x264 라이브러리를 안드로이드에 포팅하여 H.264 인코딩/디코딩을 사용하였다.결국 인코딩/디코딩 모두 성공 했지만 불완전 하다. 네트워크 전송시 Intra 코딩만 가능. Inter 코딩 시 수신 측에서 디코딩 불가 문제가 있다. 이 문제를 해결 중에 있다.(2012. 10월)아래 링크는 이 작업과정에서 참조했던 사이트의 링크들 이다. - ffmpeg 사용시 참고했던 사이트 링크ffmpeg는 레퍼런스 문서나 예제가 많지 않아서 상당히 애를 먹었던 기억이 있다.doxygen 문서가 있긴 하지만, 필요한 걸 찾기가 개인적으로 불편했었다. 그래서 각 섹션마다 링크를 걸어둔..

libavcodec을 사용한 H.264 인코딩/디코딩 - C code

* 스마트폰을 이용한 가정용 화상감시 장비 프로젝트 진행 과정에서 얻게된 지식을 공유하는 포스팅 입니다. 본 프로젝트의 전체적인 시스템 구성도는 아래와 같다. 여기에서 코덱이 필요한 이유는, 감시 영상을 네트워크를 통해 전달하기 때문이다.raw data를 그대로 전달 할 경우, 1프레임 영상의 크기가 1메가를 상회하게 된다. (지원 해상도는 QCIF, QVGA 만 허용함. 이는 각각 352 x 288과 320 x 240 이다.) 네트워크 대역폭 제한으로 인해 받아 보는 쪽에서 영상의 프레임이 낮을 것이다.또한 3G/4G 를 사용한다면 데이터 요금도 상당할 것이다. 이를 h.264 코덱으로 인코딩 하여 네트워크로 보내게 된다면, 이런 문제를 해결 가능 할 것이라 판단하여 코덱을 사용하였다. 물론 인코딩 하..

[안드로이드] 안드로이드 API GPS 상태체크

안드로이드 API GPS 상태체크 지도를 비롯하여, 안드로이드 기기의 위치정보를 이용한 서비스 개발을 할 때, 일반적으로 기기의 현재 위도(latitude), 경도(longitude) 값이 필요하다. 기기의 현재 위,경도 값을 알기 위해서는, 사용자가 위치정보 사용을 동의해야 한다.만약 동의하지 않은 상태에서 위치 획득 관련 API호출한다면, exception을 던지게 되어있다. 만약 아래와 같은 UX flow를 구현하려 한다면, 아래 코드를 참고하자. GPS 사용동의 여부를 체크 후 if 미동의 : 'GPS 사용 동의 설정 화면으로 이동 하겠는가?' 다이얼로그 출력. if 다이얼로그로 부터 '이동한다' 입력받을 경우 : GPS 설정 화면으로 이동. 아래는 그 기능의 예제코드이다. @Override pu..

[안드로이드] 이미 생성해둔(Sqlite) DB를 앱에서 Load하여 사용하기

이미 생성해둔(Sqlite) DB파일을 앱에서 읽어들여 사용하기 약간 복잡한 기초 데이터를 위해 초기 실행시 Create Table 도 하고 insert도 할 수 있겠지만, 별도의 db 파일을 PC등에서 미리 만들고, 관리하며, 앱에서는 이 파일을 읽어들이기만 하여 (Load) 사용하고 싶다면 아래와 같은 방법을 쓰는 것도 한가지 해결책이 될 수 있다.db 파일을 assets에 넣는다.아래 함수를 적당한 위치에 넣는다. public static void initialize(Context ctx) { // check File folder = new File(ROOT_DIR + "databases"); folder.mkdirs(); File outfile = new File(ROOT_DIR + "databa..

[안드로이드] 안드로이드에서 SQLite를 다뤄보자 (2)

2011/08/09 - [Software Dev Note/Android] - [안드로이드] 안드로이드에서 SQLite를 다뤄보자 (1)2011/08/11 - [Software Dev Note/Android] - [안드로이드] 이미 생성해둔(Sqlite) DB를 앱에서 Load하여 사용하기 안드로이드에서 SQLite를 다뤄보자 (2)안드로이드 앱 개발을 할 때, 없어서는 안될 존재. SQLite의 사용법에 대해 알아보겠다. 오늘은 아주 데이터베이스를 뿌리뽑아보도록 하자.안드로이드는 모바일 환경에 알맞은 SQLite 데이터베이스를 채택하고 있다. 기본적으로 다른 데이터베이스와의 큰 차이는 없다. 물론, 완전히 같지는 않다.다른 점 이라면, 일반적은 데이터베이스는 테이블 생성 시 각 속성에 대한 타입을 지정한..

[안드로이드] 안드로이드에서 SQLite를 다뤄보자 (1)

안드로이드에서 SQLite를 다뤄보자 (1) 안드로이드 플랫폼은 Database를 위해서 플랫폼 자체적으로 SQLite를 기본 탑재하고 있다.우선 SQLite의 특징을 살펴보자. SQLite는 다른 프로그램에 임베딩하기 좋으면서도 깔끔한 SQL 인터페이스를 제공한다.메모리도 적게 사용하면서 속도도 빠르다.실행파일과 소스 코드가 무료이고 공개되어 있기 때문에 많이 사용된다.위와 같은 이유로, 안드로이드는 SQLite를 기본탑재하여 내장하고 있으며, 그결과 모든 안드로이드 애플리케이션은 간단하게 SQLite 데이터베이스를 생성해 활용할수 있게 됐다.SQLite는 표준 SQL 인터페이스를 사용한다. -> SQLite는 SQL 문법에 맞는 명령을 통해 데이터를 가져오거나(SELECT) 데이터를 변경하고(INSE..

[안드로이드] 안드로이드 SurfaceView 캡쳐 예제

안드로이드 SurfaceView 캡쳐 예제 다음과 같은 상황이라고 가정하자. 아이템의 사진을 찍는 앱이 있는데, 이 아이템들은 ActivityScreen의 특정한 고정 된 영역에서 볼 수 있어야 한다는 요구사항 있다.문제는 저장된 비트맵이 액티비티에 표시될 때 인데, 카메라로 보고 찍은 것과는 보여지는게 다르다. 줌을 땡겨서 사진을 찍을 때, 프리뷰 화면에서는 보여지지 않았던 영역까지 액티비티에 그려진다. 해결을 위한 주요 코드 줄은 다음과 같다. 이미지 캡쳐 (IMAGE CAPTURE) surfHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); captImageView = (ImageView)findViewById(R.id.CamImageView); b..

[안드로이드] Push Notification 구현

[안드로이드] Push Notification 구현 안드로이드에서 Push notification을 구현하기 위한 방법으로 XMPP를 이용하는 방법과 MQTT를 이용하는 방법이 있다. 여기서는 MQTT를 이용하여 C2DM을 지원하지 않는 안드로이드 2.1이하 버전에서 PUSH notification을 지원하기 위한 방법에 대해 설명한다. 안드로이드 앱에서 Push notification을 지원하기 위한 방안은 3가지정도의 방안이 있다. 폴링이게 진정 push일까?? 어쨌든 단말에서 주기적으로 서버에 가져갈 메세지가 있는지 확인하여 push event를 수신할 수 있다. 장점 : 구현이 쉽고 비용도 안든다. 단정 : 실시간이 아니지 않은가... 게다가 이는 배터리소모까지 발생시킨다.. 끔찍하다. 이에 대한..

[안드로이드] Emulator: ERROR: bad config: virtual device directory lacks config.ini - 안드로이드 가상머신관련 오류 해결

안드로이드 Emulator: ERROR: bad config: virtual device directory lacks config.ini - 안드로이드 가상머신관련 오류 해결 emulator: ERROR: bad config: virtual device directory lacks config.iniemulator: could not find virtual device named 'test' 위와 같은 오류가 발생하는 이유는, 컴퓨터의 사용자 이름이 한글인 경우, 경로 인식을 제대로 하지 못해서 오류가 생긴다고 한다. 아래의 사진을 보면 커맨드라인의 폴더경로중 사용자이름 부분이 한글인 것을 확인할 수 있다. 바로 이러한 경우가 문제가 된다. 이런 문제가 생긴다고 가상머신을 사용하지 못한다면 더 이상 안드..

[안드로이드] Bitmap 과 ByteArray 상호변환

Bitmap 과 ByteArray 상호변환 이 포스팅은 Bitmap 데이터 형을 ByteArray로 변환하거나, 혹은 그 역, ByteArray -> Bitmap으로 변환하는 방법을 예제코드와 함께 다룬다. 안드로이드 카메라와 이미지를 다루다보면, 종종 데이터 형(type)이 달라서 형변환을 해야 하는 상황이 발생한다. 그때 필요한 내용이다. 방법을 간단히 요약하자면 아래 두줄만 보면 된다. Bitmap -> ByteArray : ByteArrayOutputStream 인스턴스를 생성한 후, Bitmap의 compress 메서드를 통해 비트맵을 압축하여 stream에 담는다. ByteArray -> Bitmap : BitmapFactory의 decodeByteArray 메서드를 통해 byte Array를..

1 2