Intereting Posts
Простая макет теней в Android Как загрузить файл с помощью библиотеки Volley в android? Получите правильную ширину окна после изменения размера или события changechange для Android Как изменить размер шрифта в EditText В чем разница между View.postDelayed () и Handler.postDelayed () в основном потоке? Как получить все файлы из папки с ресурсами Как интерфейс ReadableMap в React-native конвертирует JS в JAVA? Как создать проект Maven, который можно импортировать как проект Android Доступ к исходным данным в ARM_8888 Bitmap для Android Как отключить отладочные сообщения Android MediaPlayer Custom RatingBar Показывает различное количество звезд, когда на api 23 Как сохранить HashMap <Integer, String> в android, используя общие настройки? Несколько экземпляров активности и FLAG_ACTIVITY_REORDER_TO_FRONT Отправлять данные в работу, которая работает в фоновом режиме Android MediaPlayer Live Streaming Останавливается примерно через 1 минуту на Samsung Galaxy S4 и S5

SetVideoSurfaceTexture не удалось: -22 в медиаплеере

Я пытаюсь воспроизвести несколько видео в цикле с помощью MediaPlayer (Android ICS) и менять видео каждый раз при вызове oncompletion ().

Он отлично работает, но после случайного времени приложение замерзает, и я получаю сообщение об ошибке:

[SurfaceView] connect: уже подключено (cur = 3, req = 3) setVideoSurfaceTexture не удалось: -22

Когда эта ошибка возникает, внутренне она вызывает сброс игрока

Ref: mediaplayer.cpp

if (err != OK) { LOGE("setVideoSurfaceTexture failed: %d", err); // Note that we must do the reset before disconnecting from the ANW. // Otherwise queue/dequeue calls could be made on the disconnected // ANW, which may result in errors. reset(); disconnectNativeWindow(); return err; } 

По моему коду я получаю уведомление для onprepared () и начинаю играть.

На самом деле нет никакого воспроизведения из-за этой ошибки.

Поэтому я пытаюсь перезагрузить mediaplayer и вызвать prepare (), когда эта проблема возникла, и медиаплеер не играет, но я не могу зафиксировать эту ошибку (mp.isPlaying () -> true (bec'z, называемый start () в onprepared ()).

Я пробую логику, как

 onprepared() { mp.start(); if (pbm : [SurfaceView] connect : already connected (cur=3, req=3) setVideoSurfaceTexture failed : -22 ) { reset the mediaplayer source and call prepare } } 

Как я могу найти эту ошибку, чтобы снова перезапустить медиаплеер?

Мы можем избежать этой проблемы следующим образом …

  mediaPlayer.setDisplay(null); mediaPlayer.reset(); 

После этого снова установите поверхностный держатель перед запуском медиаплеера

  mediaPlayer.setDisplay(surfaceHolder1); mediaPlayer.start(); in onprepared notification.