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);
если вы хотите время перед воспроизведением медиа