Вопрос

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

Если getDuration() вызывается после prepare(), он возвращает 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 (). Измененный вопрос, чтобы отразить это.

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top