OnInfoListener nunca se llama

Estoy tratando de escuchar a OnInfoListener de un mediaplayer que he creado para obtener cuando comienza y finaliza el almacenamiento en búfer.

Por alguna razón el evento nunca se dispara.

Este es mi código de inicialización.

private void initPlayer(Surface s){
    mPlayer = new MediaPlayer();
    mPlayer.setSurface(s);


    mPlayer.setOnCompletionListener(this);
    mPlayer.setOnErrorListener(this);
    mPlayer.setOnInfoListener(this);
    mPlayer.setOnPreparedListener(this);
    mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

    try {
        mPlayer.setDataSource(file_url);
        mPlayer.prepare();
    } catch (IllegalArgumentException e) {
        OnError(PLAYER_ERRORS.player_not_loaded, e.getMessage() + "");
    } catch (SecurityException e) {
        OnError(PLAYER_ERRORS.player_not_loaded, e.getMessage() + "");
    } catch (IllegalStateException e) {
        OnError(PLAYER_ERRORS.player_not_loaded, e.getMessage() + "");
    } catch (IOException e) {
        OnError(PLAYER_ERRORS.no_connection, e.getMessage() + "");
    }
}

Y este es mi oyente

    @Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {


    if(what == MediaPlayer.MEDIA_INFO_BUFFERING_START)
    {
        OnEvent(PLAYER_EVENT.buffering_start);
    }
    else if(what == MediaPlayer.MEDIA_INFO_BUFFERING_END)
    {
        OnEvent(PLAYER_EVENT.buffering_end);
        OnGotDuration(getDuration());
    }

    return what == MediaPlayer.MEDIA_INFO_BUFFERING_START || what == MediaPlayer.MEDIA_INFO_BUFFERING_END;
}

¿Puede alguien ayudarme, por favor, a entender por qué está sucediendo esto? Gracias

Respuestas a la pregunta(1)

Su respuesta a la pregunta