Изменить размер буфера на MediaPlayer

Есть ли способ изменить размер буфера по умолчанию при потоковой передаче MediaPlayer ?

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

Сожалею!

Размер установлен в frameworks / base / media / libstagefright / include / NuCachedSource2.h

KDefaultHighWaterThreshold и kDefaultLowWaterThreshold выросли между Android 2.3.7 и Android 4.0.4. Размер буфера вырос на коэффициент 8, как указано в этом потоке. Размер буфера для Android – MediaPlayer в ICS 4.0

Вам нужен пользовательский ром.

Android 2.3.7

 enum { kPageSize = 65536, kHighWaterThreshold = 5 * 1024 * 1024, kLowWaterThreshold = 512 * 1024, // Read data after a 15 sec timeout whether we're actively // fetching or not. kKeepAliveIntervalUs = 15000000, }; 

Android 4.0.4

 enum { kPageSize = 65536, kDefaultHighWaterThreshold = 20 * 1024 * 1024, kDefaultLowWaterThreshold = 4 * 1024 * 1024, // Read data after a 15 sec timeout whether we're actively // fetching or not. kDefaultKeepAliveIntervalUs = 15000000, }; 

Если вы возражаете против этой проблемы, возможно, вас интересует отчет об ошибке https://code.google.com/p/android/issues/detail?id=29870

Это может быть не совсем уместно для вашей конкретной проблемы, но, возможно, кому-то это поможет:

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

Чтобы получить оценку размера аудио / видео буфера, вы можете реализовать OnBufferingUpdateListener, чтобы определить, когда буфер полностью заполнен, и использовать TrafficStats, чтобы определить, сколько байтов вашего потокового медиа потреблялось между запуском потока и заполнением буфера. Это должен быть индикатор размера буфера, который использует MediaPlayer …

Проблема возникает при потоковой передаче живого контента, например: онлайн-радио. В качестве живого контента я не могу ничего вычислить, потому что длина трека бесконечна, а методы «Буферизация» в MediaPlayer никогда не вызываются.

Мое намерение – установить буфер в зависимости от коэффициента битрейта, чтобы оптимизировать ресурсы и увеличить его, чтобы предотвратить разъединение 3G. Ну, действительно, я не могу предотвратить разъединение 3G, но хочу сказать, что я могу сделать это соединение дольше, чтобы потоковая передача более живым для конечного пользователя.

Поэтому я думаю, что могу закодировать прокси-сервер Java для подключения к живому контенту и установить свой собственный размер буфера в зависимости от битрейта, а затем передать этот прокси в качестве URL-адреса на MediaPlayer и воспроизвести контент.

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