2010-03-23 3 views
2

Я разрабатываю приложение, которое использует потоковое аудио. Для потоковой передачи аудио из Интернета я использую класс AudioStreamer. В аудиопотоке есть четыре состояния isPlaying, isPaused, isWaiting и isIdle. Моя проблема заключается в том, что когда аудиопоток находится в состоянии «isWaiting», и в это время, если я получаю телефонный звонок, очередь аудио не выдаёт ошибку «Ошибка очереди аудио». У любого есть решение для этого? help ....iphone audio streaming

ответ

1

Прерывание - например, получение вызова - деактивирует аудио сессию. Вы должны в своем обработчике прерывания повторно активировать сеанс аудио, вызвав AudioSessionSetActive (true).

Посмотрите here для получения информации о обработчике прерывания.

Сказав это, я предположим, что вы используете mattgallagher's library. То, что нужно сделать, это поставить точку останова в AudioStreamer.m на линии 949 (строка после «err = AudioQueueStart (audioQueue, NULL)», - в - [пауза AudioStreamer].

Если err == kAudioSessionNotActiveError, то моя теория права , и вам нужно вызвать перезапуск сеанса аудио. Возможно, что-то вроде этого (но я только когда-либо просматривал этот код, поэтому, возможно, есть лучший способ решить проблему):

else if (state == AS_PAUSED) 
{ 
    err = AudioQueueStart(audioQueue, NULL); 
    if (err) { 
    err = AudioSessionSetActive(true); 
    if (err) { 
     [self failWithErrorCode:AS_AUDIO_QUEUE_START_FAILED]; 
     return; 
    } else { 
     err = AudioQueueStart(audioQueue, NULL); 
     if (err) { 
     [self failWithErrorCode:AS_AUDIO_QUEUE_START_FAILED]; 
     return; 
     } 
    } 
    } 
}