서브메뉴

본문

안드로이드 미디어 프레임워크
안드로이드 미디어 프레임워크
저자 : 김태연|이왕재|이선진|장우현|박지훈
출판사 : 개발자가행복한세상
출판년 : 2012
ISBN : 9788996603115

책소개

『안드로이드 미디어 프레임워크』는 《인사이드 안드로이드》에서와 마찬가지로 구글 IO 2008에서 Patrick Brady가 발표한 Anatomy & Physiology of an Android에 기초하고 있다. 전편이 안드로이드 생리학(Physiology)에 중점을 두고 쓰여졌다면 후편은 안드로이드 해부학(Anatomy)에 중점을 두고 작성되었다. 특히, 네이티브 시스템 서비스 중 안드로이드 플랫폼만의 특징인 오디오 플링어 서비스, 서피스 플링어 서비스, 미디어 프레임워크의 동작 메커니즘을 자세히 다루고 있다.
[교보문고에서 제공한 정보입니다.]

출판사 서평

"각고의 노력으로 간절히 소망한 안드로이드 미디어 프레임워크 전문서를 완성하다.”

“안드로이드로 계속 밥 먹고 살수 있나요?”

“네! 안드로이드는 이미 대세입니다. 관계형 데이터베이스가 지난 30년간 IT 업계에 중심에 있었던 것처럼, 안드로이드는 스마트 시대의 핵심 기술입니다."

최근 구글은 “Project Butter”라 명명된 프로젝트를 진행 중이다. 이 프로젝트의 목표는 iOS 수준으로 레이턴시를 줄이는 것으로 알려져 있다. 보고 있나 파!인!애플? 그렇다. 이제부터가 진검 승부다. 독자는 엔지니어로서 이 뜨거운 기예의 향연을 즐길 준비가 됐는가?
- 안드로이드 Surface & Media Day 컨퍼런스 中

안드로이드 미디어 프레임워크는 현업에 종사하는 저자들이 안드로이드 플랫폼이라는 생소한 개발환경과 구글의 빠른 버전업 및 사용자의 끊임없는 업그레이드 요구라는 척박한 개발 현실에서 온몸으로 느끼고 체험한 경험적 지식들을 고스란히 담아놓은 책이다. 또한, 방대한 안드로이드 플랫폼의 성공적인 분석을 목표로 도전하여 여러 번 실패하고 좌절해서 얻은 값진 결과물이다.

* 이 책에 쏟아진 찬사

“개인적으로 추천자는 국내에 이러한 수준의 책들이 나오는 것에 대해 매우 기쁘게 생각한다. 이 분야의 책들은 옥석이 분명한데 저자의 수준에 따라 그 옥석이 분명하게 가려진다. 그러한 의미에서 이 책은 보기 드문 수작이라 말할 수 있다. 필자는 앞으로도 이러한 깊이 있는 내용의 서적들이 많이 나오기를 바란다. 그래서 막 시작하는 엔지니어들을 올바른 길로 이끌어 줄 수 있고 우리나라 IT 발전에도 도움을 주었으면 하고 바란다. 마지막으로 이런 훌륭한 책이 나오기까지 잠 못잤을 저자들의 노고에 박수를 보내며 추천사를 마치고자 한다.”

- (주)누스코 대표 백창우(www.iamroot.org 운영자)

“개발현장에서 함께 살아 숨쉬는 안드로이드 책. 각 분야의 전문가들이 실제 개발현장에서 체득한 노하우를 바탕으로 생생하게 설명해주는 안드로이드 플랫폼 종결자! 현업에 종사하는 안드로이드 플랫폼 개발자 뿐만 아니라 앱 개발자에게도 적극 추천합니다.”

- 이덕희 LG전자 책임연구원

“안드로이드 개발자에게는 바이블 같은 책! 사내의 엔지니어들의 책상에서 가장 많이 볼 수 있는 책! 현업에서 가장 많은 도움이 되어 신입 사원이 들어오면 읽어 보라고 꼭 권하는 책! 어떤 업무를 하시던, 안드로이드에 대하여 자세히 알고 싶으신 분께 적극 추천 합니다. 안드로이드의 세상에 오신 것을 환영합니다.”

- 최순혁 LG전자 책임연구원

“안드로이드 앱을 만드는 책은 너무나 흔하다! 그러나 안드로이드 구조를 설명해주는 책은 전무했었다! 안드로이드 관련 업무를 처음 시작 했을 때 너무나 깜깜했다. 소스는 받을 수 있지만 그 누구도 안드로이드가 어떻게 동작하는지 알려주지 않았다. 이때 내게 한줄기 빛이 나타났으니! 그동안 책으로만 접했던 김태연님의 안드로이드 강의에 3일 동안 참여하여 직접 묻고 배울 수 있었다. 특히 어려워서 전혀 이해가 안갔던 바인더(binder)를 너무나 쉽고 재미있게 설명해 주셔서 큰 감동(?)과 희열을 느꼈다! 이 책을 통해 안드로이드를 분석하느라 속이 까맣게 타버린 다른 개발자들과 내가 느꼈던 그 희열을 함께 나눌수 있기를 기대한다”.

- 한경완 삼성전자 책임연구원

“안드로이드의 미디어 프레임워크 담당자라면 옆에 하나씩 두고 싶은 책! 고생해가며 하나씩 깨우친 내용들이 이 책엔 이미 다 있었다... 빨리 좀 나오지!”

- 김갑회 LG전자 선임연구원

“안드로이드 고급 개발자를 꿈꾸는 엔지니어를 위한 필독서! 혼자서는 절대 분석할 수 없는 다양한 고급 기술들을, 이해하기 쉬운 설명과 메타포로 풀어준다. 당신의 꿈을 이루어 줄 가이드로 추천한다.”

- 유재현 삼성전자 책임연구원

“많은 사람들이 일석이조의 효과를 얻기를 원하는데, 이 책은 일석이조가 아니라 일석삼조의 효과를 얻을 수 있는 책입니다. 첫번째로는 이 책에서 충실하게 설명하고 있는 안드로이드의 구조를 이해하여, 보다 좋은 안드로이드 앱을 만들 수 있는 능력을 배우는 것입니다. 두번째로는 이 책과 안드로이드 실제 소스를 비교를 하면서, 아키텍트와 실제 코드를 비교 분석을 하는 방법을 배우는 것입니다. 세번째로는 이 책을 통하여 안드로이드 코드를 흐름에 따라서 읽으면서, 수 많은 개발자들의 기술과 재치를 배울 수 있는 것입니다. 또한 저는 특정 기술 분야를 배우는 데에는 그 기술이 가장 많이 사용된 오픈 소스 코드를 분석하는 것 만큼, 확실하고 빠른 방법은 없다라고 생각합니다. 특히 디버깅을 하기에 어려우며, 관련 지식이 없으면 API 사용도 어려운 미디어라면 두말을 할 필요가 없습니다. 또한 대부분의 안드로이드 어플이 미디어 관련 기능을 사용하고 있으며, 안드로이드 기기 조차도 미디어 관련 성능으로 평가를 받는 지금에 있어서는 더욱 더 이 책을 읽고 관련 기술의 습득과 원리의 이해가 필요할 것 입이다. 지금 바로 안드로이드 코드를 다운 받고, 이 책의 첫 장을 넘기시기 바랍니다. 여러분들은 안드로이드의 구조와 사용된 기술들을 전수 받게 될 것입니다.”

- 권태윤 삼성전자 선임연구원
[교보문고에서 제공한 정보입니다.]

목차정보

안드로이드 미디어 프레임워크 목차

1장 안드로이드 아나토미

1.1 들어가며 3
1.2 책의 구성 4
1.3 안드로이드 아나토미 6
1.4 인사이드 안드로이드와의 연결성 9
1.5 본서의 서술 스타일 12

2장 안드로이드 시스템 서비스

2.1 시스템 서비스의 종류 25
2.1.1 네이티브 시스템 서비스 25
2.1.2 자바 시스템 서비스 26
2.2 시스템 서비스의 생성 27
2.2.1 서피스 플링어 프로세스의 실행 28
2.2.2 미디어 서버 프로세스의 실행 30
2.2.3 시스템 서버 프로세스의 실행 32
2.3 시스템 서비스 분석에 필요한 기본 지식 35
2.3.1 프로세스와 쓰레드 35
2.3.2 프로그래밍 지식 37
2.4 젤리빈 스페셜 이슈 40
2.4.1 오디오 레이턴시 43
2.4.2 렌더링 레이턴시 47
2.4.3 Jank Busting을 위한 은총알 51

3 장고급 바인더 IPC

3.1 바인더 IPC 개요 54
3.1.1 서비스 클라이언트와 서비스 서버 57
3.1.2 컨텍스트 매니저와 서비스 매니저 59
3.1.3 바인더 드라이버 60
3.2 구성요소간 상호작용 62
3.2.1 시스템 서비스 등록 63
3.2.2 시스템 서비스 검색 65
3.2.3 시스템 서비스 사용 67
3.3 네이티브 리모트 서비스 69
3.3.1 정방향 리모트 서비스 생성 71
3.3.2 역방향 리모트 서비스 생성 73
3.3.3 리모트 서비스 공유 74
3.3.4 정방향 리모트 서비스 예제 77
3.4 안드로이드 공유 메모리 80
3.4.1 공유 메모리 개요 81
3.4.2 애쉬맴 개요 85
3.4.3 애쉬맴 생성 (서비스 서버) 87
3.4.4 애쉬맴 사용 (서비스 클라이언트) 98
3.5 파일 식별자 전달 메커니즘 106
3.5.1 파일 식별자 전달 개요 106
3.5.2 애쉬맴 파일 식별자 요청 과정 107
3.5.3 애쉬맴 파일 식별자 반환 과정 111
3.6 MemoryHeapBase 리모트 서비스 114
3.6.1 MemoryHeapBase 리모트 서비스 구조 115
3.6.2 MemoryHeapBase 예제 애플리케이션 117
3.6.3 화면 캡쳐 요청 (서비스 클라이언트) 117
3.6.4 화면 캡쳐(서비스 서버) 120
3.6.5 공유 메모리 사용(서비스 클라이언트) 125
3.7 MemoryBase 리모트 서비스 129
3.7.1 MemoryBase 리모트 서비스 구조 131
3.7.2 MemoryBase 예제 애플리케이션 132
3.7.3 MemoryBase 생성(서비스 서버) 133
3.7.4 MemoryBase 사용(서비스 클라이언트) 135

4장 안드로이드 오디오 시스템

4.1 오디오 시스템의 개요 140
4.1.1 오디오 시스템의 역할 140
4.1.2 PCM 데이터 142
4.1.3 트랙과 플레이백 쓰레드 146
4.1.4 오디오 장치와 입출력 스트림 147
4.2 오디오 시스템의 구조 150
4.2.1 오디오 시스템 계층별 구성요소 150
4.2.2 오디오 시스템 아키텍쳐 156
4.2.3 오디오 HAL 구조 159
4.3 오디오 플링어 서비스 초기화 161
4.3.1 오디오 HAL의 결정 161
4.3.2 출력 스트림과 플레이백 쓰레드 생성 165
4.3.3 오디오 출력의 모든 것 (삽질과 굴삭기) 170
4.4 오디오 출력 172
4.4.1 오디오 출력 애플리케이션 173
4.4.2 오디오 출력의 동작 과정 175
4.4.3 트랙 생성 요청(서비스 클라이언트) 178
4.4.4 트랙 생성 과정(서비스 서버) 186
4.4.5 트랙 공유 메모리 생성 188
4.4.6 오디오 트랙 컨트롤 블록 생성 190
4.4.7 트랙 생성 196
4.4.8 트랙 공유 메모리 참조(서비스 클라이언트) 197
4.4.9 트랙 활성화 요청(서비스 클라이언트) 198
4.4.10 트랙 활성화 (서비스 서버) 200
4.4.11 PCM 데이터 출력 요청(서비스 클라이언트) 205
4.4.12 PCM 데이터 출력 준비(서비스 서버) 216
4.4.13 PCM 데이터 리샘플링과 믹싱 221
4.4.14 PCM 데이터 출력 233
4.5 오디오 입력 234
4.5.1 오디오 입력 구성 요소 234
4.5.2 오디오 입력 애플리케이션 235
4.5.3 레코드 트랙 생성 237
4.5.4 레코드 트랙 활성화(서비스 서버) 240
4.5.5 PCM 데이터 입력 241
4.6 오디오 정책 서비스 243
4.6.1 오디오 정책 서비스 개요 244
4.6.2 오디오 정책 서비스 구조 246
4.6.3 오디오 정책 HAL 구조 248
4.6.4 기본 오디오 정책 HAL 구조 분석 251
4.6.5 오디오 정책 서비스 초기화 253
4.6.6 기본 오디오 정책 HAL 초기화 255
4.7 오디오 서비스 259
4.7.1 오디오 서비스 개요 259
4.7.2 오디오 서비스 구조 260
4.7.3 오디오 시스템 서비스들 간의 상호 작용 263
4.8 출력 장치 제어 266
4.8.1 출력 장치 제어 구조 266
4.8.2 출력 장치 결정 270
4.8.3 이어폰 연결 시 출력 장치 변경 279
4.9 볼륨 제어 280
4.9.1 볼륨의 종류 280
4.9.2 볼륨 제어 흐름 281
4.9.3 무음 모드, 벨소리 모드 288

5장 서피스 플링어 서비스

5.1 서피스 플링어 서비스 소개 295
5.1.1 다양한 종류의 안드로이드 화면 295
5.1.2 서피스와 레이어 296
5.1.3 OpenGL ES, EGL 소개 301
5.1.4 텍스쳐 - EGL Image 303
5.1.5 프레임 버퍼와 픽셀 포맷 305
5.2 서피스 플링어 서비스 구조 308
5.2.1 서피스 플링어 서비스 계층별 구성요소 308
5.2.2 서피스 플링어 서비스 아키텍처 312
5.3 서피스 플링어 서비스 초기화 315
5.3.1 SurfaceFlinger 클래스의 인스턴스 생성 315
5.3.2 메인 디스플레이 초기화 318
5.3.3 네이티브 윈도우 생성 320
5.3.4 EGL 초기화 330
5.3.5 디스플레이 공유 메모리FRS 생성 331
5.3.6 이벤트 쓰레드 생성 333
5.3.7 부트 애니메이션 335
5.4 화면 출력 (노말 서피스) 338
5.4.1 애플리케이션의 화면 출력 339
5.4.2 서피스 플링어 서비스 연결 요청 342
5.4.3 서피스 플링어 서비스 연결(서비스 서버) 348
5.4.4 노말 서피스 생성 요청(서비스 클라이언트) 351
5.4.5 노말 서피스 생성(서비스 서버) 355
5.4.6 메시지 큐와 핸들러 생성 357
5.4.7 레이어 생성 362
5.4.8 BufferQueueFRS 리모트 서비스 생성 374
5.4.9 서피스 텍스처 생성 381
5.4.10 노말 레이어 초기화 384
5.4.11 리모트 서비스 생성 후 반환 390
5.4.12 SurfaceTextureClient 생성(서비스 클라이언트) 393
5.4.13 상태 변경 요청 (서비스 클라이언트) 399
5.4.14 상태 변경 (서비스 서버) 408
5.4.15 윈도우 속성 변경 (서비스 클라이언트) 415
5.4.16 윈도우 속성 변경(서비스 서버) 417
5.4.17 그래픽 버퍼 요청(서비스 클라이언트) 418
5.4.18 그래픽 버퍼 생성(서비스 서버) 425
5.4.19 노말 서피스 출력 (서비스 클라이언트) 433
5.4.20 노말 서피스 출력 (서비스 서버) 436
5.4.21 디스플레이 이벤트 동기화 441
5.4.22 레이어 합성과 화면 출력 449

6장 OpenMAX IL

6.1 OpenMAX 소개 458
6.2 OpenMAX IL 소개 460
6.2.1 안드로이드와 OpenMAX IL 460
6.2.2 OpenMAX IL 구성요소 462
6.3 OpenMAX IL 코어 464
6.3.1 OpenMAX IL 코어의 역할 464
6.3.2 OpenMAX IL 코어의 주요 API 466
6.3.3 OpenMAX IL 코어 매크로 함수의 동작 방식 470
6.3.4 OpenMAX IL 코어의 구현 예 472
6.4 OpenMAX IL 컴포넌트 478
6.4.1 OpenMAX IL 컴포넌트의 역할 479
6.4.2 OpenMAX IL 컴포넌트의 구조와 주요 API 480
6.4.3 OpenMAX IL 컴포넌트의 상태 483
6.4.4 OpenMAX IL 컴포넌트의 포트 491
6.4.5 OpenMAX IL 컴포넌트의 버퍼 496
6.4.6 OpenMAX IL 컴포넌트의 구현 예 506
6.5 OpenMAX IL 클라이언트 512
6.5.1 OpenMAX IL 클라이언트의 역할 513
6.5.2 OpenMAX IL 클라이언트를 사용한 응용 프로그램 514
6.5.3 OpenMAX IL 클라이언트 - 컴포넌트 준비 단계 517
6.5.4 OpenMAX IL 클라이언트 - 컴포넌트 실행 단계 524
6.5.5 OpenMAX IL 클라이언트 - 컴포넌트 해제 단계 529

7장 미디어 플레이어 서비스

7.1 미디어 플레이어 서비스 개요 534
7.1.1 미디어 플레이어 서비스의 개요 534
7.1.2 안드로이드 미디어 프레임워크 변천사 535
7.2 미디어 콘텐츠 537
7.2.1 미디어 코덱 537
7.2.2 미디어 컨테이너 포맷 540
7.2.3 미디어 콘텐츠 재생 542
7.3 미디어 프레임워크 구조 544
7.3.1 미디어 프레임워크 계층 및 구성 요소 544
7.3.2 미디어 플레이어 상태 머신 550
7.3.3 미디어 플레이어 서비스 구조 553
7.3.4 스테이지프라이트 플레이어 구조 556
7.4 미디어 재생 애플리케이션 557
7.4.1 미디어 재생 애플리케이션(PDK) 560
7.5 미디어 데이터 소스 설정(setDataSource()) 562
7.5.1 미디어 플레이어 서비스 연결 요청 564
7.5.2 미디어 플레이어 서비스 연결(서비스 서버) 568
7.5.3 미디어 데이터 소스 설정 570
7.5.4 StagefrightPlayer 생성 576
7.5.5 AwesomePlayer 생성 578
7.5.6 OMX 리모트 서비스 생성 580
7.5.7 DataSource(FileSource) 생성 및 초기화 587
7.5.8 MediaExtractor(MatroskaExtractor) 생성 590
7.5.9 MediaSource(MatroskaSource) 생성 및 초기화 597
7.6 디코더 준비(prepare()) 600
7.6.1 재생 준비 요청(서비스 클라이언트) 600
7.6.2 재생 준비(서비스 서버) 604
7.6.3 AwesomePlayer 이벤트 스케줄러 생성 608
7.6.4 OpenMAX IL 디코더 생성 요청(미디어 프레임워크) 613
7.6.5 OpenMAX IL 디코더 생성(OpenMAX IL) 618
7.6.6 OpenMAX IL 디코더 설정(미디어 프레임워크) 626
7.6.7 OpenMAX IL 디코더 초기화(미디어 프레임워크) 634
7.6.8 OpenMAX IL 디코더 버퍼 할당 요청 643
7.6.9 OpenMAX IL 디코더 버퍼 할당(OpenMAX IL) 649
7.6.10 OpenMAX IL 디코더 콜백 함수 호출(OpenMAX IL) 652
7.7 미디어 콘텐츠 재생(start()) 654
7.7.1 미디어 재생 요청(서비스 클라이언트) 658
7.7.2 미디어 재생(서비스 서버) 659
7.7.3 디코딩 시작 요청(미디어 프레임워크) 662
7.7.4 디코딩 시작(OpenMAX IL) 670
7.7.5 디코딩 결과 전달(미디어 프레임워크) 681
7.7.6 비디오 렌더러 생성(미디어 프레임워크) 684
7.7.7 오디오 렌더러 생성 및 소리 출력 689
7.7.8 영상 출력 697
7.7.9 미디어 재생의 모든 것 702
[교보문고에서 제공한 정보입니다.]