Android MediaPlayer - Иногда видео не воспроизводится даже при воспроизведении звука

Я разрабатываю приложение для Android и использую Android SDK MediaPlayer для воспроизведения некоторых видео в моем приложении. Когда я воспроизводю видео в своем приложении, примерно один из пяти раз звук воспроизводится без видео. Это не простая ошибка кодирования, потому что в большинстве случаев видео воспроизводится идеально.

Я посчитал, что ошибка была вызвана состоянием гонки в моем коде. Однако я добавил несколько отладочных инструкций, и, кажется, все настроено правильно, когда видео не воспроизводится.

Я просканировал Интернет и ТАК пытался найти решения, но ни одно из них не было адекватным (см. Ниже).

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

Подобные вопросы:

MediaPlayer Video не воспроизводится

Android-медиаплеер показывает звук, но не видео

Android-видео, слышит звук, но нет видео

Дополнительная информация:

  • Я встречал эту ошибку на двух телефонах. На Samsung Charge видео воспроизводится в 80% случаев и в 20% случаев есть звук, но нет видео. На T-Mobile Comet все намного хуже; видео воспроизводится только около 10% времени.
  • Это не проблема с файлом. Я пробовал разные видеофайлы и кодеки, и у меня те же проблемы.
  • Это не проблема с носителем.Я пробовал воспроизводить видео, когда оно хранилось во внутреннем хранилище и на SD-карте, это не имеет значения. Я даже попытался прочитать часть файла перед воспроизведением, надеясь, что система кэширует его, но это тоже не помогает.

Обновление:

Я отлаживал это и просматривал logcat. Я обнаружил, что когда видео работает, в logcat появляется что-то вроде следующего:

09-28 00:09:03.651: VERBOSE/PVPlayer(10875): setVideoSurface(0x65638)

Но когда видео не воспроизводится, похоже, что там пустая запись:

09-28 00:03:35.284: VERBOSE/PVPlayer(10875): setVideoSurface(0x0)

Обновление 2:

Когда видео не работает для воспроизведения используется функция MediaPlayer.OnInfoListener с параметрами what == MEDIA_ERROR_UNKNOWN (0x1) и extra == 35 . Я просмотрел кодовую базу Android, чтобы попытаться определить, что означает неизвестная ошибка 35. Я наткнулся на файл pv_player_interface.h, который указывает, что код ошибки 35 соответствует так называемому PVMFInfoTrackDisable . Я погуглил этот термин, который привел меня к файлу под названием pvmf_return_codes.pdf . Этот файл дал мне следующее непонятное объяснение:

4.34. PVMFInfoTrackDisable

Уведомление о том, что конкретный трек отключен. Это для каждой дорожки. Для несжатых аудио / видео форматов в процессе выбора треков, доступных в контенте, если декодер не поддерживает трек, отправляется событие PVMFInfoTrackDisable. Событие, если необходимо, будет отправлено один раз для каждой дорожки.

Я чувствую, что прошел долгий путь, но я не приблизился к поиску ответа ... все еще ищу.

20
задан Community 23 May 2017 в 12:02
поделиться