2009-03-23 6 views
6

Tôi đang phát triển trình phát âm thanh và đã khai báo trình nghe gián đoạn để lưu trạng thái của bài hát khi xảy ra gián đoạn - như cuộc gọi đến hoặc tin nhắn.Xử lý gián đoạn với Hàng đợi âm thanh

Đây là mã có liên quan

Trong appdelegate của tôi, tôi có điều này

AudioSessionInitialize (NULL, NULL, interruptionListenerCallback, self); 
AudioSessionSetActive(YES); 

Đây là những gì người nghe gián đoạn trông giống như

void interruptionListenerCallback (void *inUserData, UInt32 interruptionState) { 
// This callback, being outside the implementation block, needs a reference 
//to the AudioPlayer object 
MyPlayer *player = (MyPlayer *)inUserData; 

if (interruptionState == kAudioSessionBeginInterruption) { 
    if ([player audioStreamer]) { 
     // if currently playing, pause 
     [player pausePlayback]; 
     player.interruptedOnPlayback = YES; 
    } 

} else if ((interruptionState == kAudioSessionEndInterruption) && player.interruptedOnPlayback) { 
    // if the interruption was removed, and the app had been playing, resume playback 
    [player resumePlayback]; 
    player.interruptedOnPlayback = NO; 
} 

}

Khi tôi nhận được một cuộc gọi điện thoại người nghe bị gián đoạn được gọi và nếu người dùng từ chối cuộc gọi phương pháp tiếp tục phát lại cũng được gọi. Nhưng trước khi phương pháp resumePlayback được gọi, tôi nhận được lỗi này trong giao diện điều khiển cho AudioQueueEnqueueBuffer

error: tca! error int: 560030580

Có ai có một ý tưởng về làm thế nào để xử lý một cách chính xác gián đoạn âm thanh khi streaming file âm thanh.

Cảm ơn.

Trả lời

0

Có vẻ với tôi như bạn đang thiết inUserData như appdelegate của bạn thay vì nghe nhạc của bạn.

2

! Hành động là kAudioSessionNotActiveError, khai báo trong AudioServices.h, với những nhận xét

"Các hoạt động đã thất bại vì AudioSession không hoạt động. Calling AudioSessionSetActive (true) đầu tiên sẽ khắc phục lỗi này trong hầu hết các trường hợp."

Bạn cũng gặp lỗi này khi bạn gọi AudioQueueStart() sau một gián đoạn (như tôi đã phát hiện ra hôm nay).

+0

Trong trường hợp của tôi, điều này là do tôi đã dừng phiên trước khi tạm dừng trình phát AVPlayer. – Drew