AVPlayer не възпроизвежда файл, записан с AVAudioRecorder — Swift

AVPlayer не възпроизвежда .aif файл, записан с AVAudioRecorder. Текущият ми процес е:

  1. Категорията на AVAudioSession.sharedInstance е зададена на AVAudioSessionCategoryPlayAndRecord
  2. AVAudioRecorder се инстанцира с NSURL в директорията с документи на приложението и настройките на формата на kAudioFormatAppleIMA4, битрейт 32000, 1 канал и честота на дискретизация 16000,0.
  3. Звукът се записва, след което се спира. Файлът е запазен и мога да го намеря в директорията с документи на приложението и да проверя, че аудиото е правилно записано.
  4. Екземпляр на AVPlayer се създава с NSURL на файла. Към този обект се добавя наблюдател, който да регистрира промени в състоянието му. Когато AVPlayer е ReadyToPlay, извиквам функцията за възпроизвеждане.

Въпреки това, въпреки че контролният поток достига точката на AVPlayerStatus.ReadyToPlay и извиква възпроизвеждане, не се произвежда звук. Проверявам грешки и проверявам съществуването и атрибутите на файла в NSURL. Също така се опитах да следвам процеса на тази публикация на SO чрез инстанциране на AVAsset, AVPlayerItem и AVPlayer. Без късмет.

Някакви мисли защо AVPlayer не възпроизвежда аудио за този новозаписан локален файл?

редактиране: Приложението е създадено за iOS 9 с Xcode 7 beta 5. Приложението може да възпроизвежда аудио файлове, предавани поточно с AVPlayer.


person MIGreenberg    schedule 19.08.2015    source източник
comment
Имам много подобен проблем и когато се опитах да възпроизвеждам на симулатор, той проработи. Възпроизвеждането обаче НЕ работи на устройството и не мога да разбера защо. Няма грешки при кодирането или декодирането на аудио файла.   -  person C0D3    schedule 27.09.2020


Отговори (1)


Проблемът не е причинен от AVAudioRecorder или AVPlayer. Моят URL адрес за запис е NSURL, който ще наричам fileURL. Предадох този NSURL на различен контролер за изглед, но AVPlayer не възпроизвежда, когато се инстанцира с fileURL. Получих намек какво се е объркало кога

fileURL.checkResourceIsReachableAndReturnError(&error)

се провали с грешката "Файлът не съществува." Вместо това създадох нов NSURL с пътя на новозаписания файл, използвайки:

let url = NSURL(fileURLWithPath: path)

С този url успях да инстанцирам и възпроизведа екземпляр на AVPlayer.

person MIGreenberg    schedule 04.09.2015