VideoView перестает отображаться после возобновления активности и перезапускается - PullRequest
1 голос
/ 15 февраля 2012

Я использую VideoView для отображения потокового видео по протоколу RTSP.Ниже вы можете найти фрагмент кода.

OnCreate() {
    ...
    // Setup video view
    videoView = (VideoView) findViewById(R.id.videoViewStream);
    videoView.setMediaController(new MediaController(this));
    ....
    // Create a button
}

OnButtonClickListener() {
    videoView.setVideoURI(Uri.parse(videoUri));
videoView.requestFocus();
}

У меня нет кода относительно VideoView в функциях OnResume и OnPause.

Вариант использования для этой проблемы:

  1. Откройте приложение и запустите видео
  2. Я сворачиваю приложение, чтобы добраться до рабочего стола Android
  3. Использование других приложений
  4. Повторное открытие или повторный запуск приложения видео
  5. Видео не отображается и не запускается.Я должен кликнуть на VideoView

Вопрос в том, как можно снова воспроизвести видео?Должен ли я поставить start (), stop () или pause () видео?

Любая помощь приветствуется.

TA

1 Ответ

2 голосов
/ 15 февраля 2012

Я бы порекомендовал вам сохранить текущую видео-публикацию (и все, что вам нужно в случае перезапуска) и остановить воспроизведение в onPause. В onDestroy вам нужно выпустить MediaPlayer. Если пользователь вернется, вы получите onResume или onCreate. В onCreate вы начинаете игрока снова, как в первый раз. В onResume вы создаете проверку безопасности, если игрок действительно запущен и все ли в порядке, начните воспроизведение (или дождитесь события щелчка). Проверьте также последнюю сохраненную позицию для возможного поиска.

Я бы извлек код из OnButtonClickListener в отдельный метод и вызвал бы этот метод из clickListener или в onResume, если вы хотите запустить автозапуск.

Обновленный ответ:

Я сделал ошибку с выпуском. Это делается VideoView в методе stopPlayback (см. Исходный код VideoView в grepcode). Я не знаю, как работает ваш потоковый сервер RTSP, но используемый потоковый сервер не поддерживает поиск с помощью метода VideoView seekTo. Вы можете позвонить pause в onPause и start в onResume, но это начнет поток с 0 (в моем случае). Поэтому мне пришлось создать пользовательскую панель поиска. Но это другая история.

В моей реализации я звоню pause в onPause и stopPlayback в onDestroy. В onPause я также сохраняю последнюю позицию. В onCreate я только вижу и устанавливаю средства управления мультимедиа. В onResume я проверяю, есть ли у меня информация о последней позиции. Если это существует, я подготавливаю игрока (setVideoPath, requestFocus, start) с этим параметром (поиск), в противном случае без (поиск = 0).

Это мое решение :) 1027 *

...