VLCJ getLength()

Я использую библиотеку VLCJ для воспроизведения мультимедийных файлов, которые расположены на каком-либо веб-сервере. Единственная проблема, которую я имею, состоит в том, как получить правильную длину СМИ. Я пытаюсь выполнить parseMedia, но приложение зависает, и если я вызываю getLength на медиаплеере, оно возвращает 0. Вне зависимости от того, работает ли getPosition() и setPosition(float), оно работает нормально, но это говорит только о том, что процент воспроизведенного мультимедиа не соответствует фактической длине в секундах.

Можно ли получить правильную длину потокового мультимедиа и использовать прогресс для перемещения вперед и назад?

Спасибо.

4 ответа

Решение

Если getLength() возвращает 0, потому что VLCJ не знает (или ему не сказали), как долго будет длиться поток, поэтому он буквально не может дать вам точный результат!

Единственный способ, о котором я могу думать, - это если у вас есть что-то еще, что работает на стороне сервера (возможно, экземпляр сервера VLCJ), который передает длину файла отдельно?

VLC имеет проблемы с получением длины данных Theora/Vorbis. Это должно быть исправлено разработчиками vlc, а не vlcj. Они просто не беспокоятся прямо сейчас...

Как я видел в обычных случаях, getLength() возвращает 0, когда вы пытаетесь вызвать метод сразу после play. но когда вы вызываете его в другом событии / методе, он возвращает правильную длину. для этого я пробовал спать в течение нескольких миллисекунд после того, как метод воспроизведения / поток возвращает правильную длину. тогда может потребоваться время для загрузки всех ссылок. и теперь я точно не знаю, что за этим стоит. но, как указано выше, потоковое мультимедиа, я думаю, правильный результат возможен после завершения потоковой передачи

Вы можете использовать этот простой код:

int DurationInSeconds;
parseMedia();
DurationInSeconds = (int)(player.getMediaMeta().getLength()/1000);

если вы хотите время перед воспроизведением медиа

Другие вопросы по тегам