Как транслировать mp3-файл с дополнительной информацией после расширения в just_audio
Я использую just_audio во флаттере для воспроизведения аудиофайлов. Все прекрасно, за исключением того, что just_audio использует расширение имени файла для определения типа файла. Следовательно, если ваш URL-адрес не заканчивается соответствующими несколькими символами, вы не сможете воспроизвести файл. Из чтения вопросов на GitHub, похоже, есть способ обойти эту проблему ( № 86 и № 87), но, боюсь, я не понимаю ответа.
Может ли кто-нибудь указать мне простой способ воспроизвести такой URL-адрес?
Способы воспроизвести проблему:
- Загрузите пример проекта с сайта just_audio
- Замените один из URI на https://www.dropbox.com/s/egtn3aavqggpdj2/Bible_ResurrectionLife.mp3%3Fdl=1.
- При попытке воспроизвести аудиофайл вы должны увидеть следующую ошибку:
flutter: An error occured (-11800) The operation could not be completed
[VERBOSE-2:ui_dart_state.cc(177)] Unhandled Exception: PlatformException(-11800, The operation could not be completed, null, null)
1 ответ
Первая проблема GitHub, с которой вы связались, не применима в вашем случае, поскольку она связана с обнаружением потоков HLS или Dash специально на Android. Файлы MP3 на iOS и Android определяются не расширением файла, а заголовками HTTP.
В случае обнаружения iOS типа содержимого аудиофайла расширение файла важно только при работе с файлами. Для URL-адресов это
Content-Type
HTTP-заголовок, который iOS использует для определения типа аудио. iOS дополнительно требует, чтобы сервер поддерживал запросы диапазона байтов (см . объяснение Apple ).
Вероятно, Dropbox не выполняет одно из этих требований.
На ум приходят два решения:
Разместите файл MP3 на сервере, который может поддерживать заголовки, необходимые для iOS.
Вы можете попробовать использовать just_audio's. Это предназначено для кэширования звука во время его одновременного воспроизведения и загрузки. Хотя эта функция может вас не заинтересовать, она реализована путем вставки прокси-сервера между медиаплеером iOS и сервером. Прокси-сервер реализован таким образом, что поддерживает запросы байтового диапазона, хотя он не обязательно сможет выполнить запрос байтового диапазона до конца файла, пока кеш не загрузит файл полностью. Поскольку это ваш mp3-файл, вы можете попробовать кодировать mp3-файл так, чтобы он был оптимизирован для потоковой передачи, чтобы iOS не нужно было переходить к концу файла для поиска метаданных. С момента реализации
LockCachingAudioSource
доступен как часть проекта с открытым исходным кодом, вы также можете создать свою собственную версию, которая убирает часть кеширования, если она вам не нужна.