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 и вызывает play, звук не воспроизводится. Я проверяю ошибки и проверяю наличие и атрибуты файла в NSURL. Я также пробовал следить за процессом этого сообщения SO, создав экземпляры AVAsset, AVPlayerItem и AVPlayer. Не повезло.

Есть мысли о том, почему AVPlayer не воспроизводит звук для этого недавно записанного локального файла?

изменить: приложение создано для iOS 9 с бета-версией Xcode 7 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