есть ли способ изменить размер буфера по умолчанию при потоковой передаче MediaPlayer
?
Изменить размер буфера на MediaPlayer
Ответ 1
Размер буфера выпекается в прошивке. Все, что вы можете сделать, это следить за тем, сколько буфера заполнено, и даже это просто на процентной основе.
К сожалению!
Ответ 2
Размер устанавливается в 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
Ответ 3
Это может быть не совсем уместно для вашей конкретной проблемы, но, возможно, кому-то это поможет:
Мне просто нужно знать, насколько большой буфер. Я предполагаю, что это фиксированное количество байтов, а не фиксированное количество времени воспроизведения.
Чтобы получить оценку размера аудио/видео буфера, вы можете реализовать OnBufferingUpdateListener, чтобы определить, когда буфер полностью заполнен, и используйте TrafficStats, чтобы определить, сколько байтов вашего потокового медиа потреблялось между запуском потока и заполнением буфера. Это должен быть индикатор размера буфера, который MediaPlayer использует...
Ответ 4
Проблема возникает при потоковой передаче живого контента, например: онлайн-радио. В качестве живого контента я не могу ничего вычислить, потому что длина трека бесконечна, а методы "Буферизация" в MediaPlayer никогда не вызываются.
Мое намерение - установить буфер в зависимости от коэффициента битрейта, чтобы оптимизировать ресурсы и увеличить его, чтобы предотвратить разъединение 3G. Ну, действительно, я не могу предотвратить разъединение 3G, но я хочу сказать, что я могу сделать это соединение дольше, чтобы поддерживать потоковое видео более живым для конечного пользователя.
Итак, я думаю, что могу закодировать прокси-сервер Java для подключения к живому контенту и установить свой собственный размер буфера в зависимости от скорости передачи, а затем передать этот прокси в качестве URL-адреса на MediaPlayer и воспроизвести контент.
Но прежде, чем начать кодирование этого, я хочу знать, есть ли другой метод или другой лучший трюк, который я могу применить к MediaPlayer для решения этой проблемы.