2011-01-06 3 views
4

시스템 출력, FM 라디오, 블루투스 헤드셋 등 다른 소스에서 오디오 데이터를 캡처 할 수 있는지 궁금합니다. 특히 캡쳐에 관심이 있습니다. FM 라디오에서 오디오를 듣고 전화와 무선 장치 사이의 원시 블루투스 통신을 신경 쓸 필요없이 모든 가능성을 조사했습니다. 안드로이드는 MIC의 오디오 녹음 만 허용합니다.Android의 다양한 내부 장치에서 오디오 녹음하기 (문서화되지 않은 API를 통해)

나는 안드로이드 소스 코드를 살펴본 결과 장치를 뿌리 뽑기 않고 백도어를 찾을 수 없었다. 당신은 다른 장치를 어떻게 사용하는지 (어쨌든 /dev/audio에 액세스하는 방법) NDK 또는 더 나은 방법을 사용하는 방법을 알고 있습니까? Java (아마도 Reflection?)라고 말하면서 오디오 스트림을 캡처하도록 시스템을 트릭합니다. FM 라디오. (제 경우에는 HTC Desire 용 앱을 개발하려고합니다)

PS. 그리고 문서화되지 않은 API를 사용하는 것에 반대하는 분들은 여기에 게시하지 마십시오. 개인적인 용도로 사용할 앱을 작성하고 있습니다. 또는 내가 발행 한 경우에도 호환되지 않는 것으로 경고 할 것입니다.

답변

5

나는 오디오 스택을 해독하는 데 꽤 많은 시간을 할애했다. 나는 당신이 libaudio를 납치하려고 시도 할 것이라고 생각한다. 많은 장치가 독점적 인 오디오 드라이버를 사용하기 때문에 하드웨어 (/ dev/*)에 직접 말하기가 어려울 것입니다. 이 점에 대해서는 아무 규칙도 없습니다.

그러나 /system/lib/libaudio.so 의해 제공된 오디오 하드웨어 추상화 층 (HAL)에http://source.android.com/porting/audio.html

안드로이드 시스템, 특히 audioflinger에서 설명 된 API를 노출한다 HAL이 libaudio에 사용 사용 가능한 장치를 찾고 라우팅을 처리하며 물론 PCM 데이터를 읽고 쓸 수 있습니다.

오디오 플링 거와 libaudio 간의 상호 작용을 하이재킹하고, 나중에 이름을 바꾸고, 실제 오디오를 장식하는 자신의 libaudio를 제공 할 수 있습니다. 그렇게하면 하드웨어에서 직접 처리하지 않는다면 FM 라디오 출력을 가로 채고 일어날 가능성을 기록 할 수 있어야합니다.

물론이 모든 작업에는 응원이 필요합니다. 이 일을 할 수 있다면 저에게 관심을 가져주세요.

+0

흠, 가능할 수도 있지만 위에서 언급 한 것처럼 나는 뿌리 뽑기를 좋아하지 않습니다. (아직 내 전화기를 뿌리 뽑지는 않았지만 실제로는 문제가되지 않습니다.) 어떤 방법 으로든 조금 더 기다릴 것이고, 뿌리 뽑기없이 그것을하는 방법에 대한 다른 제안이 없다면 나는 당신을 시도해 볼 수 있습니다. –

+0

응원과 별개로, 내가 생각할 수있는 유일한 백도어는 오디오 플링커와 개별 클라이언트 (audio_track_cblk_t) 간의 공유 메모리를 시도하고 탐지하는 것입니다. 그러나 이것이 가능하다는 것은 정말로 의심 스럽지만 어쨌든 글로벌 시스템 출력에 액세스 할 수는 없습니다. – olivierg

+0

링크가 현재 작동하지 않습니다. 대체 방법이 있습니까? – tomasb

관련 문제