Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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 для решения этой проблемы.