Intereting Posts
Применить селектор Android для определенного дочернего элемента списка и отключить селектор на других дочерних элементах в том же элементе списка Как открыть программу Android SDK Manager через терминал? Запуск службы android с использованием явного или неявного намерения Что такое Android-версия HTML TextArea? Отправка объекта из службы в действие (не может быть маршалирована без прав) Сообщение данных FCM, не полученное в Android, когда приложение находится в фоновом режиме Почему работает ITelephony.aidl? Android MediaPlayer готовится слишком долго Жесткие папки для карманных компьютеров высокого разрешения Курсор Edittext сбрасывается налево после обновления привязки данных Android Функция ajax jQuery не работает в приложении Android PhoneGap Как использовать дерево зависимостей Gradle для разрешения несоответствия версии библиотеки поддержки Android? LogCat перестает работать Почему значение тайм-аута не соблюдается андроидом HttpURLConnection? ImageView – имеют ширину соответствия по высоте?

Android MediaPlayer занимает много времени для подготовки и буферизации

Мое приложение занимает много времени для подготовки и буферизации аудиопотока. Я прочитал этот вопрос. Почему так долго требуется, чтобы MediaPlayer для Android подготовил некоторые потоки в реальном времени для воспроизведения? , Однако он просто говорит, что люди столкнулись с этой проблемой, но не заявляют, как улучшить проблему.

Я испытываю это во всех версиях Android, проверенных с 2.2 – 4.1.2.

Потоки имеют приемлемую скорость передачи данных для мобильного и 3G-соединения. Один и тот же поток занимает менее секунды, чтобы начать буферизацию в эквивалентном приложении iOS.

Есть ли способ указать количество времени, которое должно быть буферизовано? Я знаю, что приложение Radio Tune In предлагает эту функцию ( https://play.google.com/store/apps/details?id=tunein.player ).

Благодарю.

Изменить: я снова проверил и обнаружил, что это происходит только на устройствах, на которых работает Gingerbread и выше (> = 2.3). Я знаю, что Android изменил базовую структуру от OpenCore до StageFright. Итак, как я могу оптимизировать среду мультимедиа? Похоже, что старый HTC Wildfire может готовить, транслировать и играть, буквально в 10 раз быстрее, чем новый HTC One X и Nexus 7.

Solutions Collecting From Web of "Android MediaPlayer занимает много времени для подготовки и буферизации"

Я много месяцев боролся с этим вопросом. Наконец я нашел решение.

Реальная проблема заключается в реализации класса MediaPlayer. В частности, MediaPlayer поддерживает буферизацию данных. Вот почему решение состоит в том, чтобы создать собственную буферизацию, сохранить ее в временном файле и передать ее MediaPlayer.

Этот учебник и исходный код объясняют, как именно. http://androidstreamingtut.blogspot.nl/2012/08/custom-progressive-audio-streaming-with.html

Приспосабливая этот код, легко создать гораздо лучший потоковый проигрыватель.

Разработчики Google действительно испортили здесь.

EDIT: Этот ответ довольно старый. В настоящее время я бы рекомендовал не использовать MediaPlayer и вместо этого использовать ExoPlayer . Он расширяемый, стабильный и может воспроизводить множество различных типов носителей. Вы можете найти его здесь: https://github.com/google/ExoPlayer/

Там действительно мало что можно сделать, так как класс Android MediaPlayer не обеспечивает доступ к более низким настройкам уровня, таким как размер буфера. Единственной альтернативой было бы сделать собственный плеер с помощью AudioTrack и библиотеки, такой как FFmpeg, для декодирования.

Единственное, что я бы рекомендовал – это поиграть с кодировкой. Например, для MP4 убедитесь, что MOOV Atom находится в начале файла (есть вопросы по S / O относительно того, как это сделать с помощью ffmpeg и т. Д.). С MP3-файлами вы можете посмотреть, например, на различные кодеки или битрейты.

Например, вы можете попробовать несколько аудиофайлов, которые вы находите в Интернете, и если вы видите тот, который не занимает много времени для буферизации, попробуйте также закодировать свои файлы.