실현 된 SLPlayItf
개체를 파괴하지 않고 오디오 플레이어의 URI를 변경하려고합니다.SLPlayItf를 다시 만들지 않고 OpenSL을 변경하는 URI
나는 코드에서이 같은있어 :
static SLDataSource audioSrcOne;
static SLDataLocator_URI locUriOne;
void initialize_player_with_streamOne()
{
...
locUriOne.locatorType = SL_DATALOCATOR_URI;
locUriOne.URI = (SLchar *) streamOne->utf8;
SLDataFormat_MIME format_mime = { SL_DATAFORMAT_MIME, NULL, SL_CONTAINERTYPE_UNSPECIFIED };
audioSrcOne.pLocator = (void *)&locUriOne;
audioSrcOne.pFormat = (void *)&format_mime;
...
result = (*engine->engineEngine)->CreateAudioPlayer(engine->engineEngine, &(streamOne->playerObject), &audioSrcOne, &audioSnkOne, 3, idm, reqm);
assert(SL_RESULT_SUCCESS == result);
...
}
나는 SLDataSource
과 SLDataLocator_URI
포인터로 OpenSL 보내졌다 생각했다. 간단히 변경하면 새 URL이 설정됩니다.
LOGV("STREAM ONE RESET - Configuring audio source %s", streamOne->utf8);
locUriOne.URI = (SLchar *) streamOne->utf8;
LOGV("STREAM ONE RESET - %s", locUriOne.URI);
URI가 새로운 문자 배열을 가리키고있는 것을 볼 수 있지만 오디오 플레이어는 여전히 이전 것을 재생하고 있습니다.
누군가 오디오 플레이어를 손상시키지 않고 현재 URL을 바꾸는 방법에 대해 알고 있습니까?
PS : URL을 변경하기 전에 SL_PLAYER_STOPPED를 버퍼와 플레이어 개체 모두에 보냈습니다. 또한 버퍼 지우기. 그러나 이것은 문제를 해결하지 못했습니다.
PSS : 왜 내가 이전 오디오 플레이어를 파괴하고 새로운 오디오 플레이어를 만들지 묻겠습니다. 음 그 대답은, 상투적 인 표현은 파괴와 창조 모두에있어서 너무 크다. 게다가 파괴/생성은 내 취향에 너무 많은 시간이 걸립니다. 나는 현재 생성 된 객체를 다시 사용하는 것을 선호한다. 또한 두 번째 오디오 플레이어를 만들 때 첫 번째 오디오 플레이어를 파괴 할 수 없습니다. 네이티브 Destroy()
명령이 스레드를 중단시키고 코드가 더 이상 응답하지 않습니다.