Можно ли начать воспроизведение больших файлов .aac без предварительной загрузки всего файла?

Я пытаюсь начать воспроизведение больших файлов .aac в приложении для iOS или, как вариант, резко сократить время загрузки, чтобы воспроизведение могло начаться раньше. Похоже, это может быть особенностью файлов .aac.

В веб-браузерах, таких как Safari и Chrome, продолжительность неверна, а очистка работает плохо (Chrome) или ограничивается пошаговым поиском с самого начала (Safari), но тем не менее воспроизведение начинается быстро. Мой проигрыватель на основе AVFoundation в iOS, похоже, не может сделать это из коробки. Хотя мне бы хотелось иметь функцию очистки, просто возможность начать воспроизведение с высокой стабильностью и без значительной задержки (50 секунд или более) для больших файлов .aac была бы приемлемым решением.

Согласно моему пониманию кодировки файлов .aac, воспроизведение не может начаться до тех пор, пока не будут загружены все отдельные пакеты. Казалось бы, родные функции AVPlayer preferredForwardBufferDuration и automaticallyWaitsToMinimizeStalling должны позволять мне настраивать воспроизведение до полной загрузки файла, но у меня это тоже не работает.

Я проверил здесь ветку форума Apple, которая также не решена:

https://forums.developer.apple.com/thread/63435

Кто-нибудь решил эту проблему?

Если возможно, рассмотрите возможность преобразования вашего файла в формат HLS audio.

dalton_c 31.07.2019 02:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
176
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я использовал следующую стороннюю структуру и работал хорошо. Я надеюсь, что это сработает для вас :)

https://github.com/tumtumtum/StreamingKit

Спасибо Митеш. Эта библиотека была полезна для обзора, но, похоже, она не поддерживается, поэтому не подходит для приложения.

Pigpocket 31.07.2019 02:06
Ответ принят как подходящий

Что ж, я решил проблему медленной загрузки, установив для AVURLAssetPreferPreciseDurationAndTimingKey bool значение false/NO для файлов .aac.

Это точное исправление специально для медленной загрузки этого типа файлов в приложениях iOS, с тем компромиссом, что поиск назад и вперед в файле не будет работать, пока не будет завершена вся загрузка. В Apple говорят:

Note that such precision may require additional parsing of the resource in advance of operations that make use of any portion of it, depending on the specifics of its container format. Many container formats provide sufficient summary information for precise timing and do not require additional parsing to prepare for it; QuickTime movie files and MPEG-4 files are examples of such formats. Other formats do not provide sufficient summary information, and precise random access for them is possible only after a preliminary examination of a file's contents.

Полную документацию смотрите здесь:

https://developer.apple.com/documentation/avfoundation/avurlassetpreferprecisedurationandtimingkey?language=objc

Другие вопросы по теме