При воспроизведении аудио с использованием AVAudioPlayer, будь то mp3 или wav, я получаю исключение на всех iPad и iPhone 4S и только на iOS 9. Этого не происходит ни на каких других устройствах.
Возникает исключениес
com.apple.coreaudio.AQClient (18): breakpoint 2.2
с
libc++abi.dylib`__cxa_throw:
и я ловлю его, используя точку останова пользователя.$ arg1 ничего не содержит
Вот как я инициализирую AVAudioPlayer
guard let path = Bundle.main.path(forResource: file, ofType: type) else { return nil }
guard let url = URL(string: path) else { return nil }
try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient, with: .mixWithOthers)
try? AVAudioSession.sharedInstance().setActive(true)
return try? AVAudioPlayer(contentsOf: url)
Я играю звук из асинхронной очереди глобальной отправки, а метод воспроизведения звука содержит
self.sound?.prepareToPlay()
self.sound?.play()
Первоначально файл представлял собой файл wav, поэтому я преобразовал его в файл mp3, что не помогло.Я также использовал совершенно другой звук, который выдает те же исключения.
Само исключение не приводит к сбою симулятора, хотя Rollbar сообщает об ошибках SIGSEGV с такими следами:
libAVFAudio.dylib in 0x27c1c000
Используемый класс аудио:
import AVFoundation
import Foundation
class Audiotools {
var sound: AVAudioPlayer?
let dispatchQueue = DispatchQueue(label: "audio")
static var shared: Audiotools = {
let manager = Audiotools()
return manager
}()
init() {
self.sound = configurePlayer(withFile: Files.sound.name, type: Files.sound.extension)
}
func configurePlayer(withFile file: String, type: String) -> AVAudioPlayer? {
guard let path = Bundle.main.path(forResource: file, ofType: type) else { return nil }
guard let url = URL(string: path) else { return nil }
try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient, with: .mixWithOthers)
try? AVAudioSession.sharedInstance().setActive(true)
return try? AVAudioPlayer(contentsOf: url)
}
func playSound() {
self.dispatchQueue.async {
self.sound?.prepareToPlay()
self.sound?.play()
}
}
}
Другой отчет Rollbar:
SIGSEGV: Application terminated
libsystem_platform.dylib in _platform_memmove
AudioToolbox in Cached_DataSource::ReadFromHeaderCache(long long, unsigned int, void*, unsigned int*)
AudioToolbox in Cached_DataSource::ReadBytes(unsigned short, long long, unsigned int, void*, unsigned int*)
AudioToolbox in AudioFileObject::ReadBytes(unsigned char, long long, unsigned int*, void*)
AudioToolbox in AudioFileObject::ReadPacketDataVBR(unsigned char, unsigned int*, AudioStreamPacketDescription*, long long, unsigned int*, void*)
AudioToolbox in AudioFileReadPacketData
AVFAudio in AVAudioPlayerCpp::AQOutputCallbackCore(OpaqueAudioQueue*, AudioQueueBuffer*)
AVFAudio in AVAudioPlayerCpp::prepareToPlayQueue()
AVFAudio in AVAudioPlayerCpp::playQueue(AudioTimeStamp const*)
AVFAudio in AVAudioPlayerCpp::play()
AVFAudio in -[AVAudioPlayer play]
У кого-нибудь еще была такая проблема?