2012-02-15 3 views
1

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

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 Desktop
  3. Использование других приложений
  4. Повторно откройте или повторное включение видеоприложения
  5. Видео не отображается и не работает. Я должен отскочить на VideoView

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

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

TA

ответ

2

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

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

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

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

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

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

+0

Я возьму ваш совет и попробую запрограммировать его. Как вы думаете, я должен использовать MediaPlayer вместо класса VideoView? У вас есть код примера для MediaPlayer? Я спрашиваю, так как вы говорите, что onDestroy я должен освободить медиаплеер, или вы просто хотите установить его в null? – jlanza

+0

Я обновлю свой ответ;) – zoki

+0

Код для игрока в галерее галереи - хороший пример того, как реализовать сохранение текущей позиции и резюме видео: http://grepcode.com/file/repository.grepcode.com /java/ext/com.google.android/android-apps/4.0.3_r1/com/android/gallery3d/app/MoviePlayer.java?av=f – inky