MediaPlayer() заикается звук (Android)

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

MediaPlayer mp = new MediaPlayer();
    try{
    mp.setDataSource("http://radiotool:80/feed 342.mp3");//hardcoded for testing purposes
    mp.prepare();
    mp.start();
    }
    catch(Exception e)
    {Log.d("Error came up man",", check the internet connection and stuff..");

person ankit rawat    schedule 15.03.2013    source источник
comment
Пробовали ли вы транслировать другие mp3-файлы? Может проблема кроется в этом мп3, просто предполагаю.   -  person Ende Neu    schedule 15.03.2013
comment
Да, я пробовал много разных прямых трансляций, у всех одна и та же проблема с заиканием, но обычные mp3-файлы (например, песни) воспроизводятся отлично...   -  person ankit rawat    schedule 16.03.2013
comment
Чоппинг и заикание, как часто? Например, вы слышите блок 300 мс, затем 100 мс тишины, затем 300 мс звука последовательно? Или он играет 1-3 секунды, останавливается на 1-3 секунды и снова играет? Откуда вы знаете, что это не проблема с подключением, может быть, с WiFi? Насколько велик ваш буфер?   -  person Brad    schedule 16.03.2013
comment
Да, я слышу 300 мс звука и 100 мс тишины, вот так. Я знаю, что проблема не в Wi-Fi, так как когда я играю этот канал в Google Chrome на своем компьютере, он воспроизводится отлично. Потоковые песни (на эмуляторе) с других сайтов также воспроизводятся отлично. Но лента, которую я хочу играть, заикается. Это потому, что стрим — это прямой эфир, а не песня?   -  person ankit rawat    schedule 16.03.2013
comment
Прямая трансляция, предварительно записанная, не имеет значения. Если вы играете во что-то по тому же протоколу, игрок не знает. Единственная разница в том, что прямая трансляция может изначально не отправлять гигантский буфер. Обычно это не имеет значения. Попробуйте этот поток: 143.226.75.100/waug_mp3_128k У него большой буфер, который сбрасывается клиенту как можно быстрее. .   -  person Brad    schedule 17.03.2013


Ответы (1)


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

По сути, пропадание звука происходит из-за постоянного опустошения буфера. Чтобы это исправить, нужно увеличить размер буфера. Кажется, сейчас это невозможно, но другим способом может быть самостоятельное управление HTTP-клиентом и проксировать данные в MediaPlayer. Эта ссылка довольно старая ... надеюсь, с тех пор кто-то понял, как это сделать по-другому. Я не Android-разработчик, поэтому точно сказать не могу.

Сначала я бы позвонил mp.prepareAsync() и подождал 2 секунды после того, как MediaPlayer сообщит вам, что он готов к запуску. У меня есть подозрение, что данные будут продолжать буферизоваться в фоновом режиме, пока вы не вызовете .start().

person Brad    schedule 16.03.2013