Android MediaPlayer: getDuration () возвращает 0 после prepare () - PullRequest
0 голосов
/ 03 декабря 2011

Я использую MediaPlayer на Honeycomb и не могу получить продолжительность любого видео HLS (потоковая передача по HTTP) в функции onPrepared ().

Если после prepare() вызывается getDuration(), возвращается 0:

public void onPrepared(MediaPlayer mp) {
    // getduration returns 0
    mediaPlayer.start();
    Log.d(TAG, "duration: " + mediaPlayer.getDuration());
}

Однако воспроизведение видео начинается.

Если вызывается getDuration() вonVideoSizeChanged() возвращает правильное значение,

public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
    // returns the correct value
    Log.d(TAG, "duration: " + mediaPlayer.getDuration());
}

Почему getDuration() работает в onVideoSizeChanged(), а не в onPrepared()?

Редактировать : приСначала я подумал, что getDuration () вообще не работает, но нашел, что он возвращает правильное значение в onVideoSizeChanged ().Измененный вопрос для отражения этого.

1 Ответ

1 голос
/ 06 февраля 2012

С этим ничего не поделаешь. Детали потока не будут известны, пока поток не будет прочитан. В зависимости от формата в начале потока может быть правильная информация, подсказка или ничего.

Поскольку всегда вызывается прослушиватель изменения размера видео, вам придется реструктурировать свой код, чтобы получить продолжительность (если она доступна).

(Даже если это ошибка и даже если она исправлена, такое исправление не будет развернуто на миллионах существующих устройств, поэтому вы застряли в текущем поведении.)

...