Сохранение данных буфера AVPlayer
Я играю аудио с моего сервера, используя AVPlayer в моем приложении. Теперь я хочу, чтобы, когда он полностью буферизовал аудио, я мог сохранить эти данные в приложении, чтобы воспроизвести его позже. Таким образом, любое руководство или помощь, как я могу получить доступ к данным буфера и сохранить его для дальнейшего использования
5 ответов
Я думаю, что ваша проблема будет похожа на загрузку аудио или музыкальных файлов с сервера и последующее воспроизведение их в вашем приложении. В любом случае, если вы хотите сохранить звук в своем приложении, не лучше ли загрузить его и затем воспроизвести? В любом случае, пожалуйста, проверьте эти ссылки
Как загрузить аудиофайлы с сервера в приложение для iPhone?
Скачать музыкальный файл с сервера и сохранить в моем приложении
Надеюсь, они помогут.
Вы могли бы поставить resourceLoader
делегировать контроль над процессом загрузки ресурсов из AVPlayer
а затем предоставить ему данные, когда и когда он запрашивает и становится доступным. Загрузчик ресурсов является свойством AVURLAsset
, Я задокументировал полное решение в своем блоге, но основная идея состоит в том, чтобы переключить протокол вашего URL-адреса на что-то нестандартное, чтобы загрузчик ресурсов AVURLAsset требовал помощи вашего приложения в загрузке этого URL. Затем, когда вы получите AVAssetResourceLoaderDelegate
обратные вызовы, начните загрузку файла и попытайтесь ответить на ожидающие запросы, полученные от этих обратных вызовов делегата, как и когда у вас есть данные. Это позволит прогрессивно загружать / воспроизводить контент без необходимости запуска полноценного HTTP-сервера в вашем приложении или использования других сложных решений.
Команда Calm открыла для себя нашу реализацию. Это доступно как CocoaPod. Это называется PersistentStreamPlayer
,
Он действует как resourceLoader. Большим преимуществом по сравнению с другими реализациями является то, что он не требует, чтобы двоичные данные находились в памяти в любой точке, поэтому он поддерживает большие файлы.
Особенности включают в себя:
- потоковая передача аудиофайла, начало воспроизведения, как только появятся первые данные
- также сохраняет потоковые данные в URL файла, как только буфер завершает работу, выставляя timeBuffered, что полезно для отображения индикаторов хода выполнения буфера в пользовательском интерфейсе.
- обрабатывает повторный запуск аудиофайла после остановки потока буфера (например, медленная сеть)
- простые методы play, pause и destroy (destroy очищает все ресурсы памяти)
- не хранит данные аудиофайлов в памяти, поэтому поддерживает большие файлы, которые не помещаются в ОЗУ
Вы можете найти его здесь: https://github.com/calmcom/PersistentStreamPlayer
Легко сделать... используя тот же URL для вашего аудиопотока, используйте NSURLConnection, чтобы получить данные и сохранить их с помощью NSFilehandler... просто сделайте это сам, пока потоковое аудио и сохраняете одновременно в mp3... дайте мне знать, если вы нужен пример кода...
Вы не можете получить доступ к буферу AVPlayer
, Некоторые советы: Вы можете разместить предварительные (короткие версии аудио) ваших аудиофайлов на вашем сервере, чтобы ваши пользователи могли прослушать предварительные просмотры, прежде чем загружать полные аудиофайлы, или вы можете искать собственные проигрыватели потокового аудио с открытым исходным кодом, например, они позволят вам получить доступ к потоковому буферу. Удачи!