안드로이드 SDK 진져브레드 버전에 포함되어 있는 SipDemo 예제를 빌드하고 진져브레드 폰에 설치해서 테스트하면 별 문제 없이 동작할 것으로 예상했다. 그런데 동작하지 않는다. 왜 그런지 살펴 보는 과정에서 확인한 내용들을 여기에 정리해 보았다.
참고로 SIP API는 오디오 전송을 위하여 RTP API를 사용하고 있다.
1. 안드로이드 API 레벨에 따른 RTP/SIP API 지원 여부
안드로이드 API 문서를 살펴 보면 RTP와 SIP 패키지 API에 대해서 아래와 같이 API 레벨을 표시하고 있다.
http://developer.android.com/reference/packages.html
package android.net.rtp ==> Since: API Level 12
package android.net.sip ==> Since: API Level 9
그리고 안드로이드 API 레벨을 소개하는 문서에서는 플랫폼 버전, 버전 코드, 그리고 API 레벨간의 관계를 표시한 표를 볼 수 있다. 이 글과 관련된 부분을 인용하면 아래와 같다.
http://developer.android.com/guide/appendix/api-levels.html
Android 3.1 12 HONEYCOMB_MR1
Android 3.0 11 HONEYCOMB
Android 2.3.4 10 GINGERBREAD_MR1
Android 2.3.3
Android 2.3.2 9 GINGERBREAD
Android 2.3.1
Android 2.3
즉 문서상의 내용에 따라 아래와 같이 예상해 볼 수 있다.
- 진져브레드 버전부터 SIP API를 사용하여 오디오를 송수신하는 것이 가능하다.
- 허니콤MR1 버전부터 RTP API를 사용하여 오디오를 송수신하는 것이 가능하다.
2. API 레벨 10과 12인 장치에서 RTP와 SIP 동작 테스트
테스트를 위해 가지고 있는 두 장치 각각의 플랫폼 버전과 API 레벨은 다음과 같다.
장치1: Android 3.1 12
장치2: Android 2.3.3 10
먼저 SIP API 동작 여부를 테스트하기 위하여 안드로이드 SDK에 포함되어 있는 SipDemo 예제를 사용하여 audio call을 테스트해 보았다. Android 3.1 장치에서는 정상적으로 동작하였다. 그러나 Android 2.3.3 장치에서는 아래 부분, 즉 SipManager 인스턴스를 얻는 과정에서 null이 반환되었다. 이유는 시스템에서 지원하지 않는다는 것이다.
SipManager sipManager = SipManager.newInstance(context);
이번에는 SIP API를 사용하지 않고 직접 RTP API를 사용해서 테스트해 보았다. 그 결과 Android 3.1, Android 2.3.3 두 장치 모두 정상적으로 동작하였다. 물론 이를 위해서는 테스트 프로그램의 속성을 아래와 같이 지정해야 성공적으로 컴파일하고 두 장치에 설치할 수 있다.
target sdk version: 12
min sdk version: 9
이와 같은 결과를 토대로 다음 두 가지 사항을 추정하는 것이 가능하다.
- SIP API는 비록 API level 9부터 공개되었지만, 시스템에서는 지원하지 않는다. 물론 지원하는 시스템이 있을 수도 있다.
- RTP API는 비록 API level 12부터 공개되었지만, 하위 버전의 시스템에서도 이미 지원하고 있다.
아마도 구글 레프런스폰에서는 진져브레드 폰부터 SIP API가 제대로 동작했을 것이다. 그렇지 않다면 SDK에 SipDemo 예제를 넣을 필요가 없기 때문이다.
'소 예 공 방' 카테고리의 다른 글
HTTP 1.1 메시지 형식 (0) | 2012.09.18 |
---|---|
VirtualBox에서 Ubuntu (64 bit) 설치하기 (0) | 2012.08.23 |
[고군분투기] 명령행으로 안드로이드 앱 빌드하기 (0) | 2011.11.26 |
[고군분투기] bash에서 파일 경로로부터 파일 이름 얻기 (0) | 2011.11.20 |
생물정보학에서 정규표현식 실습하기 (0) | 2011.10.25 |