2013-06-05 1 views
4

내가 고객의 장치에서 원인을 광범위한 로그 - 스팸을 생성 한 응용 프로그램 : I는 실시간 오디오 생성을위한 NDK 환경에서 OpenSL를 사용안드로이드 2.3.4, OpenSL ES 및 알 수없는 이유로 거대한 로그 스팸

. SLAndroidSimpleBufferQueueItf의 Enqueue() 함수를 사용할 때마다 앤드 로이드는 오디오 인터페이스에서 play() 호출을 암시 적으로 호출하기 때문에 로그 항목을 만듭니다.

이는 다음과 같습니다

bool SE::AudioOutputOpenSLES::enqueueBuffer(void* _buffer, unsigned int _byteSize) 
{ 
    SLresult result = (*bqPlayerBufferQueue)->Enqueue(bqPlayerBufferQueue, _buffer, _byteSize); 

    return(result == SL_RESULT_SUCCESS); 
} 

OpenSLES 그 호출에 대해 불평하고 SL_RESULT_SUCCESS를 반환하지 않습니다 내가 OpenSLES에 새로운 오디오 버퍼를 대기시킵니다 방법

........app start........ 
06-05 21:36:48.619: I/System.out(10081): Debugger has connected 
06-05 21:36:48.619: I/System.out(10081): waiting for debugger to settle... 
06-05 21:36:48.819: I/System.out(10081): waiting for debugger to settle... 
06-05 21:36:50.419: I/System.out(10081): waiting for debugger to settle... 
06-05 21:36:50.619: I/System.out(10081): waiting for debugger to settle... 
06-05 21:36:50.829: I/System.out(10081): debugger has settled (1491) 
// ....some other unimportant logging stuff was here .... 
06-05 21:36:53.359: D/execute(10081): Creating audio output OpenSLES 
06-05 21:36:53.369: D/AudioOutputOpenSLES(10081): Creating the engine 
06-05 21:36:53.369: D/AudioOutputOpenSLES(10081): Realizing engine 
06-05 21:36:53.369: D/AudioOutputOpenSLES(10081): retrieving engine interface 
06-05 21:36:53.369: D/AudioOutputOpenSLES(10081): Creating output mix 
06-05 21:36:53.369: D/AudioOutputOpenSLES(10081): Realizing output mix 
06-05 21:36:53.369: D/AudioOutputOpenSLES(10081): Configuring audio source 
06-05 21:36:53.369: D/AudioOutputOpenSLES(10081): Configuring audio sink 
06-05 21:36:53.369: D/AudioOutputOpenSLES(10081): Creating audio player 
06-05 21:36:53.379: D/AudioOutputOpenSLES(10081): realizing the player 
// Who is that? I assume Android itself.... 
06-05 21:36:53.379: D/AudioTrack(10081): Request AudioFlinger to create track 
06-05 21:36:53.379: D/AudioOutputOpenSLES(10081): Retrieving play interface 
06-05 21:36:53.379: D/AudioOutputOpenSLES(10081): get buffer queue interface 
06-05 21:36:53.379: D/AudioOutputOpenSLES(10081): registering buffer queue callback 
06-05 21:36:53.379: D/AudioOutputOpenSLES(10081): Retrieving effect send interface 
06-05 21:36:53.379: D/AudioOutputOpenSLES(10081): getting volume interface 
06-05 21:36:53.379: D/execute(10081): First process call... 
06-05 21:36:53.379: D/execute(10081): Will start playback 
06-05 21:36:53.379: D/play(10081): Starting playback 
// And the show starts here: Every time I Enqueue audio data in my C++ code, this log entry appears. 
06-05 21:36:53.379: D/AudioTrack(10081): start 0x1f7bf8 
06-05 21:36:53.389: D/AudioTrack(10081): start 0x1f7bf8 
06-05 21:36:53.409: D/AudioTrack(10081): start 0x1f7bf8 
06-05 21:36:53.609: D/AudioTrack(10081): start 0x1f7bf8 
06-05 21:36:53.629: D/AudioTrack(10081): start 0x1f7bf8 
06-05 21:36:53.679: D/AudioTrack(10081): start 0x1f7bf8 
06-05 21:36:53.739: D/AudioTrack(10081): start 0x1f7bf8 
06-05 21:36:53.759: D/AudioTrack(10081): start 0x1f7bf8 
06-05 21:36:53.819: D/AudioTrack(10081): start 0x1f7bf8 
....... and so on 

이입니다.

나는 조금 주위에 인터넷 검색 및 로그 항목이 내가 여기에있는 안드로이드 소스 AudioTrack에서 오는 것을 발견 : 시작() 함수의 시작 부분에서

https://android.googlesource.com/platform/frameworks/base/+/android-2.2.3_r2.1/media/libmedia/AudioTrack.cpp

로깅입니다 :

LOGV("start %p", this); 

하지만 새로운 버퍼가 대기열에 들어갈 때마다 OpenSL에서 play()를 호출하도록하는 이유는 무엇입니까? http://www.khronos.org/registry/sles/specs/OpenSL_ES_Specification_1.0.1.pdf

On Page 174 "플레이어가 SLPlayItf 인터페이스 [8.32 절 참조]에 의해 제어되는 SL_PLAYSTATE_PLAYING 상태에있을 때 버퍼를 추가하면 암시 적으로 재생이 시작됩니다 큐에 불충분 한 버퍼로 인해 기아가 발생하면 오디오 데이터의 재생이 중지되고 플레이어는 SL_PLAYSTATE_PLAYING 상태를 유지합니다. 추가 버퍼를 대기열에 넣으면 오디오 데이터 재생이 다시 시작됩니다. 대기중인 버퍼의 기아로 인해 오디오 데이터 스트림의 틈새가 있습니다. 플레이어가 재생 상태가 아닌 경우 버퍼를 추가해도 오디오 재생이 시작되지 않습니다. "

전화가 찌그러지지 않기 때문에 오디오가 여전히 n 좋게 그리고 문서의이 설명은 항상 암시 적으로 재생을 시작하는 것처럼 들리므로 실제로이 로그 스패밍을 방지 할 수있는 기회가 없다는 것을 의미합니다.

아이디어가 있으십니까? 최종 고객은 로그에 방해되는하지만 난 그냥 무시하는 로그 캣에서 필터를 만드는 이유 제조 업체 제조 업체에서, 안드로이드의 버전으로 버전에서 많은 변화를 따라

답변

0

이럴 ..

나는 확실하지 않다 .. 특히 스팸의 출처가 android의 출처 인 경우 간단한 솔루션이 가장 좋습니다.

+0

이것은'^ ((? AudioTrack). * *'필터 일 것이고, AudioTrack 문자열을 가진 로그는 무시할 것입니다. – paakjis

0

대부분 장치의 공급 업체에 따라 다릅니다. 다른 기기에서 시도해보십시오. 로그를 볼 수는 없지만 다른 로그가 표시 될 수 있습니다. LogCat에 필터를 추가하는 것 외에는 아무 것도 할 수 없습니다.

관련 문제