Tôi đang viết Ứng dụng iOS bằng cách sử dụng AudioQueue để ghi. Tôi tạo một hàng đợi đầu vào được cấu hình để lấy PCM tuyến tính, đã nêu hàng đợi này và mọi thứ hoạt động như mong đợi.Không thể khởi động lại hàng đợi đầu vào âm thanh bị gián đoạn ở chế độ nền trên iOS
Để quản lý gián đoạn, tôi đã triển khai phương thức ủy quyền của AVAudioSession để bắt đầu và kết thúc gián đoạn. Phương thức endInterruption trông giống như sau:
- (void)endInterruptionWithFlags:(NSUInteger)flags;
{
if (flags == AVAudioSessionInterruptionFlags_ShouldResume && audioQueue != 0) {
NSLog(@"Current audio session - category: '%@' mode: '%@'",
[[AVAudioSession sharedInstance] category],
[[AVAudioSession sharedInstance] mode]);
NSError *error = nil;
OSStatus errorStatus;
if ((errorStatus = AudioSessionSetActive(true)) != noErr) {
error = [self errorForAudioSessionServiceWithOSStatus:errorStatus];
NSLog(@"Could not reactivate the audio session: %@",
[error localizedDescription]);
} else {
if ((errorStatus = AudioQueueStart(audioQueue, NULL)) != noErr) {
error = [self errorForAudioQueueServiceWithOSStatus:errorStatus];
NSLog(@"Could not restart the audio queue: %@",
[error localizedDescription]);
}
}
}
// ...
}
Nếu ứng dụng bị gián đoạn trong khi ở mặt trước, mọi thứ hoạt động chính xác. Vấn đề xuất hiện, nếu sự gián đoạn xảy ra ở chế độ nền. Kích hoạt kết quả phiên âm thanh trong các lỗi mèo:
Các quy định âm thanh loại phiên không thể được sử dụng cho các hoạt động âm thanh đã cố gắng. Ví dụ: bạn đã cố phát hoặc ghi âm với danh mục phiên âm thanh được đặt thành kAudioSessionCategory_AudioProcessing.
Bắt đầu từ hàng đợi mà không kích hoạt các kết quả phiên mã lỗi: -12985
Tại điểm đó hạng mục được thiết lập để AVAudioSessionCategoryPlayAndRecord và chế độ là AVAudioSessionModeDefault.
Tôi không thể tìm thấy bất kỳ tài liệu nào cho thông báo lỗi này, cũng như không thể khởi động lại hàng đợi âm thanh đầu vào trong nền.
Tôi nghĩ vậy. :-( –