http://stackoverflow.com/questions/24675618/android-ffmpeg-bad-video-output


추후 정리

Posted by 시크한공돌이
,

■ Wi-Fi Direct 다중 연결을 하려면 어떻게 해야할까요??
 사실 Wi-Fi Direct 관련 자료는 1:1 통신만 소수 있고 안드로이드 Developer 사이트 에서도 부분적으로만 나와있습니다. 또한 많은 블로그들이 단지 그 부분적인 부분을 직역 해놓은 부분들이 많았습니다.

분명 Wi-Fi Direct를 이용하여 다중 연결을 하려는 분들이 많을텐데요. 바로 그 키워드는 Group Owner입니다.


 - 먼저 간단하게 Wi-Fi Direct의 연결 루틴을 살펴봅시다.

1. DiscoverPeer() 를 통한 디바이스 피어 리스트 갱신

2. connect를 통한 연결

3. Group이 생성됨

입니다.

  여기서 다중 통신을 하기 위해서 가장 중요한 점은

Group Owner 만이 새로운 연결을 만들 수 있다!! 입니다.

저도 그렇지만 많은 분들이 connect를 시도하는데 1:1 밖에 안되는 것을 경험 하셨을텐데요. 다중 통신을 하기위해서는 1:1을 연결한 후 GO(Group owner)가 생기면 그 그룹오너가 나머지 peer에 connect를 하게되면 N개 모두 연결 할 수 있습니다. 이 상태에서 Socket을 통한 멀티 통신을 구현하시면 됩니다.


■ 현재는 제가 바빠서 자세하게 올리지 못하고 있습니다. 그렇기 때문에 시간이 생기면 자세하게 Wi-Fi Direct 다중 연결에 대해 블로깅 하도록 하겠습니다.

Posted by 시크한공돌이
,

■ 가끔 긴 소스를 복사하면 R을 참조한 라인에서 에러가 나는데, 이럴땐 어떻게 할까요?

- 이럴때는 R 파일이 생성되지 못해 발생하는 에러입니다. 따라서 R.layout.MainActivity 처럼 R 에러가 난 라인을 모두 주석 처리하고 빌드 한 후 다시 주석을 풀어주세요. 

  그럼 짜잔 하고 R파일이 생기고 에러가 사라져 있음을 볼 수 있습니다.

Posted by 시크한공돌이
,

■ 안드로이드에서 FFMpeg를 설치하고 실행하려면 어떻게 해야할까요??

  이 강좌는 안드로이드 펍의 남은 그루터기 님의 강좌를 리뷰 하는 식으로 작성될 것입니다. 제가 하면서 최신버전에서 안되는 점들은 수정해서 적용할 예정입니다.


  이세상에 현존하는 많은 미디어 플레이어는 FFMpeg를 기반으로 만들어졌다고 말해도 과언이 아닐정도로 FFMpeg는 거대한 라이브러리 입니다. FFMpeg를 쓸 수 있게 되면, 무인코딩 동영상 플레이는 물론 영상을 프레임by프레임으로 뽑아내어 가공할 수 있습니다. 사운드 또한 샘플 단위로 뽑아 가공해서 플레이 가능하고, 이를 인코딩 할 수 있기 때문에 단순히 Android SDK를 이용해서 만들 수 없었던 다양한 어플리케이션 들을 개발 할 수 있게 되었습니다.


  + 이 강좌는 Neon 모듈을 포함하고 있는 arm CortexA8 이상의 AP를 기준으로 컴파일 합니다.

  + Neon을 추가하면 일부 코덱에서 상당한 수준의 성능 향상이 있다고 합니다. H.264의 경우 35% 이상의 성능 향상을 볼 수 있다고 합니다.


1. NDK 설치

 FFMpeg를 사용하려면 안드로이드 JNI를 이용하여 C/C++ 코드로 편집해야 됩니다. 그렇기 때문에 안드로이드 개발 구축의  # 4. Welcome To Android | Install & Setup Android NDK, 안드로이드 NDK 설치 하기, 설정하기 를 참고합니다.


2. Standalone toolchain 설치

  NDK 설정을 완료하였다면 이제 Android NDK Standalone toolchain을 설치해야합니다.

Standalone toolchain은 NDK의 최근 버전부터 추가된 기능으로 이것을 사용하면 ndk-build 명령어 없이

기존의 configure-> make를 사용하던 컴파일 과정을 그대로 사용해서 라이브러리를 컴파일 할 수 있다고 합니다.

  Cygwin을 사용하여 android-ndk-r10b 디렉토리에서 

$ build/tools/./make-standalone-toolchain.sh --ndk-dir=. --platform=android-9 --install-dir=/cygdrive/c/my-android-toolchain

를 실행합니다.


3. FFMpeg 다운로드

  FFMpeg 홈페이지(http://ffmpeg.org/download.html)에 접속하여 최신 버전의 FFMpeg를 다운받습니다.

다운받은 FFMpeg를 압축 풀때는 되도록 Cygwin상에서 tar -xvfz 명령어를 사용하거나 7zip 같은 프로그램을 통해 압축을 풀어줍니다.


4. 프로젝트 생성

  프로젝트를 생성하고 jni 폴더 생성 후 jni 폴더에 압축 푼 FFMpeg 폴더를 통채로 옮겨 줍니다. 후에 폴더명을 ffmpeg로 변경합니다. 


※ 될 수 있으면 FFMpeg 프로젝트 폴더의 길이는 짧게 잡는것이 좋습니다.


Posted by 시크한공돌이
,

■ 안드로이드에서 C++로 구성된 API를 사용하기 위해 NDK를 설치 및 설정 하는법을 알아봅시다.

- 안드로이드에서 NDK를 사용하기 위해 먼저 Cygwin을 설치해야합니다.

시그윈 홈페이지(http://cygwin.com/install.html)에서 자신의 CPU에 맞는 bit의 설치 파일을 받고 설치를 시작합니다.

 다운로드가 완료되었으면 다음과 같이 진행합니다.



[ 설치 화면 1]

  다음을 선택합니다.


[ 설치 화면 2 ] 

  인터넷을 통한 설치를 누릅니다.



[ 설치 화면 3 ]

  시그윈을 설치할 디렉토리를 지정합니다.



[ 설치 화면 4 ]

  시그윈의 설치 패키지 파일들을 설치할 디렉토리를 지정해 줍니다. 원하는 디렉토리를 선택하시면 됩니다.



[ 설치 화면 5 ]

 설치 패키지 다운로드 방법을 선택합니다. 직접 접속을 선택합니다.



[ 설치 화면 6 ]

 패키지 파일을 받아올 서버를 선택합니다. 기본 서버는 모두 외국 서버이기 때문에 국내에서 지원하는 http://ftp.daum.net/cygwin 를 ADD를 통해서 추가하고 선택해 줍니다.



[ 설치 화면 7 ]

 이제 설치할 패키지를 선택해줍니다. Devel의 Default를 선택하면 Install로 변경되고 이 상태에서 다음을 선택합니다.


[ 설치 화면 8 ]

  패키지를 선택하면 설치 화면으로 넘어가게 됩니다. 이 부분에서 매우 많은 시간이 소모되므로 설치하면서 다른 유익한?! 일들을 하시면 되겠습니다.



[ 설치 화면 9 ]

 설치가 완료되면 다음과 같은 화면이 나옵니다. 여기서 마침을 누르면 완료가 됩니다.


■ 이제 설치가 완료되었다면 환경 설정을 해볼까요??

  환경 설정을 위해 [내컴퓨터] -> [속성] -> [고급] -> [환경변수] 에서 시스템 변수의 Path 값을 편집합니다.

C:\cygwin\bin;

C:\cygwin\usr\include;

두 라인을 등록해 주어야 합니다.



[ 환경 설정 ]


  환경 설정을 위와 같이 하게 됩니다.

환경 설정을 끝내고 Cygwin을 실행하여 봅니다.



[ Cygwin 터미널 화면 ]


  Cygwin 설치가 완료되었습니다.


■ 이제 NDK를 설치해 봅시다.

  안드로이드 사이트(http://developer.android.com/tools/sdk/ndk/index.html#Installing)에서 각자 컴퓨터의 사양에 맞는 NDK를 다운받습니다.


[ 안드로이드 NDK 다운로드 페이지 ]

 다운받은 ndk 압축파일을 해제하고 (C:\cygwin\home\사용자계정)으로 복사해줍니다.



[ .bashrc 파일 수정 ]

 이제 해당 디렉토리에 있는 .bashrc 파일을 이클립스로 편집해 줍니다. 

해당 파일 끝에 export ANDROID_NDK_ROOT=/home/사용자계정/ndk버전을 추가해 줍니다.

ex) export ANDROID_NDK_ROOT=/home/Administrator/android-ndk-r9c


모든 설정이 완료되었다면 NDK의 위치를 환경변수에 추가해줍니다.

C:\cygwin\home\Administrator\android-ndk-r9c; (C:\cygwin\home\사용자계정\android-ndk-r9c)


이렇게 되면 모든 NDK 빌드 설치 및 설정이 완료됩니다.


※ 이클립스에서 NDK 빌드하기는 제 지인의 블로그인 아래를 참고합니다.

1. NDK 기본 예제

2. 이클립스에서 NDK 빌드설정


Posted by 시크한공돌이
,



■ 이번 장에서는 안드로이드에 새 프로젝트를 만들어보겠습니다.

 안드로이드 새 프로젝트를 만들고 HelloWorld를 찍어봅시다.



[ 안드로이드 새 프로젝트 만들기 ]


  안드로이드의 새 프로젝트를 만들기 위해 File -> New -> Android Application Project 를 선택합니다.

선택하면 다음과 같은 창이 뜨게 되는데요.



[ 새로운 프로젝트 생성창 ]


  어플리케이션의 이름과 프로젝트 이름을 써주면 자동으로 패키지 네임이 생성됩니다. 원하는 타깃에 따라 Minimum Required SDK 레벨과 Target SDK를 설정해주세요. 그 후 Next를 계속 클릭하고 Finish를 누르면 빈 Activity를 가지는 새 프로젝트가 생성됩니다.



[ 안드로이드 어플리케이션 실행하기 ]


  그림과 같이 안드로이드 어플리케이션을 실행합니다.




[ 프로젝트를 에뮬레이터에서 실행한 모습 ]


  그림과 같이 Hello world! 를 표시하는 앱이 에뮬레이터에서 실행된 모습을 볼 수 있습니다.


  여기까지 1. 안드로이드 SDK 설치2. AVD 설정, 3. 새로운 프로젝트 생성 및 실행 까지 모두 해보았습니다.

이제 남은것은 여러분이 응용하여 앱을 만드는 일입니다!!



Posted by 시크한공돌이
,



■ SDK를 모두 설치 했다면 이제 안드로이드 가상 디바이스인 AVD를 설정해 보겠습니다.


[ ADV 매니저 실행하기 ]



 AVD는 안드로이드 가상 에뮬레이터 입니다. 직접 폰에 설치할 수 없거나 간단한 앱을 실행할때 중요합니다. 그림과 같이 AVD 매니저를 열고 Create 버튼을 눌러 새로운 AVD를 만듭니다.



[ AVD 설정창 ]


  아래의 그림과 같이 각 설정을 맞춰줍니다.



[ AVD 설정 ]


  설정 후 OK를 누르면 AVD 설정이 끝나게 됩니다.



Posted by 시크한공돌이
,



■ 안드로이드 ADT 설치법을 알아볼까요??

- 안드로이드를 받기위해 먼저 구글의 안드로이드 디벨로퍼스 사이트(http://developer.android.com/index.html)로 가야합니다.


[ 안드로이드 Developer site ]


안드로이드 개발자 사이트에서 ADT 다운로드를 위해 Get the SDK(http://developer.android.com/sdk/index.html) 링크로 들어갑니다.



[ 안드로이드 SDK 다운로드 페이지 ]


  다운로드 페이지에서 Download Eclipse ADT(http://developer.android.com/sdk/index.html#win-bundle)를 선택하여 ADT 다운 페이지로 들어갑니다.



안드로이드 SDK 다운로드 페이지2 ]


  라이선스 동의를 누르고 자신의 컴퓨터가 32bit 인지 64bit 인지 선택한 후 다운로드를 눌러 다운받아줍니다.

다운을 모두 받고 압출을 해제하였다면 Eclipse ADT를 실행해 줍니다.



[ 이클립스 ADT 실행화면 ]


  화면에서 빨간 원 부분의 Android SDK Manager를 실행하면 다음과 같은 화면을 볼 수 있습니다.



[ 안드로이드 SDK 메니저 ]


  여기서 원하는 툴과 API를 선택하여 설치해줍니다.


여기까지 했다면 모든 설치는 끝입니다. 다음 단계인 2. 안드로이드 가상머신 AVD 설정을 기대해주세요~




Posted by 시크한공돌이
,

■ 시작하기에 앞서

- 요즘들어 시스템을 많이 보고있습니다. 


 시스템은 알면 알수록 멀리 도망가는것 같은데요.



 최근에 리눅스와 안드로이드 그래픽 출력단 frame buffer 등에 관련된 부분들이 관심이 가기때문에!!


그렇기 때문에 결론이 뭐냐하면!! 안드로이드 SurfaceFlinger와 Frame buffer driver 부분을 공부하겠다는 거죠 뭐 ㅋㅋ

Posted by 시크한공돌이
,