VideoView не воспроизводит видео с нужной позиции - PullRequest
13 голосов
/ 03 ноября 2011

Я использую VideoView и панель поиска, но когда я ищу в нужном месте (..) через seekBar, он воспроизводит видео с начала.

я пытаюсь этот код:

 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {

           mVideoView.seekTo(progress);
}

Ответы [ 3 ]

25 голосов
/ 24 мая 2013

VideoView не имеет OnSeekCompleteListener(), но вы можете получить доступ к MediaPlayer из onPrepared метода VideoView, а затем установить OnSeekCompleteListener, например:

mVideoView.setOnPreparedListener(new OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {

        mp.setOnSeekCompleteListener(new OnSeekCompleteListener() {
            @Override
            public void onSeekComplete(MediaPlayer mp) {
                //TODO: Your code here
            }
        });

    }
});
4 голосов
/ 13 августа 2012

Звонок на VideoView.seekTo() является оберткой вокруг MediaPlayer.seekTo(). Эта функция возвращает почти сразу, хотя фактический поиск все еще выполняется. Поэтому вы хотите дождаться завершения операции через MediaPlayer.OnSeekCompleteListener.

Однако, как упоминал Рено, стандарт VideoView не поддерживает OnSeekCompleteListener.

Но вы можете скопировать и локально настроить класс VideoView, чтобы добавить эту поддержку самостоятельно.

Сначала начните с копии VideoView.java . Или вы можете клонировать все frameworks / base repo, но предупредив, что для загрузки требуется более 1 гигабайта данных.

Скопируйте VideoView.java в ваш проект Eclipse Android, и он начнет собираться, но не получится. Вот что я сделал для компиляции:

  1. Обновите оператор package , чтобы он соответствовал вашему проекту.
  2. Закомментируйте ссылки на MetaData. Исправление для этого находится в моем списке задач. Их необходимо заменить звонками на MediaMetadataRetriever.
  3. Заменить mContext звонками на getBaseContext()

Теперь вы готовы добавить код для OnSeekCompleteListener. Реализация аналогична другим слушателям, т.е. OnCompletionListener.

public class VideoView extends SurfaceView
        implements MediaPlayerControl {

    // The client's listener which is the notification callback.
    private OnSeekCompleteListener mOnSeekCompleteListener;

    // Set up MediaPlayer to forward notifications to client.
    private MediaPlayer.OnSeekCompleteListener mSeekCompleteListener =
        new MediaPlayer.OnSeekCompleteListener() {
        public void onSeekComplete(MediaPlayer mp) {
            if (mOnCompletionListener != null) {
                mOnCompletionListener.onCompletion(mMediaPlayer);
            }
        }
    };

    // API for client to set their listener.
    public void setOnSeekCompleteListener(OnSeekCompleteListener l)
    {
        mOnSeekCompleteListener = l;
    }
}

Наконец, обновите свой собственный код:

  1. Обновите ссылки на android.widget.VideoView, чтобы использовать ваши настроенные VideoView.
  2. Реализовать слушателя и настроить его с помощью вызова setOnSeekCompleteListener().

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

3 голосов
/ 03 ноября 2011

Вам нужно дождаться завершения поиска, к сожалению, VideoView не имеет OnSeekCompleteListener() (почему Google? -_-)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...