상세 컨텐츠

본문 제목

AllJoyn Audio Service for Android

Dev.Stroy/IoT

by zNine 2014. 7. 17. 13:16

본문

728x90
반응형

1. Intro

- AllJoyn은 퀄콤에서 개발된 IoT를 위한 SW 플랫폼이다.

- 플랫폼이라고 안드로이드 처럼 거대한 것은 아니며, Network 연동을 필요로하는 SW 개발 시 connection, socket open, broad cast 등의 low level 함수를 호출에 대한 전반적인 내용들을 SDK로 포함시켜 C, C++, Java(Android), Obj-C 등에서 API로 사용가능하게 했다.

- OpenSource 이며, 바이너리 SDK도 제공하고 있다.

- 여기서는 Audio Service를 다루도록 하겠다.


2. About AllJoyn Audio Service

- AllJoyn에서 Audio를 제외한 서비스 SDK(Onboarding, Control Panel, Notification 등)은 별개의 SDK로 제공하고 있으나 Audio Service는 따로 바이너리로 제공하고 있지 않다.

- WAV 포맷만 지원하고 있고, 요구 사항에 따라 다양한 개발이 필요로 해서 일까..

- 그래서 나는 MP3 디코딩를 추가했으며, MetaData Source, Image Source 도 구현해야 했다.

- How-to: https://allseenalliance.org/docs-and-downloads/documentation/getting-started-alljoyn-audio-service-framework-10-android

- Spec: https://allseenalliance.org/docs-and-downloads/documentation/alljoyn-audio-service-framework-10-interface-specification

- Audio Service를 위해서는 두개의 앱이 필요하다. Sender(Player) 와 Receiver(Sink) 이다.

- 기본적으로 1(Sender):N(Receiver) 구현이 가능하다. 삼성에서 광고했던 여러 폰에서 동시에 플레이되는 그런것..


3. Make Sender(Player)

- 기본적으로 제공하는 포맷은 WAV이며, 각 Receiver 마다 하나의 Sender 쓰레드에서 파일을 직접 읽어서 보내주는 방식이다.

- 하지만 MP3는 그냥 보내서 플레이 할 수 없다. WAV로 디코딩을 해야한다.

- 그래서 재생 할 MP3 파일을 디코딩 -> 파일로 저장해서, 이 저장된 파일을 보내도록 했다.

- Nexus5 로 MP3 파일(3:30)초 짜리를 디코딩 할 경우 4~5초 정도 걸린다.

- MetaData 는 Android 에서 쉽게 가져올 수 있으므로 이를 JNI 로 내려보낸 후 쓰레드에서 보내도록 했다.

- Image(앨범아트) 또한 Android 에서 쉽게 가져올 수 있다. 안드로이드에서 저장 -> Player에서 보내도록 했다.

- 동기화는 기존의 알고리즘을 사용하되, 디코딩 완료를 위한 Pool을 구현해야해서, 약간 수정이 있었다.


4. Make Receiver(Sink)

- 기존의 코드를 최대한 유지하는 방향으로 잡았다. (다른 AllJoyn Audio Player와의 호환성을 위해서..는 개뿔;;;)

- Sender와 달리 MetaData, Image Sink를 위한 Object는 소스가 제공되었다.

- 이를 받아서 Android App으로 전달하는 부분을 구현했고,

- 재생 중일 때에는 다른 접속을 막도록 수정했다. (default는 항상 다른 접속을 허용토록 되어있다. 이럴 경우 기존 접속을 끈긴다.)


5. Build

- Audio Service 코드 빌드를 위해서는 AllJoyn core 소스가 있는 기본 소스가 필요하다.

# git clone https://git.allseenalliance.org/gerrit/core/alljoyn

- Audio Service 코드도 필요하겠지.

# cd alljoyn/services

# git clone https://git.allseenalliance.org/gerrit/multimedia/audio

- 빌드 시 Scons를 사용한다. (각자 환경에 맞게 할것)

# scons OS=android CPU=arm BINDINGS=core,cpp SERVICES=about,audio BUILD_SERVICES_SAMPLES=off WS=off ANDROID_NDK=/Android/android-ndk-r9d ANDROID_SRC=/JELLYBEAN_SDK VARIANT=debug


6. Ending

- 여기서는 간략하게 정리한 내용을 다뤘으며, 구체적인 구현 내용은 추후 다시 남길 예정이다.



728x90
반응형

'Dev.Stroy > IoT' 카테고리의 다른 글

Build Controlpanel Service application for Android  (0) 2014.10.23

관련글 더보기